k8s部分坑点、杂项记录
K8s 应用过程中的一些杂项记录
1、K8s Service 不能访问排查流程?
排查流程:
- Service 存在吗,对吗?(
describe svc
) - Pod 正常工作吗?(
get pod
) - Service 能够通过 IP 访问么?(
ping、curl
) - Service 有端点吗?(
get endpoints
) - Service 是否通过 DNS 工作?(
nsloopup ServiceName
) - DNS 是否可以解析默认服务?(
nslookup kubernetes.default
) - kube-proxy 正常工作吗?(
journalctl -f -u kube-proxy
) - 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、遇坑列表:
- 进程可用的文件描述符 FD 不足
- IP 临时端口不足 + TIME_WAIT 状态的连接过多导致无法建立新连接
- 服务器访问量大,内核 netfilter 模块 conntrack 相关参数配置不合理,导致 IP 包被丢掉,连接无法建立(不要盲目增加 ip_conntrack_max)
- 初始化时–cluster-cidr 等参数配置有误导致防火墙规则没有正常添加,进而导致网络不通或者 service 无法访问等问题
-
golang 应用中/etc/hosts 自定义域名解析设置不生效,解决:dockerfile 中增加一行:
RUN echo "hosts: files dns" > /etc/nsswitch.conf
-
CentOS 7.6 系统使用的 systemd-219-62.el7_6.6.x86_64 软件包存在缺陷,引发异常错误;解决方案(更新 systemd 程序包至最新版本并重新运行 systemd 程序):
yum update -y systemd && systemctl daemon-reexec