k8s部分坑点、杂项记录

公众号:yunops

K8s 应用过程中的一些杂项记录

1、K8s Service 不能访问排查流程?

排查流程:

  1. Service 存在吗,对吗?(describe svc)
  2. Pod 正常工作吗?(get pod
  3. Service 能够通过 IP 访问么?(ping、curl
  4. Service 有端点吗?(get endpoints
  5. Service 是否通过 DNS 工作?(nsloopup ServiceName
  6. DNS 是否可以解析默认服务?(nslookup kubernetes.default
  7. kube-proxy 正常工作吗?(journalctl -f -u kube-proxy
  8. kube-proxy 是否在写 iptables 规则?(iptables-save | grep ServiceName、 ipvsadm -ln
    • 一般来讲,如果 k8s 中的服务短暂不可用后又恢复,基本上就是因为调度的原因导致的,被调度的对象可能是服务功能对应的 pod 本身,也可能是整个调度链中的某个环节(比如说 http 请求过程中的 nginx-controller 等),被调度的原因可能是 OOM、资源(包括磁盘)使用率的问题导致的 pod 驱离;
    • 如果是一定数量的服务功能异常,首先找下共通性:是不是位于同一个 node,检查该 node 节点的 kubelet、kube-proxy 状态及日志,dmesg -w -H 或者查看/var/log/message 查询 node 节点异常日志;如果是所有功能异常,排查全局组件,如:coredns、api-server 等,查看 pod 状态、events 等

2、遇坑列表:

  1. 进程可用的文件描述符 FD 不足
  2. IP 临时端口不足 + TIME_WAIT 状态的连接过多导致无法建立新连接
  3. 服务器访问量大,内核 netfilter 模块 conntrack 相关参数配置不合理,导致 IP 包被丢掉,连接无法建立(不要盲目增加 ip_conntrack_max)
  4. 初始化时–cluster-cidr 等参数配置有误导致防火墙规则没有正常添加,进而导致网络不通或者 service 无法访问等问题
  5. golang 应用中/etc/hosts 自定义域名解析设置不生效,解决:dockerfile 中增加一行:

    RUN echo "hosts: files dns" > /etc/nsswitch.conf

  6. CentOS 7.6 系统使用的 systemd-219-62.el7_6.6.x86_64 软件包存在缺陷,引发异常错误;解决方案(更新 systemd 程序包至最新版本并重新运行 systemd 程序):

    yum update -y systemd && systemctl daemon-reexec