#はじめに
今までローカルPC上でKubernetes環境が必要な時はminikubeを使っていたのですが、今回はkindを試してみることにしました。
kind(Kubernetes IN Docker)は名前の通り、Dockerコンテナーをノードとして使ってKubernetesクラスターを動かすというツールです。
今回構築した環境はこちら:
Ubuntu 20.04.3
Docker version 20.10.12
kubectl version 1.23.0
kind version 0.11.1
#インストール手順
まずはインストール作業に必要となるパッケージをインストールしておきます。
$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
##Docker
公式の手順を参考に、Docker Engineをインストールします。
###Dockerリポジトリーの設定
- GPGキーのダウンロード
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- リポジトリーの登録
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
###Docker Engineのインストール
ここでは最新バージョンをインストールしています。特定のバージョンを指定したい場合は前述の公式手順を参考にしてください。
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
###稼働確認
hello-worldイメージを実行してみます。
初回実行時はローカルにイメージがないので、自動的にDockerHubからダウンロードしてから実行されます。以下のように、”Hello from Docker!”メッセージが表示されれば成功です。
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest
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
kubernetesのコマンドラインツールであるkubectlが使えないといろいろ困るので、公式の手順を参考にインストールしておきます。
- Google Cloud公開署名鍵のダウンロード
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
- リポジトリーの登録
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
- インストール
$ sudo apt update
$ sudo apt install kubectl
##kind
公式のQuick Startを参考にインストール。
ビルド済みバイナリーをダウンロードして、ファイル名 kindでPATHが通っているディレクトリー(ここでは/usr/local/sbin)に配置します。
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
$ chmod +x ./kind
$ sudo mv ./kind /usr/local/sbin/kind
#稼働確認
必要なソフトウェアのインストール作業が完了したので、ここからはKubernetesクラスターを作って遊んでみます。
###Kubernetesクラスターを作る
kind create cluster
コマンドでクラスターを作ります。
$ sudo kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.21.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
Thanks for using kind! 😊
--nameオプションでクラスター名を指定できますが、無指定だとデフォルトのkindというクラスターが作成されます。
もう一個--name test
オプション指定してtestという名前のクラスターも作っておいて、クラスター情報を表示してみます。
- kindコマンドで
$ sudo kind get clusters
kind
test
- docker psコマンドでも
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2316909cc9e7 kindest/node:v1.21.1 "/usr/local/bin/entr…" 3 minutes ago Up 2 minutes 127.0.0.1:36987->6443/tcp test-control-plane
e0c6d15b41ec kindest/node:v1.21.1 "/usr/local/bin/entr…" 17 minutes ago Up 16 minutes 127.0.0.1:41259->6443/tcp kind-control-plane
作ったクラスターは、kubectlコマンドでいろいろ操作できます。
$ sudo kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
kind-kind kind-kind kind-kind
* kind-test kind-test kind-test
デフォルト・コンテキストが後から作ったtestの方になっているので、kindに切り替えます。
$ sudo kubectl config use-context kind-kind
Switched to context "kind-kind".
$ sudo kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kind-kind kind-kind kind-kind
kind-test kind-test kind-test
###hello-worldを動かす
作ったクラスターで、お約束の(?)hello-worldを実行してみます。
$ sudo kubectl run hello-world --image=hello-world --restart=Never
pod/hello-world created
podの一覧を表示してみます。このときはまだ実行中だったのでステータスがRunningですが、終了したらCompletedになります。
$ sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world 1/1 Running 0 3s
podのログを表示してみます。
ちゃんと"Hello from Docker!"メッセージが出力されていますね。
$ sudo 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/
podの削除もkubectlコマンドでできます。
$ sudo kubectl delete pod hello-world
pod "hello-world" deleted
###クラスターの削除
クラスターの削除はkindコマンドでできます。作成時と同様に、--nameオプションで削除するクラスター名を指定できます。無指定時はデフォルトのkindクラスターが削除されます。
$ sudo kind delete cluster --name test
Deleting cluster "test" ...
$ sudo kind delete cluster
Deleting cluster "kind" ...
#まとめ
「Linux環境でKubernetesクラスターを動かす」ということで、Docker、kindのインストールから、簡単な稼働確認までやってみました。
今回はUbuntuを使いましたが、同じようにWindowsやMacでもお手軽にKubernetes環境を構築できるので、お勉強やちょっとしたテストなど色々と使えそうです。
お次はこの環境にKnativeをインストールして、ローカルでサーバーレス環境を作ってみます。
kind + Knativeでローカルにサーバーレス環境をつくる