k8s学习过程中遇到的几个问题,也供大家参考一下~
1、k8s集群更换IP地址导致相关问题
学习k8s时,已经搭建好了k8s集群,因为之前使用的koolshare软路由模拟内网环境,后换成nat模式之后更改了k8s节点的IP地址,导致出现问题:
Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get config map: Get https://192.168.10.10:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config: dial tcp 192.168.10.10:6443: connect: connection refused
对于我来说,本来就是初接触,肯定是不想再经历一遍搭建的过程,所以:
① 修改/etc/kubernetes/文件夹里的*.conf文件,把这些文件中有旧IP的地方全都替换成你的新IP
② 修改$HOME/.kube/config文件,同样将旧的IP地址修改为新的IP地址
③ cd $HOME/.kube/cache/discovery/,这里应该有个子文件夹名字是“旧IP地址_6443”(如127.0.0.1_6443),把这个文件夹名字里的IP改成你新IP
④ 备份旧证书
# mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old # mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old # mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old # mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old # mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old # mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
⑤ 更改kubeadm-config.yaml中的IP地址
因为我是指定从kubeadm-config.yaml配置文件初始化安装,所以我需要更改kubeadm-config.yaml中的IP地址( 如未则不需 )
⑥ 尝试初始化集群
# kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
这时候就会报错,端口已使用,文件已存在等问题
[ERROR Port-10251]: Port 10251 is in use
[ERROR Port-10252]: Port 10252 is in use
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR Port-2379]: Port 2379 is in use
[ERROR Port-2380]: Port 2380 is in use
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty这个问题可以使用reset命令解决(所有节点):
# kubeadm reset
运行这条命令将会还原当前节点上 kubeadm init 或者 kubeadm join 所做的所有更改。且如果使用外部 etcd,kubeadm reset 将不会删除任何 etcd 数据。这意味着如果再次使用相同的 etcd 节点运行 kubeadm init,你将看到以前的集群状态。
⑦ 重新初始化集群
此时初始化成功
重新初始化成功之后尝试获取node状态(遇到以下问题,其实不单get命令,所有命令都会报下面这个错误):
2、Unable to connect to the server: x509: certificate signed by unknown authority
① 删除目录
重新创建集群时,用户家目录下的.kube这个目录还是存在的,我们先删除它
# rm -rf $HOME/.kube
② 然后执行以下步骤:
# mkdir -p $HOME/.kube # cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # chown $(id -u):$(id -g) $HOME/.kube/config
问题便可解决!
接下来的flanel、node节点的加入就不再说了(node节点也得reset,然后重新加入集群)
3、The connection to the server localhost:8080 was refused - did you specify the right host or port?
第三个问题是因为没有 拷贝集群管理员的配置文件到 .kube 这个目录下
cni已存在问题解决:
描述:
由于初始化k8s集群的没有指定flannel的CIDR导致dashboard连不上apiserver,所以重置了集群,重新初始化的时候出现了一个问题:
# kubectl describe pod coredns-5c98db65d4-s99nl -n kube-system Warning FailedCreatePodSandBox 37m kubelet, k8s-master1 Failed create pod sandbox:
NetworkPlugin cni failed to rk: failed to set bridge addr: "cni0" already has an IP address different from 10.244.0.1/24
解决:
# 重置master节点和 node节点的k8s服务,重置网络。删除网络配置,link # kubeadm reset # systemctl stop kubelet # systemctl stop docker # rm -rf /var/lib/cni/ # rm -rf /var/lib/kubelet/* # rm -rf /etc/cni/ # ifconfig cni0 down # ifconfig flannel.1 down # ifconfig docker0 down # ip link delete cni0 # ip link delete flannel.1 # systemctl start docker # 重新初始化master节点 # kubeadm init --apiserver-advertise-address 192.168.52.100 --pod-network-cidr=10.244.0.0/16 # 配置环境变量并复制admin配置文件到用户家目录,并安装flannel网络插件 # echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile # source .bash_profile # mkdir -p $HOME/.kube # cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # chown $(id -u):$(id -g) $HOME/.kube/config # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # node节点加入集群 # kubeadm join 192.168.52.100:6443 --token bz2zps.1p6h4y1gzjhc6zmm \ --discovery-token-ca-cert-hash sha256:5225cfc004b0371a574f2c651e090005129113d2dd54ce9d64f5eb86bc0dcd53
如此,问题即可解决!
参考来源:
1、https://blog.csdn.net/whywhy0716/article/details/92658111
2、https://blog.csdn.net/woay2008/article/details/93250137
3、https://blog.csdn.net/M82_A1/article/details/99671934
4、https://blog.csdn.net/wzygis/article/details/84098247