基於kubeadm快速部署kubernetes K8S V1.17.4集群,並部署Dashboard Web頁面,實現可視化查看Kubernetes資源 ...
基於kubeadm快速部署kubernetes K8S V1.17.4集群,並部署Dashboard Web頁面,實現可視化查看Kubernetes資源
主機配置規劃
伺服器名稱(hostname) | 系統版本 | 配置 | 內網IP | 外網IP(模擬) |
---|---|---|---|---|
k8s-master | CentOS7.7 | 2C/4G/20G | 172.16.1.110 | 10.0.0.110 |
k8s-node01 | CentOS7.7 | 2C/4G/20G | 172.16.1.111 | 10.0.0.111 |
k8s-node02 | CentOS7.7 | 2C/4G/20G | 172.16.1.112 | 10.0.0.112 |
註意:沒有swap分區
預定完成目標項
1、在所有節點上安裝Docker和kubeadm
2、部署Kubernetes Master
3、部署容器網路插件
4、部署 Kubernetes Worker,並將節點加入Kubernetes集群中
5、部署Dashboard Web頁面,可視化查看Kubernetes資源
關於二進位安裝kubeadm 是 Kubernetes 官方支持的安裝方式,“二進位” 不是。本文檔採用 kubernetes.io 官方推薦的 kubeadm 工具安裝 kubernetes 集群。
架構圖
安裝docker、安裝kubeadm,kubelet和kubectl
註意:所有機器都要安裝
腳本如下:
1 [root@k8s-master k8s_install]# pwd 2 /root/k8s_install 3 # 腳本信息如下【支持多次執行】 4 [root@k8s-master k8s_install]# cat install_kubelet.sh 5 #!/bin/sh 6 7 ##### 在 master 節點和 worker 節點都要執行 【所有機器執行】 8 9 # 載入環境變數 10 . /etc/profile 11 . /etc/bashrc 12 13 ############################################### 14 # 添加主機名與IP對應關係(每台主機必須設置主機名) 15 # 如下命令:沒有則添加信息 若使用請根據自身主機情況修改 ★★★★★ 「你需要修改處」 16 grep '172.16.1.110.*k8s-master' /etc/hosts || echo "172.16.1.110 k8s-master" >> /etc/hosts 17 grep '172.16.1.111.*k8s-node01' /etc/hosts || echo "172.16.1.111 k8s-node01" >> /etc/hosts 18 grep '172.16.1.112.*k8s-node02' /etc/hosts || echo "172.16.1.112 k8s-node02" >> /etc/hosts 19 20 21 ############################################### 22 # 必要的基礎配置或包安裝 23 ## 必須安裝 nfs-utils 才能掛載 nfs 網路存儲 24 yum install -y nfs-utils 25 ## wget 用於下載文件 26 yum install -y wget 27 ## 其他必要包 28 yum install -y conntrack ipvsadm ipset 29 30 31 # 關閉 防火牆 32 systemctl stop firewalld 33 systemctl disable firewalld 34 systemctl stop iptables 35 systemctl disable iptables 36 37 # 關閉 SeLinux 38 setenforce 0 39 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 40 41 # 關閉 swap , 本次涉及的機器沒有swap,因此註釋了 42 ## 如果有swap分區則放開註釋 43 #swapoff -a 44 #yes | cp /etc/fstab /etc/fstab_bak 45 #cat /etc/fstab_bak | grep -v swap > /etc/fstab 46 47 # 時間設置 48 ## 時區設置:東八區,上海 49 ls -l /etc/localtime | grep 'Asia/Shanghai' || (rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime) 50 ## 時間同步定時任務:沒有則添加定,進行時間同步 51 crontab -l | grep 'ntpdate' || echo -e "# time sync\n*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >> /var/spool/cron/root 52 ## 查看硬體時間 hwclock --show 53 ## 系統時間同步到硬體時間 54 hwclock --systohc 55 56 # 關閉郵件服務 57 systemctl stop postfix.service && systemctl disable postfix.service 58 59 60 61 ############################################### 62 # 修改 /etc/sysctl.conf 63 # 開啟 ip_forward 轉發並解決流量路由不正確問題 64 # 如果有配置,則修改 65 sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward = 1#g" /etc/sysctl.conf 66 sed -i "s#^net.ipv4.tcp_tw_recycle.*#net.ipv4.tcp_tw_recycle = 0#g" /etc/sysctl.conf 67 sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables = 1#g" /etc/sysctl.conf 68 sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables = 1#g" /etc/sysctl.conf 69 # IPv6 轉發 70 sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding = 1#g" /etc/sysctl.conf 71 sed -i "s#^net.netfilter.nf_conntrack_max.*#net.netfilter.nf_conntrack_max = 2310720#g" /etc/sysctl.conf 72 ## 如下兩條非必要 73 sed -i "s#^fs.file-max.*#fs.file-max = 52706963#g" /etc/sysctl.conf 74 sed -i "s#^fs.nr_open.*#fs.nr_open = 52706963#g" /etc/sysctl.conf 75 76 # 如果沒有,追加 77 grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 78 grep 'net.ipv4.tcp_tw_recycle = 0' /etc/sysctl.conf || echo "net.ipv4.tcp_tw_recycle = 0" >> /etc/sysctl.conf 79 grep 'net.bridge.bridge-nf-call-ip6tables = 1' /etc/sysctl.conf || echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf 80 grep 'net.bridge.bridge-nf-call-iptables = 1' /etc/sysctl.conf || echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf 81 grep 'net.ipv6.conf.all.forwarding = 1' /etc/sysctl.conf || echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf 82 grep 'net.netfilter.nf_conntrack_max = 2310720' /etc/sysctl.conf || echo "net.netfilter.nf_conntrack_max = 2310720" >> /etc/sysctl.conf 83 grep 'fs.file-max = 52706963' /etc/sysctl.conf || echo "fs.file-max = 52706963" >> /etc/sysctl.conf 84 grep 'fs.nr_open = 52706963' /etc/sysctl.conf || echo "fs.nr_open = 52706963" >> /etc/sysctl.conf 85 86 # 執行命令以生效 87 sysctl -p 88 #### 說明:上面的命令中/etc/sysctl.conf可以用/etc/sysctl.d/k8s.conf替換;生效使用sysctl -p /etc/sysctl.d/k8s.conf 命令 89 90 91 ############################################### 92 # kube-proxy 開啟ipvs的前置條件【本步驟可忽略,但推薦使用IPVS】 93 modprobe br_netfilter 94 95 cat > /etc/sysconfig/modules/ipvs.modules << EOF 96 #!/bin/bash 97 modprobe -- ip_vs 98 modprobe -- ip_vs_rr 99 modprobe -- ip_vs_wrr 100 modprobe -- ip_vs_sh 101 modprobe -- nf_conntrack_ipv4 102 EOF 103 104 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4 105 106 107 108 ############################################### 109 # 安裝 docker 110 ## 參考文檔如下 111 # https://www.cnblogs.com/zhanglianghhh/p/9891293.html 112 # https://docs.docker.com/install/linux/docker-ce/centos/ 113 # https://docs.docker.com/install/linux/linux-postinstall/ 114 115 ## 卸載舊版本 根據需要放開註釋 116 #yum remove -y docker \ 117 #docker-client \ 118 #docker-client-latest \ 119 #docker-common \ 120 #docker-latest \ 121 #docker-latest-logrotate \ 122 #docker-logrotate \ 123 #docker-selinux \ 124 #docker-engine-selinux \ 125 #docker-engine 126 127 ## 設置 docker yum repository 128 yum install -y yum-utils device-mapper-persistent-data lvm2 129 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 130 131 ## 安裝docker 132 # yum install -y docker-ce 133 yum install -y docker-ce-19.03.8 134 135 ## 啟動docker服務,這樣可以創建/etc/docker目錄 136 systemctl start docker 137 138 ## 配置daemon 139 ## 1、修改docker Cgroup Driver為systemd;2、日誌格式設定 140 ## 如果不修改,在添加 worker 節點時可能會碰到如下錯誤 141 ## [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". 142 ## Please follow the guide at https://kubernetes.io/docs/setup/cri/ 143 cat > /etc/docker/daemon.json << EOF 144 { 145 "exec-opts": ["native.cgroupdriver=systemd"], 146 "log-driver": "json-file", 147 "log-opts": { 148 "max-size": "100m" 149 } 150 } 151 EOF 152 153 ## 開機自啟動 154 systemctl stop docker && systemctl daemon-reload && systemctl enable docker && systemctl start docker 155 156 157 158 ############################################### 159 # 配置K8S的yum源 160 cat > /etc/yum.repos.d/kubernetes.repo <<EOF 161 [kubernetes] 162 name=Kubernetes 163 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 164 enabled=1 165 gpgcheck=0 166 repo_gpgcheck=1 167 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 168 https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 169 EOF 170 171 172 # 卸載舊版本 根據需要放開註釋 173 #yum remove -y kubelet kubeadm kubectl 174 175 # 由於版本更新頻繁,這裡指定版本號部署 176 ## 安裝kubelet、kubeadm、kubectl 177 ## 將 ${1} 替換為 kubernetes 版本號,例如 1.17.4 178 ## yum install -y kubelet-${1} kubeadm-${1} kubectl-${1} 179 yum install -y kubelet-1.17.4 kubeadm-1.17.4 kubectl-1.17.4 180 181 182 # 重啟 docker,並啟動 kubelet 183 systemctl daemon-reload 184 systemctl restart docker 185 systemctl enable kubelet && systemctl start kubelet 186 187 188 # 列印分割線 189 echo "=====================" 190 191 # 列印docker版本信息 192 docker version
執行上述腳本
kubelet 服務錯誤說明
用kubeadm的方法安裝kubelet後,運行systemctl status kubelet 和 journalctl -f -u kubelet 發現kubelet服務啟動失敗,錯誤代碼255。
後來查了資料,運行journalctl -xefu kubelet 命令查看systemd日誌才發現,真正的錯誤是:
failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
原因:
關鍵文件缺失,多發生於沒有做 kubeadm init就運行了systemctl start kubelet。
暫時可以有不管,後面 kubeadm init 後會恢復正常。
部署Kubernetes Master與安裝Pod網路插件(CNI)
註意:僅在master節點操作kubeadm init 配置詳解的官網地址如下:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
這裡使用 flannel 網路
master節點所需鏡像
kubernetes 服務啟動依賴很多鏡像,這些鏡像要是在國內沒有(fan qiang)的話,是下載不下來的。這裡我們可以去阿裡雲容器鏡像服務【別人放好的鏡像】搜尋並下載指定版本的鏡像替代。
下載完成後,通過 docker tag … 命令修改成指定名稱的鏡像即可。
需要哪些鏡像及版本
需要哪些鏡像及版本,查看方式如下:
1 [root@k8s-master ~]# kubeadm config images list --kubernetes-version v1.17.4 2 W0728 16:31:09.770937 8119 validation.go:28] Cannot validate kube-proxy config - no validator is available 3 W0728 16:31:09.770998 8119 validation.go:28] Cannot validate kubelet config - no validator is available 4 k8s.gcr.io/kube-apiserver:v1.17.4 5 k8s.gcr.io/kube-controller-manager:v1.17.4 6 k8s.gcr.io/kube-scheduler:v1.17.4 7 k8s.gcr.io/kube-proxy:v1.17.4 8 k8s.gcr.io/pause:3.1 9 k8s.gcr.io/etcd:3.4.3-0 10 k8s.gcr.io/coredns:1.6.5
獲取初始化預設配置文件並修改
1 [root@k8s-master k8s_install]# pwd 2 /root/k8s_install 3 [root@k8s-master k8s_install]# kubeadm config print init-defaults > kubeadm-config.yaml 4 # 做了適當修改 5 [root@k8s-master k8s_install]# cat kubeadm-config.yaml 6 apiVersion: kubeadm.k8s.io/v1beta2 7 bootstrapTokens: 8 - groups: 9 - system:bootstrappers:kubeadm:default-node-token 10 token: abcdef.0123456789abcdef 11 ttl: 24h0m0s 12 usages: 13 - signing 14 - authentication 15 kind: InitConfiguration 16 localAPIEndpoint: 17 # 改為本機內網IP 18 advertiseAddress: 172.16.1.110 19 bindPort: 6443 20 nodeRegistration: 21 criSocket: /var/run/dockershim.sock 22 name: k8s-master 23 taints: 24 - effect: NoSchedule 25 key: node-role.kubernetes.io/master 26 --- 27 apiServer: 28 timeoutForControlPlane: 4m0s 29 apiVersion: kubeadm.k8s.io/v1beta2 30 certificatesDir: /etc/kubernetes/pki 31 clusterName: kubernetes 32 controllerManager: {} 33 dns: 34 type: CoreDNS 35 etcd: 36 local: 37 dataDir: /var/lib/etcd 38 imageRepository: k8s.gcr.io 39 kind: ClusterConfiguration 40 # 本次部署的版本為 v1.17.4 41 kubernetesVersion: v1.17.4 42 networking: 43 dnsDomain: cluster.local 44 # 添加如下行,指定pod網路的IP地址範圍,因為flannel 就是這個網段 45 podSubnet: 10.244.0.0/16 46 # 預設值即可,無需改變。服務VIP使用可選的IP地址範圍。預設10.96.0.0/12 47 serviceSubnet: 10.96.0.0/12 48 scheduler: {} 49 --- 50 # 添加如下配置段,調度方式從預設改為ipvs方式【如果上面初始化沒有做ipvs,那麼這段就不需要】 51 apiVersion: kubeproxy.config.k8s.io/v1alpha1 52 kind: KubeProxyConfiguration 53 featureGates: 54 SupportIPVSProxyMode: true 55 mode: ipvs
kubeadm init與flannel網路安裝
創建 init_master.sh文件並編寫腳本進行批量下載鏡像;之後修改鏡像tag,與google的k8s鏡像名稱一致;再之後初始化並安裝Pod網路插件。
腳本如下:
1 [root@k8s-master k8s_install]# pwd 2 /root/k8s_install 3 [root@k8s-master k8s_install]# cat init_master.sh 4 #!/bin/bash 5 6 ##### 在 k8s master 節點執行 7 8 # 載入環境變數 9 . /etc/profile 10 . /etc/bashrc 11 12 13 ############################################### 14 # 從國內下載 master 節點所需鏡像,並對鏡像重命名 15 # src_registry="registry.aliyuncs.com/google_containers" 16 src_registry="registry.cn-beijing.aliyuncs.com/google_registry" 17 18 # 定義鏡像集合數組 19 # 具體版本信息根據 kubeadm config images list --kubernetes-version v1.17.4 得到的 20 images=( 21 kube-apiserver:v1.17.4 22 kube-controller-manager:v1.17.4 23 kube-scheduler:v1.17.4 24 kube-proxy:v1.17.4 25 pause:3.1 26 etcd:3.4.3-0 27 coredns:1.6.5 28 ) 29 # 迴圈從國內獲取的Docker鏡像 30 for img in ${images[@]}; 31 do 32 # 從國內源下載鏡像 33 docker pull ${src_registry}/$img 34 # 改變鏡像名稱 35 docker tag ${src_registry}/$img k8s.gcr.io/$img 36 # 刪除源始鏡像 37 docker rmi ${src_registry}/$img 38 # 列印分割線 39 echo "======== $img download OK ========" 40 done 41 echo "********** k8s master docker images pull OK! **********" 42 43 44 ############################################### 45 # kubeadm 初始化 46 ##### 初始化方式1 47 # 這個初始化過程需要幾分鐘,具體時間取決於你的網路。 48 # --apiserver-advertise-address=x.x.x.x 本機內網地址 ★★★★★ 「你需要修改處」 49 # --service-cidr=x.x.x.x 為服務VIP使用可選的IP地址範圍。預設10.96.0.0/12 50 # --pod-network-cidr=x.x.x.x 指定pod網路的IP地址範圍。 51 #kubeadm init \ 52 # --apiserver-advertise-address=172.16.1.110 \ 53 # --kubernetes-version v1.17.4 \ 54 # --service-cidr=10.96.0.0/12 \ 55 # --pod-network-cidr=10.244.0.0/16 56 57 ##### 初始化方式2 【推薦方式】 58 # --upload-certs 自動頒發證書,高可用有意義,單機可選 59 # kubeadm-config.yaml文件,通過上文已得到該文件 60 kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log 61 echo "********** kubeadm init OK! **********" 62 63 64 # 配置 kubectl 65 mkdir -p $HOME/.kube/ 66 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 67 chown $(id -u):$(id -g) $HOME/.kube/config 68 echo "********** kubectl config OK! **********" 69 70 71 ############################################### 72 # Kubernetes CNI扁平化網路:Flannel、Calico、Canal和Weave 73 # https://blog.csdn.net/RancherLabs/article/details/88885539 74 # 安裝 kube-flannel 網路 75 # 若能夠訪問到quay.io這個registery,可以註釋掉下麵3行docker命令。 在 kube-flannel.yml 文件中可得到 flannel 版本信息 76 # 如果不能訪問 quay.io這個registery,那麼請使用下麵3行 77 docker pull ${src_registry}/flannel:v0.12.0-amd64 78 docker tag ${src_registry}/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64 79 docker rmi ${src_registry}/flannel:v0.12.0-amd64 80 # 如果下載失敗,那麼可通過 https://github.com/coreos/flannel/blob/v0.12.0/Documentation/kube-flannel.yml 頁面拷貝到本地 81 wget https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml 82 kubectl apply -f kube-flannel.yml 83 echo "********** kube-flannel network OK! **********" 84 85 86 ############################################### 87 # master節點驗證所有pod狀態 88 echo "********** kubectl get pods --all-namespaces -o wide **********" 89 # kubectl get pods -A -o wide # 與下麵的命令等效 90 kubectl get pods --all-namespaces -o wide 91 92 # master節點查看node狀態 93 echo "********** kubectl get nodes **********" 94 kubectl get nodes 95 96 echo "********** 獲得 join 命令參數 **********" 97 kubeadm token create --print-join-command
執行上述腳本
部分命令說明:
查看所有pods運行信息
kubectl get pods --all-namespaces # 或者kubectl get pods -A
kubectl get pods --all-namespaces -o wide
查看所有node節點信息,其中master也是一個節點
kubectl get nodes
kubectl get nodes -o wide
獲得 join命令參數,複製後在其他node節點執行,執行後加入該master節點,形成一個集群
kubeadm token create --print-join-command
flannel扁平化網路查看
通過ifconfig命令,可見已經存在了扁平化網路。
扁平化網路說明:
Kubernetes 的網路模型假定了所有Pod都在一個可以直接連通的扁平化的網路空間中,這在GCE(Google Compute Engine)裡面是現成的網路模型,Kubernetes 假定這個網路已經存在。而在私有雲里搭建 Kubernetes 集群,就不能假定這個網路已經存在。我們需要自己實現這個網路假設,將不同節點上的 Docker 容器之間的互相訪問先打通,然後運行 Kubernetes。
同一個Pod內的多個容器之間通訊:lo
各Pod之間的通訊:Overlay Network
Pod與Service之間的通訊:各節點的Iptables規則或者ipvs
Flannel 是 CoreOS 團隊針對 Kubernetes 設計的一個網路規劃服務。簡單來說,它的功能是讓集群中的不同節點主機創建的 Docker 容器都具有全集群唯一的虛擬IP地址。而且它還能在這些IP地址之間建立一個覆蓋網路(Overlay Network),通過這個覆蓋網路,將數據包原封不動的傳遞到目標容器內。
flannel網路如下圖:
部署Kubernetes Node並加入Kubernetes集群
備註:僅在worker節點執行獲得 join命令初始化worker節點並加入master
在master執行如下命令獲取join參數。
1 [root@k8s-master ~]# kubeadm token create --print-join-command 2 kubeadm join 172.16.1.110:6443 --token jb8qa8.wbjx2k7t8vuvqf4q --discovery-token-ca-cert-hash sha256:a694fbe124afd00c0024d4be102037d8f84c9e2e1da1c6638b7788ad71f556ef
有效時間,該 token 的有效時間為 2 個小時,2小時內可以使用此 token 初始化任意數量的 worker 節點。
本文根據規劃在k8s-node01、k8s-node02機器上執行。
執行完畢後,在master機器查看節點信息:
1 [root@k8s-master ~]# kubectl get nodes 2 NAME STATUS ROLES AGE VERSION 3 k8s-master Ready master 47m v1.17.4 4 k8s-node01 NotReady <none> 30s v1.17.4 5 k8s-node02 NotReady <none> 25s v1.17.4 6 [root@k8s-master ~]# 7 [root@k8s-master ~]# kubectl get nodes -o wide 8 NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 9 k8s-master Ready master 48m v1.17.4 172.16.1.110 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 docker://19.3.8 10 k8s-node01 NotReady <none> 56s v1.17.4 172.16.1.111 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 docker://19.3.8 11 k8s-node02 NotReady <none> 51s v1.17.4 172.16.1.112 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 docker://19.3.8 12 # 因為此時在k8s-node01、k8s-node02沒有flannel鏡像,因此pod未啟動 13 [root@k8s-master ~]# kubectl get pods -A -o wide 14 NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES 15 kube-system coredns-6955765f44-c9zfh 1/1 Running 0 48m 10.244.0.2 k8s-master <none> <none> 16 kube-system coredns-6955765f44-lrz5q 1/1 Running 0 48m 10.244.0.3 k8s-master <none> <none> 17 kube-system etcd-k8s-master 1/1 Running 0 48m 172.16.1.110 k8s-master <none> <none> 18 kube-system kube-apiserver-k8s-master 1/1 Running 0 48m 172.16.1.110 k8s-master <none> <none> 19 kube-system kube-controller-manager-k8s-master 1/1 Running 0 48m 172.16.1.110 k8s-master <none> <none> 20 kube-system kube-flannel-ds-amd64-dngrk 1/1 Running 0 46m 172.16.1.110 k8s-master <none> <none> 21 kube-system kube-flannel-ds-amd64-h4sn6 0/1 Init:0/1 0 76s 172.16.1.111 k8s-node01 <none> <none> 22 kube-system kube-flannel-ds-amd64-m92wp 0/1 Init:0/1 0 71s 172.16.1.112 k8s-node02 <none> <none> 23 kube-system kube-proxy-28dwj 0/1 ContainerCreating 0 76s 172.16.1.111 k8s-node01 <none> <none> 24