k8s的常见问题

过去的,未来的
2020-12-15 / 0 评论 / 0 点赞 / 558 阅读 / 2,383 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-12-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、work 节点不能kubectl

The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决:
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

立即生效

source ~/.bash_profile

接着再运行kubectl命令就OK了

2、解决 Kubeadm 添加新 Master 节点到集群出现 ETCD 健康检查失败错误

error execution phase check-etcd: etcd cluster is not healthy: failed to diith maintenance client: context deadline exceeded

根据关键信息 "error execution phase check-etcd" 可知,可能是在执行加入 etcd 时候出现的错误,导致 master 无法加入原先的 kubernetes 集群。

分析问题所在及解决方案

因为集群是通过 kubeadm 工具搭建的,且使用了 etcd 镜像方式与 master 节点一起,所以每个 Master 节点上都会存在一个 etcd 容器实例。当剔除一个 master 节点时 etcd 集群未删除剔除的节点的 etcd 成员信息,该信息还存在 etcd 集群列表中。

所以,我们需要 进入 etcd 手动删除 etcd 成员信息。

1、获取 Etcd 镜像列表

首先获取集群中的 etcd pod 列表

$ kubectl get pods -n kube-system | grep etcd

etcd-k8s-master-2-12   1/1   Running   0
etcd-k8s-master-2-13   1/1   Running   0   
2、进入 Etcd 容器并删除节点信息

选择上面两个 etcd 中任意一个 pod,通过 kubectl 工具进入 pod 内部:

$ kubectl exec -it etcd-k8s-master-2-12 sh -n kube-system

进入容器后,按下面步执行

## 配置环境
$ export ETCDCTL_API=3
$ alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'

## 查看 etcd 集群成员列表
$ etcdctl member list

63bfe05c4646fb08, started, k8s-master-2-11, https://192.168.2.11:2380, https://192.168.2.11:2379, false
8e41efd8164c6e3d, started, k8s-master-2-12, https://192.168.2.12:2380, https://192.168.2.12:2379, false
a61d0bd53c1cbcb6, started, k8s-master-2-13, https://192.168.2.13:2380, https://192.168.2.13:2379, false

## 删除 etcd 集群成员 k8s-master-2-11
$ etcdctl member remove 63bfe05c4646fb08

Member 63bfe05c4646fb08 removed from cluster ed984b9o8w35cap2

## 再次查看 etcd 集群成员列表
$ etcdctl member list

8e41efd8164c6e3d, started, k8s-master-2-12, https://192.168.2.12:2380, https://192.168.2.12:2379, false
a61d0bd53c1cbcb6, started, k8s-master-2-13, https://192.168.2.13:2380, https://192.168.2.13:2379, false

## 退出容器
$ exit
3、通过 kubeadm 命令再次尝试加入集群

通过 kubeadm 命令再次尝试将 k8s-master-2-11 节点加入集群,在执行前首先进入到 k8s-master-2-11 节点服务器,执行 kubeadm 的清除命令:

$ kubeadm reset
然后尝试加入 kubernetes 集群:

$ kubeadm join .....
0

评论区