什么是 Kind
Kind(Kubernetes in Docker) 是一個 Kubernetes 孵化項目,Kind 是一套開箱即用的 Kubernetes 環境搭建方案。顧名思義,就是將 Kubernetes 所需要的所有組件,全部部署在一個 Docker 容器中,可以很方便的搭建 Kubernetes 集群。
Kind 已經廣泛的應用於 Kubernetes 上游及相關項目的 CI 環境中,官方文檔中也把 Kind 作為一種本地集群搭建的工具推薦給大家。
項目地址:https://github.com/kubernetes-sigs/kind
Kind 可以做什么?
- 快速創建一個或多個 Kubernetes 集群
- 支持部署高可用的 Kubernetes 集群
- 支持從源碼構建並部署一個 Kubernetes 集群
- 可以快速低成本體驗一個最新的 Kubernetes 集群,並支持 Kubernetes 的絕大部分功能
- 支持本地離線運行一個多節點集群
Kind 有哪些優勢?
- 最小的安裝依賴,僅需要安裝 Docker 即可
- 使用方法簡單,只需 Kind Cli 工具即可快速創建集群
- 使用容器來模似 Kubernetes 節點
- 內部使用 Kubeadm 的官方主流部署工具
- 通過了 CNCF 官方的 K8S Conformance 測試
Kind 是如何工作的?
Kind 使用容器來模擬每一個 Kubernetes 節點,並在容器里面運行 Systemd 。 容器里的 Systemd 托管了 Kubelet 和 Containerd ,然后容器內部的 Kubelet 把其它 Kubernetes 組件: Kube-Apiserver 、 Etcd 、 CNI 等等組件運行起來。
Kind 內部使用了 Kubeadm 這個工具來做集群的部署,包括高可用集群也是借助 Kubeadm 提供的特性來完成的。在高用集群下還會額外部署了一個 Nginx 來提供負載均衡 VIP。
如何安裝?前提是安裝好docker
第一步:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64 chmod +x ./kind mv ./kind /usr/local/bin/kind
使用 Kind
簡單說下幾個比較常用選項的含義:
- build:用來從 Kubernetes 源代碼構建一個新的鏡像。
- create:創建一個 Kubernetes 集群。
- delete:刪除一個 Kubernetes 集群。
- get:可用來查看當前集群、節點信息以及 Kubectl 配置文件的地址。
- load:從宿主機向 Kubernetes 節點內導入鏡像。
使用 Kind 創建 Kubernetes 集群
搭建一個單節點集群
搭建單節點集群是 Kind
最基礎的功能,當然使用起來也很簡單,僅需一條指令即可完成。
kind create cluster --name my-cluster
然后出現....
最后是:
$ kubectl cluster-info Kubernetes master is running at https://localhost:34458 KubeDNS is running at https://localhost:34458/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get nodes NAME STATUS ROLES AGE VERSION my-cluster-control-plane Ready master 2m v1.15.3 $ kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-6g66f 1/1 Running 0 21m coredns-86c58d9df4-pqcc4 1/1 Running 0 21m etcd-my-cluster-control-plane 1/1 Running 0 20m kube-apiserver-my-cluster-control-plane 1/1 Running 0 20m kube-controller-manager-my-cluster-control-plane 1/1 Running 0 20m kube-proxy-cjgnt 1/1 Running 0 21m kube-scheduler-my-cluster-control-plane 1/1 Running 0 21m weave-net-ls2v8 2/2 Running 1 21m
從上面的輸出結果,可以看到單節點的 Kubernetes 已經搭建成功。單節點集群默認方式啟動的節點類型是 control-plane,該節點包含了所有的組件。這些組件分別是:2*Coredns、Etcd、Api-Server、Controller-Manager、Kube-Proxy、Sheduler 和網絡插件 Weave,目前默認使用的網絡插件也是 Weave。
創建高可用 Kubernetes 集群
Kind
也支持搭建高可用的 Kubernetes
集群,創建方式和多節點集群類似,也是通過配置文件來實現。
-
創建高可用 Kubernetes 集群配置文件
$ vim my-cluster-ha.yaml # 一共六個節點,三個 control-plane 節點,三個 workers 節點 kind: Cluster apiVersion: kind.sigs.k8s.io/v1alpha3 kubeadmConfigPatches: - | apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodeRegistration: kubeletExtraArgs: pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1 - | apiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodes: - role: control-plane - role: control-plane - role: control-plane - role: worker - role: worker - role: worker
可能會報錯,解決辦法。
The connection to the server localhost:8080 was refused - did you specify the right host or port?解決
解決方式 步驟一:設置環境變量 具體根據情況,此處記錄linux設置該環境變量 方式一:編輯文件設置 vim /etc/profile 在底部增加新的環境變量 export KUBECONFIG=/etc/kubernetes/admin.conf 方式二:直接追加文件內容 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile 步驟二:使生效 source /etc/profile
apiVersion: kind.sigs.k8s.io/v1alpha3 這個也會報錯,解決辦法。
修改一下:apiVersion: kind.x-k8s.io/v1alpha4
最后執行:
kind create cluster --config my-cluster-ha.yaml --name my-cluster-ha
同樣,我們根據上面命令執行完后,輸出的提示信息進行操作來驗證一下集群是否部署成功。
kubectl get nodes
ectl get nodes NAME STATUS ROLES AGE VERSION my-cluster-ha-control-plane Ready master 3m42s v1.15.3 my-cluster-ha-control-plane2 Ready master 3m24s v1.15.3 my-cluster-ha-control-plane3 Ready master 2m13s v1.15.3 my-cluster-ha-worker Ready <none> 96s v1.15.3 my-cluster-ha-worker2 Ready <none> 98s v1.15.3 my-cluster-ha-worker3 Ready <none> 95s v1.15.3