常见问题
#
Kubernetes集群部署相关问题#
证书过期- 问题
使用 kubeadm 部署的集群,出现 api 无法调取的现象,使用 kubectl 命令获取资源均返回如下报错:
Unable to connect to the server: x509: certificate has expired or is not yet valid
- 原因
Kubernetes 各个组件证书到期了,因为使用 kubeadm 部署的集群,默认证书有效期为一年,一年后需更新证书
- 验证
执行以下命令
kubeadm alpha certs check-expiration
得到以下结果,如果 RESIDUAL TIME
小于等于 0,则表示证书过去,需要更新证书
CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGEDadmin.conf Oct 12, 2021 03:13 UTC 81d noapiserver Oct 12, 2021 03:13 UTC 81d noapiserver-etcd-client Oct 12, 2021 03:13 UTC 81d noapiserver-kubelet-client Oct 12, 2021 03:13 UTC 81d nocontroller-manager.conf Oct 12, 2021 03:13 UTC 81d noetcd-healthcheck-client Oct 12, 2021 03:13 UTC 81d noetcd-peer Oct 12, 2021 03:13 UTC 81d noetcd-server Oct 12, 2021 03:13 UTC 81d nofront-proxy-client Oct 12, 2021 03:13 UTC 81d noscheduler.conf Oct 12, 2021 03:13 UTC 81d no
- 解决
采用 kubeadm 默认延期 1 年时间的策略,更新所有证书
备份集群配置
kubeadm config view > kubeadm-cluster.yaml
更新证书
kubeadm alpha certs renew all --config=kubeadm-cluster.yaml
确认验证
kubeadm alpha certs check-expiration
其他方案可参考Kubernetes更新证书
note
更新操作需要在所有 master
节点执行
#
kubectl命令失效- 问题
当在节点上使用 kubectl
时,均报以下错误:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
- 原因
这是因为我们提供的快速部署脚本是在 root
账户下执行的,所以把Kubernetes的配置文件放到了 /root
目录下,所以如果是其他账户登录的时候,会报以上问题,这时候只需要把这个配置文件拷贝到相应的账户的 home 目录下即可
- 解决
在要执行 kubectl
的账户下,执行以下命令
mkdir $HOME/.kubesudo cp /root/.kube/config $HOME/.kubeexport KUBECONFIG=$HOME/.kube/config
确认验证
kubectl get node
#
docker镜像拉取失败- 问题
当在节点上使用 docker pull
时,均报以下错误:
Error response from daemon: Get ... HTTP response to HTTPS client
- 原因
这是因为我们提供的快速部署脚本安装的docker,仅支持https协议,如果用自建的habor且是http协议的话,就会出现以上问题,需要在每个节点上,新增个docker配置并重启docker即可
- 解决
在 root
账户下,执行以下命令
vim /etc/docker/daemon.json
{ "experimental": true, "registry-mirrors": ["https://n8eijkli.mirror.aliyuncs.com"], "exec-opts":["native.cgroupdriver=systemd"], "insecure-registries": ["${自建habor的地址}"], "live-restore": true}
新增这个配置项"insecure-registries": ["${自建habor的地址}"], "live-restore": true
,其中 ${自建habor的地址} 为自建habor的地址
重启docker
systemctl daemon-reloadsystemctl restart docker
#
swap分区未关闭- 问题
当在某个节点上的状态是 notReady
,登录该节点,使用 journalctl -f -u kubelet
命令查看相关错误时,报以下错误:
failed to run Kubelet: running with swap on is not supported, please disable swap
- 原因
这是因为我们提供的快速部署脚本关闭swap分区是临时关闭方式,如果出现机器重启,会重新恢复,这时候需要手动关闭一下
- 解决
- 可以选择,在
root
账户下,执行以下命令,临时关闭swap
swapon -a
重启kubelet
systemctl restart kubelet
- 或者选择,在
root
账户下,永久关闭swap
vim /etc/fstab
注释掉swap分区的记录
#/dev/mapper/cl-swap swap swap defaults 0 0
重启机器
systemctl reboot