Summary of problems encountered in manually deploying Kubernetes
這篇文章是承接上一篇硬要手動部署,一路踩過來的坑
內容不一定包含了所有錯誤,但應該有許多新手接觸時的常見錯誤
【安裝篇】
安裝來源失效
需要檢查你獲取安裝套件的位置是否有效,換一種安裝方式
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get update
sudo apt-get install -y kubectl kubelet kubeadm
【部署篇】
The connection to the server localhost:8080 was refused — did you specify the right host or port?
剛安裝好的K8S無法正確執行是因為沒有設置環境變量
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
service
集群內相互溝通的IP由K8S創建時自動生成
若要額外配置上外部靜態實體IP時,遇到 pending 的狀態
需要檢查YAML配置是否有誤,外網是否能訪問、防火牆規則是否有通過
# 查詢service
kubectl get service
# 編輯配置檔
sudo vim <輸入你的service配置檔位置>
# 編輯之後套用
kubectl apply -f service.yaml
node
NotReady:節點不可用
需要檢查CNI網路套件是否未安裝、未啟用、配置有誤
# 查看node狀態
kubectl get node
# 查看硬碟
df -m
# 查看CPU
top -c
# 查看CNI網路配置
cat <輸入你的CNI配置檔位置>
# 編輯之後套用
kubectl apply -f <輸入你的CNI配置檔位置>
ROLES顯示<none>:尚未指定節點屬性
kubectl label nodes <你的節點規則,通常指派為worker>
pod
CrashLoopBackOff:記憶體不足、部署的程式碼有誤、部署的YAML配置有誤
需通過查看日誌來排除特定之問題
kubectl get pods
kubectl logs <輸入你的pod名稱>
ImagePullBackOff:鏡像檔拉取失敗
需要通過手動拉取來測試是否正常、或者在配置內打錯字
docker pull <輸入你的倉庫帳號/你的鏡像名稱>
Pending / Waiting / ContainerCreating:硬體資源不足、容器無法啟動、鏡像無法拉取、部署的YAML或網路的YAML配置有誤
需要通過查看日誌來排除特定之問題
kubectl describe pod <輸入你的pod名稱>
journalctl -u kubelet
Error:綜合上述的錯誤、權限不足
需要查看權限角色或資源請求設置是否達到上限
# 查看帳號
kubectl get serviceaccount
# 查看部署的YAML內的 {LimitRange}
cat <輸入你配置的YAML檔位置>
Terminating:運行pod遭到中止
需要查看node節點是否變成不可用
【網路篇】
# 查看所有pods,檢查網路套件是否在執行
kubectl get pods --all-namespaces
若沒有安裝CNI套件
集群內的node節點會處於NotReady狀態
也無法相互通訊
常見的CNI套件有三種:
# flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# weave
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
# calico
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
kubectl apply -f calico.yaml
以上都是直接通過網上來源抓取並套用的指令
若需要自訂內網網段之類的內容
建議上去複製下來自己新建一個配置YAML檔
# 將網上資源的YAML配置完整複製下來
# 自己新增一個YAML配置檔
sudo vim kube-flannel.yaml
# 貼上之後再修改內容
# 例如:內網網段在 net-conf.json 底下的 Network 裡面
以上,如果有再碰到再繼續補充。