使用Kind快速構建k8s


什么是 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 集群,創建方式和多節點集群類似,也是通過配置文件來實現。

  1. 創建高可用 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM