容器无法访问外网
- 检查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 <网桥名>
复制代码
- 检查宿主机iptables,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