Mac のローカル環境で Kubernetes の検証をするときに,お手軽な Docker Desktop for Mac "Edge" を使っている.Feature Gates を有効化した Kubernetes クラスターで検証をするときは minikube に --feature-gates
オプションを指定して使うこともある.
- Docker Desktop for Mac Edge release notes | Docker Documentation
- GitHub - kubernetes/minikube: Run Kubernetes locally
kind 🐳
「Kubernetes 完全ガイド 第2版」を読んでいたら,ローカル環境に Kubernetes クラスターを構築するツールの選択肢として kind が追加されていた.kind を使うと,Docker コンテナを Kubernetes ノードとして Kubernetes クラスターを構築し,簡単に「マルチノード構成」を実現できる.今回は kind を試す.
今回 kind のベースとして使う Docker Desktop for Mac "Edge" では「Kubernetes 設定」を無効化した.また,ドキュメントには Docker Desktop のメモリを「6GB ~ 8GB」確保すると書いてある.今回は Mac のリソース的に厳しいため,少ないけど「4GB」にした.
Mac に kind をインストールする 🐳
まず Homebrew で kind をインストールする.ドキュメントは以下にまとまっている.
$ brew install kind $ kind version kind v0.9.0 go1.15.2 darwin/amd64
Kubernetes クラスターを構築する 🐳
kind では kind create cluster
コマンドを使えば,簡単に Kubernetes クラスターを構築することができる.さらに「configuration file(設定ファイル)」に Kubernetes クラスター構成を記述することもできる.今回は「1 コントロールプレーン」と「3 データプレーン」の「マルチノード構成」で構築するため,YAML を以下のように作成した.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker - role: worker
作成した設定ファイル kind-config.yaml
を指定して kind create cluster
コマンドを実行すると,以下のように簡単に Kubernetes クラスターを構築できた.今回インストールした kind v0.9.0 を使うと,デフォルトでは Kubernetes v1.19.1 になる.
$ kind create cluster --config kind-config.yaml Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Thanks for using kind! 😊
コンテキストは自動的に kind-kind
に切り替わっていた.そして,設定ファイルに記述した通り「マルチノード構成」になっている.便利!
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE docker-desktop docker-desktop docker-desktop * kind-kind kind-kind kind-kind $ kubectl config current-context kind-kind $ kubectl get nodes NAME STATUS ROLES AGE VERSION kind-control-plane Ready master 13m v1.19.1 kind-worker Ready <none> 12m v1.19.1 kind-worker2 Ready <none> 12m v1.19.1 kind-worker3 Ready <none> 12m v1.19.1
構築した Kubernetes クラスターを削除する場合は kind delete cluster
コマンドを使う.
$ kind delete cluster Deleting cluster "kind" ...
バージョン指定で Kubernetes クラスターを構築する 🐳
次に Kubernetes v1.19.1 ではなく Kubernetes v1.18.8 で Kubernetes クラスターを構築していく.設定ファイルに image
フィールドを追加するとバージョンを指定できる.指定する「イメージ名」と「タグ名」は GitHub の Releases に載っている.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb
同じように kind create cluster
コマンドを実行すると,今度は Kubernetes v1.18.8 で Kubernetes クラスターを構築できた.
$ kind create cluster --config kind-config.yaml Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.18.8) 🖼 ✓ Preparing nodes 📦 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Have a nice day! 👋 $ kubectl get nodes NAME STATUS ROLES AGE VERSION kind-control-plane Ready master 13m v1.18.8 kind-worker Ready <none> 12m v1.18.8 kind-worker2 Ready <none> 12m v1.18.8 kind-worker3 Ready <none> 12m v1.18.8
もう1度 Kubernetes クラスターを削除しておく.
$ kind delete cluster Deleting cluster "kind" ...
Feature Gates を有効化して Kubernetes クラスターを構築する 🐳
最後は Feature Gates を有効化して Kubernetes クラスターを構築する.
今回は Kubernetes v1.18 (Alpha) で使えるようになった「Immutable ConfigMaps 機能(ConfigMap の値を更新できなくする)」を試す.
Feature Gates を有効化する場合,以下のように設定ファイルに featureGates
を記述して ImmutableEphemeralVolumes
など「Feature Gates 名」を true
にする.簡単!サンプルを検索すると kubeadmConfigPatches
を記述する例も載っていたけど,今はもっと簡単に記述できるようになっていた.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb - role: worker image: kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb featureGates: ImmutableEphemeralVolumes: true
Feature Gates を有効化して,もう1度 Kubernetes クラスターを構築する.
$ kind create cluster --config kind-config.yaml Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.18.8) 🖼 ✓ Preparing nodes 📦 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Have a nice day! 👋
次に immutable
フィールドを含めた ConfigMap マニフェストを作成する.
apiVersion: v1 kind: ConfigMap metadata: name: immutable-configmap data: name: kakakakakku immutable: true
マニフェストを適用する.
$ kubectl apply -f immutable-configmap.yaml
configmap/immutable-configmap created
今度はマニフェストを修正して kakakakakku
を KAKAKAKAKKU
にする.
apiVersion: v1 kind: ConfigMap metadata: name: immutable-configmap data: name: KAKAKAKAKKU immutable: true
もう1度マニフェストを適用しようとすると,immutable
フィールドによってエラーになった.Kubernetes v1.18 で ImmutableEphemeralVolumes
の Feature Gates が適切に有効化されていることが確認できた.
$ kubectl apply -f immutable-configmap.yaml The ConfigMap "immutable-configmap" is invalid: data: Forbidden: field is immutable when `immutable` is set
まとめ 🐳
「Kubernetes 完全ガイド 第2版」に載っていた kind を使って,Kubernetes クラスターを構築してみた.簡単に「マルチノード構成」を実現できるし,設定ファイルに Kubernetes クラスター構成を記述できるのも便利だった.今後は kind を使っていく!
Kubernetes完全ガイド 第2版 impress top gearシリーズ
- 作者:青山真也
- 発売日: 2020/08/17
- メディア: Kindle版