安装部署K8s集群时会遇到很多问题,以下都是我踩过的坑,还有一些小坑当时没来得及记录,后续如果有遇到的话再进行补充。此处非常感谢江城琉璃梦同学对我的帮助。
1.工作节点执行kubectl get nodes时拒绝连接
执行指令:kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
原因:kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。
解决方法:
- 编辑文件设置:
sudo gedit /etc/profile
- 在底部增加新的环境变量:
export KUBECONFIG=/etc/kubernetes/admin.conf
- 使设置生效:
source /etc/profile
2.安装flannel时拒绝连接
执行指令:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?
原因:外网不可访问
解决方法:
- 增加解析
sudo gedit /etc/hosts ###增加下面的解析 199.232.68.133 raw.githubusercontent.com 199.232.68.133 user-images.githubusercontent.com 199.232.68.133 avatars2.githubusercontent.com 199.232.68.133 avatars1.githubusercontent.com
- 使用更安全的DNS
sudo gedit /etc/resolv.conf ###使用下面的dns或者其他的dns nameserver 119.29.29.29 nameserver 182.254.116.116
3.工作节点NotReady
执行指令:kubectl get nodes
原因:flannel并没有在/etc下创建/etc/cni/net.d/10-flannel.conflist文件
解决方法:从其他有该文件的主机上拷贝文件过来,或者自己创建文件
sudo su
cd /etc/cni/net.d
gedit 10-flannel.conflist
{
"name": "cbr0",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
4.k8s Failed to create pod sandbox
执行指令:kubeadm init --control-plane-endpoint=192.168.16.100 --kubernetes-version=v1.25.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.6": failed to pull image "k8s.gcr.io/pause:3.6": failed to pull and unpack image "k8s.gcr.io/pause:3.6": failed to resolve reference "k8s.gcr.io/pause:3.6": failed to do request: Head "https://k8s.gcr.io/v2/pause/manifests/3.6"
原因:很明显是无法拉取 k8s.gcr.io/pause:3.6 这个镜像,但我们的k8s明明使用的是pause:3.8的版本,很困惑!!!
解决方法:
# 如果你的k8s使用的事docker客户端
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
# 如果使用containerd自带客户端
crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
5.kubeadm init报错
Process: 2226953 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 2226953 (code=exited, status=1/FAILURE)
原因:成因很多,建议首先检查防火墙是否关闭,是否开启6443端口
sudo ufw status
sudo ufw 6443
sudo ufw disable
解决方法:关闭防火墙后重启虚拟机或物理机
然后清空原来初始化的内容:
kubeadm reset --cri-socket unix:///run/cri-dockerd.sock && rm -rf /etc/kubernetes/ /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni /etc/cni/net.d
重新初始化:
kubeadm init --control-plane-endpoint=192.168.8.130 --kubernetes-version=v1.25.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository registry.aliyuncs.com/google_containers