K8S叢集環境問題排查
一、問題A:
CreatePodSandbox for pod "nginx-d6q66_default(188ed56b-c84b-416e-94c2-c9bde7293b68)" failed: rpc error: code = Unknown desc = failed to get sandbox image "xxxxx/pause-amd64:3.1"
檢查發現K8S叢集部署在內網,該環境下K8S無法pull特殊映象pause-amd64:3.1,該映象為K8S基礎設施的一部分。內網環境解決該問題方案如下:
在連線外網的機器上,search該映象:
docker search pause-amd64 --no-trunc
再pull相關tag版本的映象:
docker pull warrior/pause-amd64:3.0
將該映象進行tar打包:
docker save -o pause-amd64.tar warrior/pause-amd64:3.0
將該tar包映象上傳至K8S叢集內各個work節點以及master節點,並依次在各個節點匯入該映象,執行:
ctr -n k8s.io images import pause-amd64.tar crictl images
編輯config.toml,修改sandbox_image為docker.io/warrior/pause-amd64:3.0
vi /etc/containerd/config.toml [plugins] [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "docker.io/warrior/pause-amd64:3.0" [plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/data/k8s/bin" conf_dir = "/etc/cni/net.d" [plugins."io.containerd.runtime.v1.linux"] shim = "containerd-shim" runtime = "runc" runtime_root = "" no_shim = false shim_debug = false
重啟Containerd:
systemctl restart containerd
二、問題B:
failed to pull and unpack image
各個節點本地已下載nginx映象,但執行kubectlapply -fnginx-ds.yml ,報錯:failed to pull and unpack image
檢視nginx-ds.yml檔案,K8S有三種策略拉取映象:
Always 總是拉取映象
IfNotPresent 本地有則使用本地映象,不拉取
Never 只使用本地映象,從不拉取,即使本地沒有
如果省略imagePullPolicy 映象tag為 :latest 策略為always ,否則 策略為 IfNotPresent
因此需要修改yml檔案如下:
containers: - name: test image: nginx:latest imagePullPolicy: IfNotPresent