Closed3

[DevOps] ローカル環境で気軽にK8s (Kubernetest)を試すTips [Minikube, Kind]

harrythecodeharrythecode

初めに

K8sのローカル環境、Minikube一択かと思ってたけどKind ( Kubernetest IN Docker)なるものが現れてた。

要はDockerにクラスターごと立ち上げようぜ、ってものらしい。

今までのMinikubeよりも軽量そうなので試す。

https://qiita.com/tomoyafujita/items/5a3c06705f62c5732bc5

ちなみにK8s公式ドキュメントにもKindの記載があるのでこれから標準になっていく気がします。

https://kubernetes.io/ja/docs/setup/learning-environment/kind/

現時点で思うこと

  • Minikube Docker版もあるのでそれとの比較をすべき
  • ユーザ体験的には訳のわからないオプションがたくさんつかない Kind の方が分かりやすい
  • 使い込まないとやっぱり比較できないけど、Minikube派だった人がKindに移行してるのを見ると今後はKind派が増えそう

P.S.
Docker DesktopでもSingle DockerでK8sを立ち上げることができます。なのでKindとほぼほぼ同じものになってしまいます。

唯一のKindのメリットとしては、OpenSourceなPodmanで起動できる点にあるでしょうか。Dockerはある程度の規模になると有料化してしまうので、そこから離れる、という意味ではKind + Podmanはアリかも。

以下のサイトのコメント欄が非常に有用な情報が載ってます。

https://shipit.dev/posts/minikube-vs-kind-vs-k3s.html

harrythecodeharrythecode

色々試す

今回試す環境は「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
harrythecodeharrythecode

さらに遊ぶ

  • 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にクローズされました