1. 程式人生 > >ARM架構安裝Kubernetes叢集

ARM架構安裝Kubernetes叢集

# 背景 型別 | 版本 ---|--- 作業系統 | CentOS Linux release 7.6.1810 (AltArch) 核心 | Linux master 4.18.0-80.7.2.el7.aarch64 硬體配置 | 8核16G記憶體 * 2臺 計算機名 | master、node1 K8S版本 | 1.14.2 計算機名 | 公網IP | 私網IP ---|---|--- master | 116.63.180.97 | 192.168.0.113 node1 | 116.63.177.54 | 192.168.0.226 > 說明: > 1. 搭建K8s叢集,每臺節點均需要按照文件安裝Docker及K8s的全部元件。 > 2. 為驗證叢集搭建功能,至少需要兩個節點。如果要驗證親和性排程功能,至少需要三臺節點,安裝配置工作在每臺節點都需要執行。 > 3. Master為叢集管理節點,node1為叢集計算節點。 # 一、配置華為雲yum源 ## 1.1 配置華為雲yum源。 ``` cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-aarch64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=http://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg EOF ``` > 說明: > 若沒有找到需要的k8s版本,可自行配置阿里yum源 ## 1.2 重新整理yum快取。 ``` yum makecache ``` # 二、安裝配置K8S 主節點和計算節點都需要安裝配置K8s。 ## 2.1 安裝Docker ### 2.1.1 安裝yum-utils軟體包並設定穩定的儲存庫。 ``` yum install -y yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo ``` ### 2.1.2 安裝特定版本Docker 要安裝特定版本的Docker Engine,可以先通過命名檢視儲存庫,列出可用版本,然後選擇並安裝: ``` yum list docker-ce --showduplicates | sort -r yum list docker-ce-cli --showduplicates | sort -r ``` 然後根據版本號安裝(本文選擇),例如: ``` yum install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io ``` 也可以安裝最新版,例如直接使用方式,本文選擇的不是最新版本,安裝的是指定版本18.09 ``` yum install docker-ce docker-ce-cli containerd.io ``` ### 2.1.3 安裝完成啟動 ``` systemctl start docker ``` ### 2.1.4 通過docker version檢視版本 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170019225-1403956042.png) ### 2.1.5 設定docker開機啟動 ``` systemctl enable docker ``` ## 2.2 安裝基礎元件 ### 2.2.1 啟用NET.BRIDGE.BRIDGE-NF-CALL-IPTABLES核心選項。 ``` sysctl -w net.bridge.bridge-nf-call-iptables=1 ``` ### 2.2.2 禁用交換分割槽。 ``` swapoff -a cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S') sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab ``` ### 2.2.3 安裝K8s元件。 ``` yum install -y kubelet kubeadm kubectl kubernetes-cni ``` ### 2.2.4 檢視安裝情況。 ``` rpm -qa | grep kubelet rpm -qa | grep kubeadm rpm -qa | grep kubectl rpm -qa | grep kubernetes-cni ``` 例如看到如下內容代表安裝成功 ``` [root@master aarch64]# rpm -qa | grep kubelet kubelet-1.14.2-0.aarch64 [root@master aarch64]# rpm -qa | grep kubeadm kubeadm-1.14.2-0.aarch64 [root@master aarch64]# rpm -qa | grep kubectl kubectl-1.14.2-0.aarch64 [root@master aarch64]# rpm -qa | grep kubernetes-cn kubernetes-cni-0.7.5-0.aarch64 ``` ### 2.2.5 設定iptables。 ``` echo "net.bridge.bridge-nf-call-iptables=1" > /etc/sysctl.d/k8s.conf ``` ### 2.2.6 開機啟動kubelet服務。 ``` systemctl enable kubelet ``` ## 2.3 通過Docker下載其它元件 ### 2.3.1 檢視下載節點初始化所需映象。 ``` kubeadm config images list ``` ``` [root@master aarch64]# kubeadm config images list I1208 09:21:05.327540 2544 version.go:96] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get https://storage.googleapis.com/kubernetes-release/release/stable-1.txt: net/http: request canceled (Client.Timeout exceeded while awaiting headers) I1208 09:21:05.327591 2544 version.go:97] falling back to the local client version: v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1 ``` > K8s所需映象版本有可能會變動,因此檢視列表並以此匹配需要下載的Docker映象,文件中的映象版本僅做參考。 > 切忌直接把非arm架構機器上的映象直接複製過來使用 ### 2.3.2 從DockerHub上下載映象(速度有點慢) 命令如下所示 ``` docker pull docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2 docker pull docker.io/mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2 docker pull docker.io/mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2 docker pull docker.io/mirrorgooglecontainers/kube-proxy-arm64:v1.14.2 docker pull docker.io/mirrorgooglecontainers/pause-arm64:3.1 docker pull docker.io/mirrorgooglecontainers/etcd-arm64:3.3.10 docker pull docker.io/coredns/coredns:1.3.1 ``` 下載完成後可以檢視本地映象 ``` [root@master aarch64]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mirrorgooglecontainers/kube-proxy-arm64 v1.14.2 5227f1c3c8a7 19 months ago 82.7MB mirrorgooglecontainers/kube-apiserver-arm64 v1.14.2 091f78b1b081 19 months ago 207MB mirrorgooglecontainers/kube-controller-manager-arm64 v1.14.2 e0fa3d206e49 19 months ago 155MB mirrorgooglecontainers/kube-scheduler-arm64 v1.14.2 485238b2c4a5 19 months ago 82.2MB coredns/coredns 1.3.1 7e8edeee9a1e 23 months ago 37.4MB mirrorgooglecontainers/etcd-arm64 3.3.10 ad99d3ead043 2 years ago 300MB mirrorgooglecontainers/pause-arm64 3.1 6cf7c80fe444 2 years ago 525kB ``` ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170052089-1107114070.png) ### 2.3.3 修改已下載的映象標籤。 ``` docker tag mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 docker tag mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 docker tag mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 docker tag mirrorgooglecontainers/kube-proxy-arm64:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2 docker tag mirrorgooglecontainers/pause-arm64:3.1 k8s.gcr.io/pause:3.1 docker tag mirrorgooglecontainers/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 ``` > 說明: > 需要將映象repository修改與kubeadm列出的映象名保持一致。 ### 2.3.4 檢視K8s的Docker映象元件 ``` docker images | grep k8s ``` ``` [root@master aarch64]# docker images | grep k8s k8s.gcr.io/kube-apiserver v1.14.2 091f78b1b081 19 months ago 207MB k8s.gcr.io/kube-controller-manager v1.14.2 e0fa3d206e49 19 months ago 155MB k8s.gcr.io/kube-scheduler v1.14.2 485238b2c4a5 19 months ago 82.2MB k8s.gcr.io/kube-proxy v1.14.2 5227f1c3c8a7 19 months ago 82.7MB k8s.gcr.io/coredns 1.3.1 7e8edeee9a1e 23 months ago 37.4MB k8s.gcr.io/etcd 3.3.10 ad99d3ead043 2 years ago 300MB k8s.gcr.io/pause 3.1 6cf7c80fe444 2 years ago 525kB ``` ### 2.3.5 刪除舊映象。 命令如下所示 ``` docker rmi mirrorgooglecontainers/kube-apiserver-arm64:v1.14.2 docker rmi mirrorgooglecontainers/kube-controller-manager-arm64:v1.14.2 docker rmi mirrorgooglecontainers/kube-scheduler-arm64:v1.14.2 docker rmi mirrorgooglecontainers/kube-proxy-arm64:v1.14.2 docker rmi mirrorgooglecontainers/pause-arm64:3.1 docker rmi mirrorgooglecontainers/etcd-arm64:3.3.10 docker rmi coredns/coredns:1.3.1 ``` 刪除後再次檢視本地映象 ``` [root@master aarch64]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE k8s.gcr.io/kube-scheduler v1.14.2 485238b2c4a5 19 months ago 82.2MB k8s.gcr.io/kube-proxy v1.14.2 5227f1c3c8a7 19 months ago 82.7MB k8s.gcr.io/kube-apiserver v1.14.2 091f78b1b081 19 months ago 207MB k8s.gcr.io/kube-controller-manager v1.14.2 e0fa3d206e49 19 months ago 155MB k8s.gcr.io/coredns 1.3.1 7e8edeee9a1e 23 months ago 37.4MB k8s.gcr.io/etcd 3.3.10 ad99d3ead043 2 years ago 300MB k8s.gcr.io/pause 3.1 6cf7c80fe444 2 years ago 525kB ``` # 三、部署K8S叢集 ## 3.1 配置hosts檔案 主節點和計算節點都需要配置hosts檔案。 執行vi /etc/hosts命令,修改hosts檔案,新增叢集所有節點的ip及hostname資訊。 ``` 192.168.0.113 master master 192.168.0.226 node1 node1 ``` 每臺節點的/etc/hosts檔案都要修改。 ## 3.2 配置主節點(master) > 說明:重複搭建叢集時,請先執行kubeadm reset命令,清除舊的K8s叢集設定。 在主節點上執行叢集初始化命令。 ### 3.2.1 在主節點上執行叢集初始化命令 ``` kubeadm init --kubernetes-version=1.14.2 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 ``` 當看到如下資訊時代表初始化成功 ``` Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.113:6443 --token all7y6.hxs2yemaucku9dct \ --discovery-token-ca-cert-hash sha256:7e1b11d2715fd87d8aeec9a1924c87b68d36da35392ccee57b0581993dfeb821 ``` 黃框資訊表示主節點配置叢集需要執行的命令,紅框資訊表示計算節點加入叢集的token命令,請儲存該段命令。 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170112228-676673631.png) > 說明: > 1. 計算節點不需要執行叢集初始化操作。 > 2. 如果在主節點初始化的時候提示: > /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 > 可以通過執行echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables命令將其置為1(vim不可修改此檔案)。 > > 2. 執行該操作時,建議排查是否有配置代理(執行env檢視),避免kubeadm init初始化超時失敗,刪除代理的操作: > export -n http_proxy > export -n https_proxy > export -n no_proxy > --pod-network-cidr > 3.選項用於指定kubernetes網路可以使用的IP地址段,由於後續使用Flannel網路外掛,該外掛固定使用的IP段為:10.244.0.0/16 。 ### 3.2.2 配置叢集 ``` mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf ``` ### 3.2.3 在主節點檢視叢集節點資訊。 ``` kubectl get node ``` ``` [root@master aarch64]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 97s v1.14.2 ``` ### 3.2.4 儲存主節點生成的加入叢集資訊。 該資訊在成功初始化主節點後生成並列印,叢集資訊如下所示: ``` kubeadm join 192.168.0.113:6443 --token all7y6.hxs2yemaucku9dct \ --discovery-token-ca-cert-hash sha256:7e1b11d2715fd87d8aeec9a1924c87b68d36da35392ccee57b0581993dfeb821 ``` > 注意: > 該token命令可以用於二十四小時內計算節點加入叢集,若token超時,可在K8S主節點通過kubeadm token create --print-join-command命令進行重新生成 ## 3.3 配置計算點(node1) ### 3.3.1 計算節點加入叢集 計算節點執行 ``` kubeadm join 192.168.0.113:6443 --token all7y6.hxs2yemaucku9dct \ --discovery-token-ca-cert-hash sha256:7e1b11d2715fd87d8aeec9a1924c87b68d36da35392ccee57b0581993dfeb821 ``` ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170140347-1992867620.png) ### 3.3.2 等待1分鐘後,在主節點(master)執行kubectl get nodes ``` [root@master opt]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 3h7m v1.14.2 node1 NotReady 83s v1.14.2 ``` ### 3.3.3 在主節點和計算節點上檢視kubelet服務狀態 ``` systemctl status kubelet ``` 主節點 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170158832-152098919.png) 子節點 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170203932-173992587.png) ## 3.4 新增Flannel網路外掛 ### 3.4.1 在主節點上執行如下命令安裝Flannel網路外掛。 當前版本1.14版本執行(如果無法下載,可以檢視網盤附件進行本地化安裝,下載地址:https://pan.baidu.com/s/1L1epcWiEI7v2C4bHo2nx3Q 提取碼:1fsh) ``` kubectl apply -f https://gitee.com/mirrors/flannel/blob/master/Documentation/kube-flannel-old.yaml ``` 注意:對於 Kubernetes 版本 v1.17+ ``` kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` ### 3.4.2 安裝完成後,執行kubectl get pod -n kube-system,看到kube-flannel正常執行即可 ``` [root@master opt]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-fb8b8dccf-sgzqj 1/1 Running 0 38m coredns-fb8b8dccf-xpx5x 1/1 Running 0 38m etcd-master 1/1 Running 0 37m kube-apiserver-master 1/1 Running 0 37m kube-controller-manager-master 1/1 Running 0 37m kube-flannel-ds-arm64-wxc6f 1/1 Running 0 98s kube-proxy-tzb4r 1/1 Running 0 38m kube-scheduler-master 1/1 Running 0 37m ``` 這樣我們K8S叢集就搭建完成了。 # 四、(選配)安裝Kubernetes Dashboard外掛 主節點上操作即可 ## 4.1 用openssl生成自簽證書(有第三方證書可跳過) 生成證書請求的key ``` openssl genrsa -out dashboard.key 2048 ``` 生成證書請求 ``` openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=' ``` 換成自己的ip或域名。 生成自簽證書 ``` openssl x509 -days 3650 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt ``` 這裡指定了過期時間3650天,預設365天 ## 4.2 部署Dashboard外掛 ### 4.2.1 建立部署kubernetes-dashboard的yaml檔案 (檔案下載地址:連結:https://pan.baidu.com/s/1L1epcWiEI7v2C4bHo2nx3Q 提取碼:1fsh) > 根據官方檔案做了微調: > 1. 把cert註釋掉,使用待會自己建立的cert,因為預設的證書有問題; > 2. 把dashboard訪問方式改為NodePort,埠是31234,訪問時用pod所在主機的ip加埠號即可訪問; > 3. imagePullPolicy改為IfNotPresent,當本地找不到映象時才從網上拉取; > 注意檢視映象路徑是否有效,如果無效,自行百度查詢映象源,或者到別的地方把映象下載到本地,然後把tag改成和yaml檔案中的image一致 > 4. arm映象源修改kubernetesui/metrics-scraper-arm64:v1.0.6和kubernetesui/dashboard-arm64:v2.0.5 > ### 4.2.2 部署kubernetes-dashboard ``` kubectl apply -f /opt/kubernetes-dashboard.yaml ``` ### 4.2.3 部署完成後還是不能訪問,因為yaml檔案中註釋掉了kubernetes-dashboard-certs,相關的pod沒跑起來,所以此時應建立certs ``` kubectl create secret generic kubernetes-dashboard-certs --from-file=/opt/dashboard.key --from-file=/opt/dashboard.crt -n kubernetes-dashboard ``` ### 4.2.4 如果失敗檢查方式 一般經過以上步驟就可以訪問dashboard,可以跳過這一步了,但如果此時仍不能訪問,pod不是處於"running"狀態,可以刪除kubenetes-dashboard相關的pod,讓kubelet自動生成一個新的可執行的pod 檢視kubernetes-dashboard的pod名 ``` kubectl get pods -n kubernetes-dashboard ``` 刪除該pod: ``` kubectl delete pod -n kubernetes-dashboard ``` 正確結果 ``` [root@master /]# kubectl get pod -n kubernetes-dashboard NAME READY STATUS RESTARTS AGE dashboard-metrics-scraper-57c8667f5c-92fls 1/1 Running 0 5h9m kubernetes-dashboard-69d48fd659-bw7zb 1/1 Running 0 5h9m ``` ## 4.3 建立訪問使用者,用於訪問dashboard的Service Account ``` kubectl create serviceaccount admin-user -n kubernetes-dashboard ``` ## 4.4 為使用者繫結角色,建立ClusterRoleBinding ``` kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user ``` ## 4.5 獲取登入金鑰 ``` kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') ``` 複製生成的token值即可 ``` [root@master opt]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') Name: admin-user-token-64tjt Namespace: kubernetes-dashboard Labels: Annotations: kubernetes.io/service-account.name: admin-user kubernetes.io/service-account.uid: c882f015-39ca-11eb-9396-fa163ec97a54 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 20 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTY0dGp0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjODgyZjAxNS0zOWNhLTExZWItOTM5Ni1mYTE2M2VjOTdhNTQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.nK8gspJ8DAMzrOesHC-CGvjaYKAtahUCB9L1eQTbaeCXv-8ZT-8HVBzzCTk20XnAG30yPwOD80x_MBCksSgaw7QkImNlZVcNM3JXmaNvxFTObeg9aY_Lgdbs7r4hfAMKZd2wi1G3BaNbfAWnWxlecbOXTMYBL5PI6h5oJSuR6Fgm0IEdRT6diI_uaoan-Mqmvm_VKvj6tMl1xTqczTgnp0Hv5kwJvT0lOYx13nhjix-hfo0B2UaSGDnLcyFLrzAIOfKuAlFQMwcJndgs7hz_x7CM-UpfOvCg4oVrWkHAlspOfxRVflHXjfexUGnjGq2Rywph5h4godbTPwhLwJ4tcg ``` ## 4.6 登入驗證 訪問我們master地址,通過瀏覽器訪問https://IP:31234,點選繼續訪問 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170236668-667159898.png) 輸入token值 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170241870-1761430751.png) 即可看到kubernetes-dashboard UI介面 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170246882-1046573995.png) 如果無法訪問,可以通過以下方式檢視pod狀態 ``` [root@master opt]# kubectl get secret -n kubernetes-dashboard NAME TYPE DATA AGE admin-user-token-zqdnf kubernetes.io/service-account-token 3 3h4m default-token-v7v95 kubernetes.io/service-account-token 3 3h9m kubernetes-dashboard-certs Opaque 2 3h8m kubernetes-dashboard-csrf Opaque 1 3h9m kubernetes-dashboard-key-holder Opaque 2 3h9m kubernetes-dashboard-token-47xg5 kubernetes.io/service-account-token 3 3h9m ``` UI檢視節點資訊 ![](https://img2020.cnblogs.com/blog/310247/202012/310247-20201209170253423-465417280.png) # 五、解除安裝K8S元件 注意: 下列步驟僅僅指導使用者如何手動解除安裝K8s元件,請勿在正常的部署過程中執行。 清空K8s叢集設定。 在解除安裝K8s元件前,先執行kubeadm reset命令,清空K8s叢集設定。 解除安裝管理元件。 ``` yum erase -y kubelet kubectl kubeadm kubernetes-cni ``` 刪除基礎元件映象。 基礎元件通過Docker映象部署,因此只需要強制刪除對應映象即可解除安裝。 ``` docker rmi -f k8s.gcr.io/kube-apiserver:v1.15.1 docker rmi -f k8s.gcr.io/kube-controller-manager:v1.15.1 docker rmi -f k8s.gcr.io/kube-scheduler:v1.15.1 docker rmi -f k8s.gcr.io/kube-proxy:v1.15.1 docker rmi -f k8s.gcr.io/pause:3.1 docker rmi -f k8s.gcr.io/etcd:3.3.10 docker rmi -f k8s.gcr.io/coredns:1.3.1 ``` (轉發請註明出處:http://www.cnblogs.com/zhangyongli2011/ 如發現有錯,請留言,