安装参考:https://www.jianshu.com/p/67a3bf4458e8
安装中的错误参考:
1.第一点:hostname每个节点一定要设置,不然node1默认localhost.localdomian会和master重名,导致node1和master错乱起不来
解决办法:hostnamectl set-hostname master|node1|node2....
2.第二点:bridge桥设置为1
sysctl -w net.bridge.bridge-nf-call-iptables=1
sysctl -w net.bridge.bridge-nf-call-ip6tables=1
3.第三个点:高版本k8s1.15.2会一直启用cgroups pids,导致初始化master失败
master的init阶段:
高版本k8s会出错解决办法:https://blog.csdn.net/u010512429/article/details/98792939
https://blog.csdn.net/nklinsirui/article/details/80855415
因为我们的内核版本不支持cgroups pids控制器,然后我们禁用了cgroups pids相关的功能门:`SupportPodPidsLimit`并且`SupportNodePidsLimit`期望kubelet不需要pids子系统,但行为仍然存在。
即使禁用了功能门,看起来也总是需要pids子系统。这个变化是`SupportNodePidsLimit`在高版本中引入的。
**您期望发生的事情**:
如果禁用与pids相关的功能门,我们预计不需要cgroup pids子系统。
**如何重现它(尽可能最小和最精确)**:
尝试使用4.3以上的内核在1.14.x中启动任何kubelet。
4.第4点下载的镜像要改标签名为k8s.gcr.io
5.第5点:master上init之后的部署flannel网络
部署flannel网络解决办法https://www.cnblogs.com/linuxk/p/11353623.html
# mkdir k8s && cd k8s
# curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
# docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
# kubectl apply -f kube-flannel.yml
# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-bccdc95cf-ghfrp 1/1 Running 0 129m
coredns-bccdc95cf-h4tch 1/1 Running 0 129m
etcd-k8s-master 1/1 Running 0 128m
kube-apiserver-k8s-master 1/1 Running 0 128m
kube-controller-manager-k8s-master 1/1 Running 0 128m
kube-flannel-ds-amd64-r2hmf 1/1 Running 0 111m
kube-flannel-ds-amd64-zwt6l 1/1 Running 0 36m
kube-proxy-czjzf 1/1 Running 0 129m
kube-proxy-ts4nf 1/1 Running 0 36m
kube-scheduler-k8s-master 1/1 Running 0 128m
6.第6点
做第一个k8spod的时候
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-test-5dbffd4db6-twgrc 0/1 ContainerCreating 0 22m <none> node1 <none> <none>
各种排错,网上有说是node1上cai0桥ip错了,各种处理,
处理方法:
$ ip link set cni0 down
$ brctl delbr cni0
最后搜到了k8s报错手册(https://feisky.gitbooks.io/kubernetes/troubleshooting/pod.html)
除了以上错误,其他可能的原因还有
镜像拉取失败,比如
配置了错误的镜像
Kubelet 无法访问镜像(国内环境访问 gcr.io 需要特殊处理)
私有镜像的密钥配置错误
镜像太大,拉取超时(可以适当调整 kubelet 的 --image-pull-progress-deadline 和 --runtime-request-timeout 选项)
CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如
无法配置 Pod 网络
无法分配 IP 地址
容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数
我就自己在docker里pull了nginx:1.14-alpine
再建一个pod瞬间成功
应该是k8s又从k8s.gcr.io拉镜像了
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-test-5dbffd4db6-twgrc 0/1 ContainerCreating 0 22m <none> node1 <none> <none>
nginx1-67f79bc94-2mmt8 1/1 Running 0 21s 10.244.2.2 node2 <none> <none>
[root@master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-test 0/1 1 0 23m
nginx1 1/1 1 1 56s
7.coredns状态一直是CrashLoopBackOff
此排错参考:https://blog.csdn.net/u011663005/article/details/87937800
原因大概有1.你的宿主机网络ip不能和coredns的ip网段重合
2.上一个错我删除cai0桥导致的
于是用kubectl delete pods coredns-5c98db65d4-z6jcm -n kube-system
删除pod节点,它自动重置一个,状态就为run了
这里贴个排错的思路
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl logs --previous <pod-name>
如果此时如果还未发现线索,还可以到容器内执行命令来进一步查看退出原因
kubectl exec cassandra -- cat /var/log/cassandra/system.log
如果还是没有线索,那就需要 SSH 登录该 Pod 所在的 Node 上,查看 Kubelet 或者 Docker 的日志进一步排查了
# Query Node
kubectl get pod <pod-name> -o wide
# SSH to Node
ssh <username>@<node-name>
自己的安装及使用博客等学完再写