1. 程式人生 > 其它 >K8S叢集環境問題排查

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