Kubernetes 升級填坑指南(一)


來自專輯
Kubernetes故障解決

前言

下面 “坑” 都是作者升級 Kubernetes 遇到的問題並給出解決方法,目的就是避免讀者不要在掉進同樣的坑中。

第一個坑

升級 Calico 網絡組件

要求

Calico v3.2.3 升級到 v3.14.0

遇到的問題

Readiness probe failed: caliconode is not ready: BIRD is not ready: BGP not established with 172.18.0.1

問題原因

通過 calicoctl node status 命令排查,能看到 Calico 自動發現網卡出錯。Calico 默認自動會識別第一個網卡,但是后面因為在宿主機使用 docker-compose 創建新的服務並且也會創建一個新的網卡,Calico 重啟后自動識別 docker-compose 創建的網卡。導致集群 node 節點不能相互通信,就會報上面錯誤。

解決方法

臨時解決方法

把 docker-compose 創建的服務直接使用 docker run 來創建,這樣就不會創建一個新的網卡。

最終解決方法

Calico 是通過 Kubernetes yaml 文件部署的,所以直接在 yaml 文件中添加下面配置,在 calico-node DaemonSet env 中添加環境變量,定義網卡發現規則。

            # 定義ipv4自動發現網卡規則
            - name: IP_AUTODETECTION_METHOD
              value: "interface=eth.*"
            # 定義ipv6自動發現網卡規則
            - name: IP6_AUTODETECTION_METHOD
              value: "interface=eth.*"

第二個坑

Calico 組件配置

環境

Kubernetes master 與 node 節點分別在不同雲廠商

遇到的問題

[ERROR][8] startup/startup.go 146: failed to query kubeadm’s config map error=Get https://10.10.0.1:443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=2s: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

問題原因

Node工作節點連接不到 apiserver 地址,檢查一下calico配置文件,要把apiserver的IP和端口配置上,如果不配置的話,calico默認將設置默認的calico網段和443端口。字段名:KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORTKUBERNETES_SERVICE_PORT_HTTPS

解決方法

Calico 是通過 Kubernetes yaml 文件部署的,所以直接在 yaml 文件中添加下面配置,在 calico-node DaemonSet env 中添加環境變量。

- name: KUBERNETES_SERVICE_HOST
  value: "kube-apiserver"  # master apiserver 地址
- name: KUBERNETES_SERVICE_PORT
  value: "6443"
- name: KUBERNETES_SERVICE_PORT_HTTPS
  value: "6443"

第三個坑

Etcd v3.3.9 升級到 v3.4.7

環境

flannel 使用 v0.10.0 版本

遇到的問題

Etcd 需要升級到 v3.4.7 版本,從 v3.3.9 直接升級到 v3.4.7 是沒有問題的。但升級完成后,在查看 flannel 日志時,發現日志不斷報 E0714 14:49:48.309007 2887 main.go:349] Couldn't fetch network config: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint. 錯誤。剛才開始以為是 flannel 版本過低導致,后面把 flannel 升級到最新版本 v0.12.0,但是問題還是一樣。

問題原因

后面仔細通過排查,發現是連接不上 Etcd,當時很疑惑 Etce 連接不上,可 kube-apiserver 連接是正常的,后面才想起來,kube-apiserver 使用 Etcd v3接口,而 flannel 使用 v2接口。懷疑在升級 Etcd 時默認沒有開啟 v2接口。最后查閱官方 Etcd v3.4 發布說明,從 3.4 版本開始,默認已經關閉 v2 接口協議,才導致上面報錯。

解決方法

直接在 Etcd 啟動參數添加 --enable-v2 'true'

預告

明天分享下作者近期 Kubernetes 從 v1.15.3 升級到 v1.18.5 心得。大家可以關注我的公眾號。即時收到明天的 Kubernetes 升級心得哈 ^v^。

熱門文章推薦

 


免責聲明!

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



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