Kubernetes问题整理

1,355 阅读2分钟

容器无法访问外网

  • 检查kube-dns、weave等网络相关容器的日志,重启容器。
  • 使用dnstools或busybox在各个节点启动,检查网络。
  • 在宿主机配置转发参数。
# 配置转发相关参数,否则可能会出错
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.all.forwarding = 1
vm.swappiness=0
EOF
# 使配置生效,查看输出中的相关参数是否被其它文件覆盖
sysctl --system
# 为防止被覆盖,可执行下面的命令
sysctl -p /etc/sysctl.d/k8s.conf
  • 查看宿主机网卡与网桥,是否存在冲突,删除多余的。
#查看网桥状态
brctl show
#卸载网桥上的端口
brctl delif <网桥名> <端口名>
#查看是否有网桥网卡名
ifconfig
#关闭此网卡
ifconfig <网桥名> down
#删除网桥
brctl delbr <网桥名>
  • 检查宿主机路由表,weave的子网范围是否与办公网络冲突,默认为10.32.0.0/12,不需要这么多,可以改成172.16.0.0/16。
  containers:
    - name: weave
      env:
        - name: IPALLOC_RANGE
          value: 172.16.0.0/16
  • 重置weave。
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
weave reset

nginx容器proxy_pass引用变量后显示502

  • 配置resolver为kube-dns的地址。proxy_pass引用变量后改为每次请求动态解析域名,因此需要配置resolver。
  • 变量拼接出来的容器内部域名必须为完整格式,如:jenkins.default.svc.cluster.local。
  • 变量尽量使用${}的格式,防止歧义。

容器没有安装排查问题所需的软件

#同步软件列表
apt-get update
#netstat
apt-get install net-tools
#nslookup dig
apt-get install dnsutils

Service nodePort的端口号问题

默认范围为30000-32767,可以通过如下方式修改。

#/etc/kubernetes/manifests/kube-apiserver.yaml
- --service-node-port-range=80-32767

kubeadm会自动触发更新。

执行容器内命令

kubectl exec podName -c containerName -n namespace -- shell comand

若pod中只有一个container,则-c可以省略。

kubeadm生成的token过期

[root@master ~]# kubeadm token create
x1dg5g.1pb8z8btfluqsk5p
[root@master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
bhga0k.rw8q4ji476deupgh   <invalid>   2018-12-22T12:36:03+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token
x1dg5g.1pb8z8btfluqsk5p   23h         2019-01-11T16:31:27+08:00   authentication,signing   <none>
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
9f7289c23da67f93d1c4a6790bc35f2169dcb4577a5d4a3306e7cc163d796798

node创建的pod数量达到上限

默认为110个,可以修改配置文件。

vim /var/lib/kubelet/config.yaml
maxPods: 220

#停止kubelet
systemctl stop kubelet
#重新载入systemd
systemctl daemon-reload
#启动kubelet
systemctl start kubelet

某个node显示NotReady,大量pod异常,显示Terminating

查看node状态

kubectl describe node xxx

查看kubelet日志

journalctl -f -u kubelet

重启docker

systemctl restart docker

强制删除pod(可以先用grep指定node)

kubectl delete pods --all --grace-period=0 --force

重启apiserver