Kubernetes in Docker(kind)を試してみた

公開:2020/12/14
更新:2020/12/15
9 min読了の目安(約8500字TECH技術記事

Kubernetes in Docker(kind)を試してみた

TechCommit Advent Calendar 2020の16日目を担当させていただきます。そう と申します!

Kubernetes関連のお話ということで、Kubernetes in Dockerを試してみたので記事にさせていただきます。

概要

Kubernetes in Docker で kubernetes clusterを構築して、お試しで hello-world pod (podの中身はhello-worldコンテナ)をデプロイしてログを確認してみます。

目次

セクションが増えたので目次を用意してみました。
(追記:ページ内リンクがうまくいかなかったので、一旦リンクははずしてます。)

  • 本編
    • Kubernetesとは?
    • Kubernetes in Dockerとは?
    • 構築環境について
    • 事前準備について
    • 構築してみる
    • おわりに
  • 引用、参考等させていただきました

本編

Kubernetesとは?

Kuberneteはコンテナオーケストレーションができるなんかとにかくすごいやつです!(語彙力)
私の感覚的すぎる語彙力で説明するよか、こちらのリンク先の資料をみられた方がわかりやすいかもです・・・!

Kubernetes in Dockerとは?

Kubernetes in Dockerは、通称kindと呼ばれ、公式ホームページはこちらにあります。以降Kubernetes in Dockerをkindと呼びます。

こんなアイコンです。とてもかわいいです。

中身はこんな感じで動いているようです。(こういうのをソース読んでさらっと描けるようになりたい・・・)

構築環境について

下記の環境でためしました。

  • MacBook Pro
  • macOS Catalina バージョン10.15.7

事前準備について

kubernetes in docker とある通り、予めdockerのインストールが済んでいる必要があります。
dockerのインストールについては、下記の記事が参考になるかと思います!
リンク先ほ英語のページなので、google翻訳とかみらい翻訳とかで日本語にしていただければと思います。(きっとzennやqiitaやはてぶろにも他の方が書いてくださった、親切な記事があるはず・・・!)

構築してみる

早速構築してみましょう。

  • kindをインストールします。

    • Macの場合

      $ brew install kind
      ==> Downloading https://homebrew.bintray.com/bottles/kind-0.9.0.catalina.bottle.1.tar.gz
      ==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/e5ba99b5f14711e0dcb121a992d74c5ee6c6b0468b27e5200bf796d4987e13c0?response-cont
      ######################################################################## 100.0%
      ==> Pouring kind-0.9.0.catalina.bottle.1.tar.gz
      ==> Caveats
      Bash completion has been installed to:
      /usr/local/etc/bash_completion.d
      ==> Summary
      🍺  /usr/local/Cellar/kind/0.9.0: 8 files, 9.2MB
      $
      
    • Linux、Windowsの場合はこちらを参照ください。

      https://kind.sigs.k8s.io/docs/user/quick-start/

  • kindクラスターを生成します。

    $ kind create cluster
    Creating cluster "kind" ...
    ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 
    ✓ Preparing nodes 📦  
    ✓ Writing configuration 📜 
    ✓ Starting control-plane 🕹️ 
    ✓ Installing CNI 🔌 
    ✓ Installing StorageClass 💾 
    Set kubectl context to "kind-kind"
    You can now use your cluster with:
    
    kubectl cluster-info --context kind-kind
    
    Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
    $
    
  • 作成したkindクラスターを表示します。kindクラスターができました!

    $kind get clusters
    kind
    $ 
    
  • 作成したkindクラスターの情報を表示します。

    クラスターができれば、kubectlで操作ができます!便利ですね。

    $ kubectl cluster-info --context kind-kind
    Kubernetes master is running at https://127.0.0.1:57741
    KubeDNS is running at https://127.0.0.1:57741/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    $
    
  • kubectlのむきを確認したところ、kind-kind(kind クラスター)に向いているようです。

    markdownでは色がわからないので、*をつけてます。

    $ kubectx
    docker-desktop
    docker-for-desktop
    * kind-kind
    minikube
    $
    
  • お約束の、全てのネームスペースにあるリソースを表示してみます。

    $ kubectl get all --all-namespaces
    NAMESPACE            NAME                                             READY   STATUS    RESTARTS   AGE
    kube-system          pod/coredns-f9fd979d6-65q8q                      1/1     Running   0          33m
    kube-system          pod/coredns-f9fd979d6-qn9lt                      1/1     Running   0          33m
    kube-system          pod/etcd-kind-control-plane                      1/1     Running   0          34m
    kube-system          pod/kindnet-xz975                                1/1     Running   0          33m
    kube-system          pod/kube-apiserver-kind-control-plane            1/1     Running   0          34m
    kube-system          pod/kube-controller-manager-kind-control-plane   1/1     Running   0          34m
    kube-system          pod/kube-proxy-gtz5z                             1/1     Running   0          33m
    kube-system          pod/kube-scheduler-kind-control-plane            1/1     Running   0          34m
    local-path-storage   pod/local-path-provisioner-78776bfc44-7vtzz      1/1     Running   0          33m
    
    NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
    default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  34m
    kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   34m
    
    NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    kube-system   daemonset.apps/kindnet      1         1         1       1            1           <none>                   34m
    kube-system   daemonset.apps/kube-proxy   1         1         1       1            1           kubernetes.io/os=linux   34m
    
    NAMESPACE            NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    kube-system          deployment.apps/coredns                  2/2     2            2           34m
    local-path-storage   deployment.apps/local-path-provisioner   1/1     1            1           34m
    
    NAMESPACE            NAME                                                DESIRED   CURRENT   READY   AGE
    kube-system          replicaset.apps/coredns-f9fd979d6                   2         2         2       33m
    local-path-storage   replicaset.apps/local-path-provisioner-78776bfc44   1         1         1       33m
    $ 
    
  • とりあえず試しに動作確認します。

    • hello-world pod を起動します。

      $ kubectl run hello-world --image=hello-world  --restart=Never
      pod/hello-world created
      $
      
    • podがcompletedになったので起動し終わったようですね。

      $ kubectl get pods 
      NAME          READY   STATUS      RESTARTS   AGE
      hello-world   0/1     Completed   0          3s
      $ 
      
    • podのログを確認します。

      hello-world の pod の中で動いていた hello-world コンテナのログが表示されています。
      Hello from Dockerとでたのでちゃんと動いてますね!!

      $ kubectl logs hello-world
      
      Hello from Docker!
      This message shows that your installation appears to be working correctly.
      
      To generate this message, Docker took the following steps:
      1. The Docker client contacted the Docker daemon.
      2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
          (amd64)
      3. The Docker daemon created a new container from that image which runs the
          executable that produces the output you are currently reading.
      4. The Docker daemon streamed that output to the Docker client, which sent it
          to your terminal.
      
      To try something more ambitious, you can run an Ubuntu container with:
      $ docker run -it ubuntu bash
      
      Share images, automate workflows, and more with a free Docker ID:
      https://hub.docker.com/
      
      For more examples and ideas, visit:
      https://docs.docker.com/get-started/
      
      $ 
      
    • お片付け

      $ kubectl delete pod hello-world
      pod "hello-world" deleted
      $
      

おわりに

kindは簡単にクラスターが構築できて便利でした。
今回は本当に触りだけでしたが、もう少し遊んでみようかと思います!

明日は @naokikobashi さんです、お楽しみに!

引用、参考等させていただきました

  • kind
    • kindに関するコマンドはすべてこちらを引用しました。