Closed3
[DevOps] ローカル環境で気軽にK8s (Kubernetest)を試すTips [Minikube, Kind]
初めに
K8sのローカル環境、Minikube一択かと思ってたけどKind ( Kubernetest IN Docker)なるものが現れてた。
要はDockerにクラスターごと立ち上げようぜ、ってものらしい。
今までのMinikubeよりも軽量そうなので試す。
ちなみにK8s公式ドキュメントにもKindの記載があるのでこれから標準になっていく気がします。
現時点で思うこと
- Minikube Docker版もあるのでそれとの比較をすべき
- ユーザ体験的には訳のわからないオプションがたくさんつかない Kind の方が分かりやすい
- 使い込まないとやっぱり比較できないけど、Minikube派だった人がKindに移行してるのを見ると今後はKind派が増えそう
P.S.
Docker DesktopでもSingle DockerでK8sを立ち上げることができます。なのでKindとほぼほぼ同じものになってしまいます。
唯一のKindのメリットとしては、OpenSourceなPodmanで起動できる点にあるでしょうか。Dockerはある程度の規模になると有料化してしまうので、そこから離れる、という意味ではKind + Podmanはアリかも。
以下のサイトのコメント欄が非常に有用な情報が載ってます。
色々試す
今回試す環境は「macOS Monterey 12.6; M1-Pro, Mem: 16GB」です。
公式ドキュメント ( https://kind.sigs.k8s.io/docs/user/quick-start/ )に従って試していきます。
- Kindをインストール
brew install kind
- K8sクラスタの作成
kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ 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 🙂
- クラスタの中身を確認 (標準だとControl Planeのみが生成される)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ec4f9f50deb kindest/node:v1.27.3 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes 127.0.0.1:50782->6443/tcp kind-control-plane
$ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 5m1s v1.27.3
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5d78c9869d-6s555 1/1 Running 0 4m33s
kube-system coredns-5d78c9869d-p4qj9 1/1 Running 0 4m33s
kube-system etcd-kind-control-plane 1/1 Running 0 4m48s
kube-system kindnet-7d79r 1/1 Running 0 4m33s
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 4m48s
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 4m48s
kube-system kube-proxy-l7gq4 1/1 Running 0 4m33s
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 4m48s
local-path-storage local-path-provisioner-6bc4bddd6b-xsksn 1/1 Running 0 4m33s
Minikubeより軽量な気がする。
- K8sクラスタの削除
kind delete cluster -n kind
さらに遊ぶ
- 1 Control Plane + 3 Worker Nodes の構成。以下のようにファイルを生成。
kind-example-config.yaml
# this config file contains all config fields with comments
# NOTE: this is not a particularly useful config file
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
# patch the generated kubeadm config with some extra settings
kubeadmConfigPatches:
- |
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
nodefs.available: "0%"
# patch it further using a JSON 6902 patch
kubeadmConfigPatchesJSON6902:
- group: kubeadm.k8s.io
version: v1beta3
kind: ClusterConfiguration
patch: |
- op: add
path: /apiServer/certSANs/-
value: my-hostname
# 1 control plane node and 3 workers
nodes:
# the control plane node config
- role: control-plane
# the three workers
- role: worker
- role: worker
- role: worker
- ConfigファイルをもとにK8sクラスタの作成
kind create cluster --config kind-example-config.yaml
- 中身を確認
$ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 3m21s v1.27.3
kind-worker Ready <none> 2m58s v1.27.3
kind-worker2 Ready <none> 2m57s v1.27.3
kind-worker3 Ready <none> 2m58s v1.27.3
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5d78c9869d-2prd8 1/1 Running 0 3m28s
kube-system coredns-5d78c9869d-q4rz4 1/1 Running 0 3m28s
kube-system etcd-kind-control-plane 1/1 Running 0 3m44s
kube-system kindnet-9zlqf 1/1 Running 0 3m23s
kube-system kindnet-hmrzr 1/1 Running 0 3m23s
kube-system kindnet-htcbg 1/1 Running 0 3m28s
kube-system kindnet-wz922 1/1 Running 0 3m22s
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 3m44s
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 3m44s
kube-system kube-proxy-8vpr7 1/1 Running 0 3m23s
kube-system kube-proxy-cpwfz 1/1 Running 0 3m22s
kube-system kube-proxy-kg88x 1/1 Running 0 3m23s
kube-system kube-proxy-plr7b 1/1 Running 0 3m28s
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 3m44s
local-path-storage local-path-provisioner-6bc4bddd6b-8t4sn 1/1 Running 0 3m28s
いや、これかなり優秀じゃない?
- K8sクラスタの削除 ( -n オプションなしだとデフォルトで
kind
の名前のクラスタを削除します)
kind delete cluster
Deleting cluster "kind" ...
Deleted nodes: ["kind-worker2" "kind-worker" "kind-worker3" "kind-control-plane"]
このスクラップは2023/08/23にクローズされました