最近在捣鼓k8s v1.20,使用containerd作为container runtime,但是在执行kubeadm config images pull的时候报错。因为在公司环境下,需要配置代理。
mkdir /etc/systemd/system/containerd.service.d
cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/"
> EOF
HTTPS_PROXY或NO_PROXY可以按需添加。最后记得重新加载service
systemctl daemon-reload
systemctl restart containerd
2021-01-28更新
1. 由于docker.io对匿名和普通账号的pull reuqest进行了限制,如果有自建的私有registry,可以将containerd默认的docker.io 指向自建registry
编辑 /etc/containerd/config.toml 文件,修改以下配置
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://<your_registry>"]
2. 由于之前给containerd配置了代理,导致在安装calico的时候,calico-kube-controllers一直卡在ContainerCreating状态。检查pod状态,有以下Events
Warning FailedCreatePodSandBox 9m37s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "8b3342e30aeea4a1e12f3f19c001b8d52a52ce8b3624476dd40576ad302334ea": error getting ClusterInformation: Get "https://[IP]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": unexpected EOF
因此需要在NO_PROXY中添加api server的service ip.
cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
> [Service]
> Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/" "NO_PROXY=<SERVICE_IP>"
> EOF