Kubernetes 安装过程问题汇总

1. HAProxy 安装问题汇总

1.1 绑定vip启动失败

  • 问题描述
    /etc/haproxy/haproxy.cfg 中配置了绑定 vip ,启动 haproxy 服务时出现绑定失败的错误提示。
  • 解决办法
    修改配置文件 /etc/sysctl.conf,添加如下内容:
net.ipv4.ip_nonlocal_bind=1

然后让变量生效

sysctl -p 

接着再次启动haproxy

systemctl restart haproxy

2. ETCD 安装问题汇总集群无法启动

2.1 etcd 节点重启失败

  • 问题描述
    由于某个节点数据出现故障,导致节点无法启动。etcdctl 与 kubectl 客户端工具无法使用,均出现请求 timeout 的情况,而直接重启当前节点的 etcd 服务出现异常。
  • 解决办法
    第一步:删除该节点etcd的数据目录,ETCD_DATA_DIR 变量值即为数据存储目录
    第二步:设置 ETCD_INITIAL_CLUSTER_STATE=“existing”
    第三步:重启节点,systemctl restart etcd

3. Kubernetes 安装问题汇总

3.1 namespace 无法删除

  • 问题描述
    命名空间状态为 Terminating,导致无法在这个命名空间中部署资源,也无法删除。
  • 解决办法
cd /opt
kubectl get namespace 命名空间 -o json > 命名空间.json

修改 命名空间.json 中内容,删除 specstatus 对应的值后,然后执行下边命令:

kubectl proxy --port=9988 &
curl -k -H "Content-Type: application/json" -X PUT --data-binary @命名空间.json 127.0.0.1:9988/api/v1/namespaces/${命名空间}/finalize

3.2 大量Pod 状态为 Terminating

  • 问题描述
    由于某些节点故障,导致出现大量的 Pod 状态为 Terminating
istio-system           jaeger-5994d55ffc-nmhq6                     0/1     Terminating         0          13h
istio-system           jaeger-5994d55ffc-pjj5m                     0/1     Terminating         0          11h
istio-system           kiali-64df7bf7cc-29kxl                      0/1     Terminating         0          12h
istio-system           kiali-64df7bf7cc-2bk77                      0/1     Terminating         0          11h
istio-system           kiali-64df7bf7cc-4wwhg                      0/1     Terminating         0          14h
istio-system           kiali-64df7bf7cc-8cfsh                      0/1     Terminating         0          13h
istio-system           kiali-64df7bf7cc-dks5w                      0/1     Terminating         0          15h
istio-system           kiali-64df7bf7cc-dkzgc                      0/1     Terminating         0          15h
  • 解决办法
kubectl get pods -n 命名空间 | grep Terminating | awk '{print $1}' | xargs kubectl delete pod -n 命名空间 --force --grace-period=0

如果发现大量的Pod存在这种情况,可通过编写脚本定期执行。

3.3 Pod 日志无法查看

  • 问题描述
    使用 kubectl logs -f PodName 查看日志时提示如下错误信息:
Error from server (Forbidden): Forbidden (user=kubernetes, verb=get, resource=nodes, subresource=proxy)
  • 解决办法
kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes

3.4 Pod容器初始化失败

  • 问题描述
Failed to create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.6": 
Error response from daemon: Get https://k8s.gcr.io/v2/: 
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  • 解决办法
    由于网络访问限制,正常情况下无法访问registry.k8s.io 域名内的镜像,所以通过国内镜像仓库下载后,使用 tag 指令重命名。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 registry.k8s.io/pause:3.6

3.5 Pod 被驱逐

  • 问题描述
    大量的 Pod 状态是 Evicted

  • 解决办法
    删除状态为 Evicted 的 Pod

kubectl get pods -A| grep Evicted |  awk '{print $2}' | xargs kubectl delete pod -n <namespace>

3.6 node 节点报错

  • 问题描述
"Error syncing pod, skipping" err="network is not ready: container runtime network not ready
  • 解决办法
    Kubernetes CNI 网络插件安装失败,如果 CNI 是 Calico,请确认 calico-node 是否启动成功。

3.7 查看 kubelet 日志

journalctl -u kubelet --since today |less

3.8 主节点无法调度

  • 问题描述
0/1 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/not-ready: }

k8s 节点不可调度,使用kubectl 工具查看节点状态

kubectl get nodes -o wide

显示结果如下所示:

NAME          STATUS                        ROLES    AGE    VERSION
k8s-master1   NotReady,SchedulingDisabled   <none>   43h    v1.24.2
k8s-master2   Ready                         <none>   4d6h   v1.24.2
k8s-node1     NotReady,SchedulingDisabled   <none>   44h    v1.24.2
  • 解决办法
# 禁止调度
kubectl cordon 节点名称
# 解除禁用
kubectl uncordon 节点名称

4. Calico 安装问题汇总

4.1 节点之间访问 Timeout

  • 问题描述
cni-installer/<nil> <nil>: Unable to create token for CNI kubeconfig error=Post 
"https://10.255.0.1:443/api/v1/namespaces/kube-system/serviceaccounts/calico-node/token": 
dial tcp 10.255.0.1:443: i/o timeout
  • 解决办法
    检查集群网络CNI插件是否正常,如 calico-node 是否能够正常启动。检查 Kubernetes 启动参数中 --service-cluster-ip-range--cluster-cidr 值是否出现了重叠,导致了集群变成了单机环境。

4.2 Calico-node Pod启动失败

  • 问题描述
calico-node启动失败,在事件信息中出现如下:
Back-off restarting failed container
invalid capacity 0 on image filesystem
Node k8s-node2 status is now: NodeHasNoDiskPressure
Updated Node Allocatable limit across pods
Node k8s-node2 status is now: NodeHasSufficientPID
  • 分析日志
#: kubectl logs -n kube-system calico-node-wzq2p -c install-cni
#: kubectl describe pod calico-node-wzq2p -n kube-system 
#: journalctl -u kubelet -f

提示磁盘空间不足不一定真的是磁盘空间不足导致的calico-node无法启动,需要查看具体的日志信息。可以使用 kubectl logs -n kube-system calico-node-wzq2p -c install-cni查看具体的错误提示,然后分析问题。作者曾经就一直以为是磁盘空间不足导致的 calico-node 无法启动,后来查看了详细日志才发现是 kube-proxy 的配置参数 --cluster-cidrkube-controller-managerkube-apiserver 中设置的 --service-cluster-ip-range 不匹配。

5. CoreDNS 安装问题汇总

5.1 DNS 域名服务 IP 地址调整

  • 问题描述
    CoreDNS 默认的配置与当前 kubernetes 集群配置不一致,Kubelet 启动参数 clusterDNS依赖 CoreDNS 域名服务 IP 地址,当 Kubelet 服务启动时设置的 clusterDNS 参数与 CoreDNS 部署设置的域名服务 IP 地址不一致时,将会导致服务访问超时。
  • 解决办法
    执行下边命令,指定 DNS域名服务的 Service IP 地址
cd /opt
git clone https://github.com/coredns/deployment
cd /opt/deployment/kubernetes
./deploy.sh -r 10.255.0.0/16 -i 10.255.0.2 > coredns.yaml
kubectl apply -f coredns.yaml

上边配置中的 -i 既是设置 DNS 域名服务 IP 地址。

6. Istio 安装问题汇总

6.1 Kiali 无法连接 Istiod

  • 问题描述
unable to proxy Istiod pods. 
Make sure your Kubernetes API server has access to the Istio control plane through 8080 port
  • 解决办法
yum install socat -y

6.2 Istio Ingress 修改网络类型

  • 问题描述
    默认情况下, Istio Ingress 使用 LoadBalancer
  • 解决办法
kubectl patch svc -n istio-ingress istio-ingress  -p '{"spec": {"type": "NodePort"}}'

6.3 istio 关闭 egress 限制

helm upgrade --set meshConfig.outboundTrafficPolicy.mode=REGISTRY_ONLY istiod  istio/istiod -n istio-system

猜你喜欢

转载自blog.csdn.net/hzwy23/article/details/128111446