K8s常见问题分析&解决(docker问题)

1: k8s集群内的容器,只能在其所在的节点上curl访问,其他任何主机上无法访问容器占用的端口

详细描述:
    k8s集群内的容器,只能在其所在的节点上curl访问,其他任何主机上无法访问容器占用的端口
解题思路:
    无
原因分析:
    主机中网络包转发问题
解决步骤:
    vim /etc/sysctl.conf
    找到 net.ipv4.ip_forward=1 去掉注释
    备注: 主机必须重启才能生效

2:私有仓库镜像拉取问题,提示需要https协议

详细描述:
    私有仓库镜像拉取问题,提示需要https协议
    Get https://IP:Port/v2/: http: server gave HTTP response to HTTPS client
解题思路:
    无
原因分析:
    未将私有镜像仓库地址配置到docker中的registries
解决步骤:
    在/etc/docker/daemon.json添加信息
    {"insecure-registries":["IP:Port"]}    #将这一行添加到第一行
    重启docker服务
    systemctl restart docker.service

3: 下载镜像出现问题,提示/etc/rhsm/ca/redhat-uep.pem no file or dictory

详细描述:
    下载镜像出现问题,提示/etc/rhsm/ca/redhat-uep.pem no file or dictory
解题思路:
    无
原因分析:
    缺少秘钥文件
解决步骤:
    1: yum -y install *rhsm*  安装依赖
    2:下载python-rhsm-certificates软件并生成密钥文件
    wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-    1.19.10-1.el7_4.x86_64.rpm
    rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
    重新拉取镜像即可

4: 容器相关的错误问题

详细描述:
    容器相关的错误问题;
    尝试关闭容器:
    docker报相应的错误:rpc error: code = 14 desc = grpc: the connection is unavailable
    尝试停止容器:
    Error response from daemon: Cannot stop container <container-name>: Cannot kill
    尝试强制删除容器(-f):
    [root@k8s-node-1 ~]# docker rm -f 7119f8f5feef
    Error response from daemon: Could not kill running container
解题思路:
    无
原因分析:
    无
解决步骤:
    使用docker-containerd命令以debug模式调整容器(在不能删除容器的node上执行)
    命令大致如下:
    docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir     /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --debug
    调试后容器的状态会变为未开启状态,进而尝试删除容器,容器删除成功

5:kubelet提示DNS错误信息

详细描述:
    kubelet提示DNS错误信息
    kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Fail
解题思路:
    无
原因分析:
    无
解决步骤:
    编辑/etc/kubernetes/kubelet 配置文件中添加以下内容
    KUBE_ARGS="--cluster-dns=10.0.0.110 --cluster-domain=cluster.local"
    重启 systemctl daemon-reload;  systemctl restart kubelet

6: docker run 报错,文件系统不支持

详细描述:
    docker run 报错,文件系统不支持
    /usr/bin/docker-current: Error response from daemon: error creating overlay mount to 	/var/lib/docker/overlay2/7b4a1ef8a539785fde3fa4cabc4bb9d90967a30calid argument.
解题思路:
    无
原因分析:
    因为采用了overlay2文件系统,而系统默认只能识别overlay文件系统,需要我们更新文件系统
解决步骤:
    systemctl stop docker       #停掉docker服务
    rm -rf /var/lib/docker        #注意会清掉docker images的镜像
    vi /etc/sysconfig/docker-storage   //将文件里的overlay2改成overlay即可
    DOCKER_STORAGE_OPTIONS="--storage-driver overlay2 "  #修改前
    DOCKER_STORAGE_OPTIONS="--storage-driver overlay "   #修改后
    vi /etc/sysconfig/docker           //去掉option后面的--selinux-enabled
    重启
    systemctl start docker

 7: docker 容器处于dead状态,使用删除命令无法删除

详细描述:
    docker 容器处于dead状态,使用删除命令无法删除
解题思路:
    无
原因分析:
    未知
解决步骤:
    尽量避免快速删除容器,当前没有比较好的办法,除非重启系统

8:K8s使用nfs当作挂载目录,出现创建pod失败报错

详细描述:
    K8s使用nfs当作挂载目录,出现创建pod失败报错
解题思路:
    无
原因分析:
    可能因为nfs的权限问题,比如pod运行rabbitmq应用,默认情况下,使用官方的rabbitmq运行的程序用户是rabbitmq,对nfs挂载的目录可能没有操作写入权限导致出错
解决步骤:
    针对上面的demo例子解决办法:
    在nfs服务器上新建一个目录,并且将这个目录权限设置为rabbitmq用户

发布了102 篇原创文章 · 获赞 8 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/CodeAsWind/article/details/104309572