• Kubernetes 安装过程问题汇总


    1. HAProxy 安装问题汇总

    1.1 绑定vip启动失败

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

    然后让变量生效

    sysctl -p 
    
    • 1

    接着再次启动haproxy

    systemctl restart haproxy
    
    • 1

    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
    
    • 1
    • 2

    修改 命名空间.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
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 解决办法
    kubectl get pods -n 命名空间 | grep Terminating | awk '{print $1}' | xargs kubectl delete pod -n 命名空间 --force --grace-period=0
    
    • 1

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

    3.3 Pod 日志无法查看

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

    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)
    
    • 1
    • 2
    • 3
    • 解决办法
      由于网络访问限制,正常情况下无法访问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
    
    • 1
    • 2

    3.5 Pod 被驱逐

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

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

    kubectl get pods -A| grep Evicted |  awk '{print $2}' | xargs kubectl delete pod -n 
    
    • 1

    3.6 node 节点报错

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

    3.7 查看 kubelet 日志

    journalctl -u kubelet --since today |less
    
    • 1

    3.8 主节点无法调度

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

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

    kubectl get nodes -o wide
    
    • 1

    显示结果如下所示:

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

    4. Calico 安装问题汇总

    4.1 节点之间访问 Timeout

    • 问题描述
    cni-installer/ : 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
    
    • 1
    • 2
    • 3
    • 解决办法
      检查集群网络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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 分析日志
    #: kubectl logs -n kube-system calico-node-wzq2p -c install-cni
    #: kubectl describe pod calico-node-wzq2p -n kube-system 
    #: journalctl -u kubelet -f
    
    • 1
    • 2
    • 3

    提示磁盘空间不足不一定真的是磁盘空间不足导致的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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上边配置中的 -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
    
    • 1
    • 2
    • 解决办法
    yum install socat -y
    
    • 1

    6.2 Istio Ingress 修改网络类型

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

    6.3 istio 关闭 egress 限制

    helm upgrade --set meshConfig.outboundTrafficPolicy.mode=REGISTRY_ONLY istiod  istio/istiod -n istio-system
    
    • 1
  • 相关阅读:
    什么是岗位点检?在设备管理中如何应用岗位点检理论?
    基于nodejs+vue 校园通勤车系统
    每日一学vue2:自定义绑定事件解除方式($off)及销毁vc
    数字驱动的品牌重塑战略对您公司的重要意义
    玄子Share-引导过程与服务控制
    vue3上传文件组件方法封装
    基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本
    npm ERR! code ERESOLVE错误解决
    【Godot4自学手册】第十八节主人公的血量显示
    360度绩效评估中的6个关键点,尤其是第4个!
  • 原文地址:https://blog.csdn.net/hzwy23/article/details/128111446