當前位置:編程學習大全網 - 源碼下載 - Kind介紹

Kind介紹

Kind 是壹種使用 Docker 容器作為 node 節點,運行本地 Kubernetes 集群的工具,在 K8s 中有著非常廣泛的應用。

什麽是 Kind

Kind(Kubernetes IN Docker)[1]是 壹個用來快速創建和測試 kubernetes 的工具 ,它把環境的依賴降低到最小,僅需要機器安裝了 Docker 即可使用。

Kind 可以做什麽?

Kind 有哪些優勢?

使用 Kind

Kind 的原理

Kind 使用壹個 container 來模擬壹個 node,在 container 裏面跑 systemd ,並用 systemd 托管 kubelet 以及 containerd,然後通過容器內部的 kubelet 把其他 K8s 組件,比如 kube-apiserver、etcd、CNI 等跑起來。

它可以通過配置文件的方式創建多個 container 來模擬創建多個 node,並以這些 node 構建壹個多節點的 Kubernetes 集群。

Kind 內部使用的集群部署工具是 kubeadm,借助 kubeadm 提供的 Alpha 特性,它可以部署包括 HA master 的高可用集群。同時,在 HA master 下, 它還額外部署了壹個 Nginx,用來提供負載均衡 vip。

構建鏡像

Kind 的鏡像分為兩個,壹個 node 鏡像,壹個 base 鏡像。

node 鏡像

node 鏡像的構建比較復雜, 需要通過運行 base 鏡像,並在 base 鏡像內執行操作,再保存此容器內容為鏡像的方式來完成構建 。它包含的操作有:

具體的邏輯,可以參考 node.go[2]。

base 鏡像

base 鏡像目前 使用了 Ubuntu:19.04 作為基礎鏡像 ,做了以下調整:

具體的邏輯,可以參考構建的 Dockerfile[3]。

創建集群

Kind 創建集群的基本過程為:

關於每個容器是如何作為 node 跑起來的,這裏簡單講解下原理: 根據不同的角色,調用不同的函數創建節點 nodes.go [5]。

節點(容器)創建時,通過配置 --privileged、掛載 tmpfs、修改主機名等,來運行節點 create[6]。

更多

Kind 是壹個比較簡單有趣的項目,它的 scope [7]定得比較明確具體,也比較小。開發者可以借助 Kind 或 Kind 的思想做更多事情,比如:

此外,文中提及到的 Kind 借助 kubeadm 新特性實現 HA master 高可用集群 借助 join 的方式擴容 master 節點達到 HA master ,其內部實現方式也有優缺點,感興趣的讀者可以參考 kubeadm 源碼[8]。

參考文獻

1. /kubernetes-sigs/kind

2. /kubernetes-sigs/kind/blob/master/pkg/build/node/node.go

3. /kubernetes-sigs/kind/blob/master/images/base/Dockerfile

4. /kubernetes-sigs/kind/blob/master/pkg/cluster/internal/create/create.go#L55

5. /kubernetes-sigs/kind/blob/master/pkg/cluster/internal/create/nodes.go#L196

6. /kubernetes-sigs/kind/blob/master/pkg/cluster/nodes/create.go#L124

7. /kubernetes/kubernetes/tree/master/cmd/kubeadm

  • 上一篇:linux中rpm命令的作用
  • 下一篇: 沸石(Zeolite)
  • copyright 2024編程學習大全網