Kubernetes in Docker(kind)を試してみた
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ってなにそれおいしいの?という人向けの超入門
- Kubernetesに入門したい
- 「入門Kubernetes」入門 / 20180609 GCPUG Hiroshima #4
- Kubernetesの基本を学ぶ
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の場合はこちらを参照ください。
-
-
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に関するコマンドはすべてこちらを引用しました。
Discussion