5、Node部署
1、kubeadm安装
参考文章: 3、kubeadm安装 https://www.cnblogs.com/ygbh/p/17221317.html
2、将node节点加入master集群
kubeadm join 192.168.10.26:6443 --token chsuee.cxw3s9mdyodk8ehk \
--discovery-token-ca-cert-hash sha256:5cd4bd62fa2c5bd83eb50c40dd941d3fdcd31edc9b7a169d3442ee2da6363218
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 NotReady control-plane 5m15s v1.26.2
master2 NotReady <none> 3m50s v1.26.2
master3 NotReady <none> 3m44s v1.26.2
3、CNI介绍
CNI是Container Network Interface的是一个标准的,通用的接口。CNI的工作是从容器管理系统
处获取运行时信息,包括network namespace的路径,容器ID以及network interface name,再从容
器网络的配置文件中加载网络配置信息,再将这些信息传递给对应的插件,由插件进行具体的网络配置工作,
并将配置的结果再返回到容器管理系统中。
CNI插件是可执行文件,会被kubelet调用。
启动参数
--network-plugin 指定柔情网络的接口类型 cni
--cni-conf-dir 指定networkconfig配置,默认路径是:/etc/cni/net.d,
--cni-bin-dir 指定plugin可执行文件路径,默认路径是:/opt/cni/bin;
它只在两种场景中使用:创建容器和删除容器
4、检查集群DNS是否解析正常
[root@master1 ~]# kubectl run curl --image=radial/busyboxplus:curl -it
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$ nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
# 显示这样子,表示DNS解析正常
5、集群的重置
如果因为特殊因素导致,集群创建失败,我们可以通过两条命令实现环境的快速还原
5.1、Master重置清空方法
# Master节点重置 kubeadm reset; rm -rf /etc/kubernetes; rm -rf ~/.kube ; rm -rf /etc/cni/; # 清除容器的网络接口
systemctl restart containerd.service
5.2、Node重置清空方法
rm -rf /etc/cni/net.d;
kubeadm reset;
# 需要重启一下这个服务,避免网络插件有问题
systemctl restart containerd.service
6、Node加入集群token过期处理方法
6.1、查看当前token信息
kubeadm token list
6.2、手动生成token
# 生成token
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 使用token加入集群 kubeadm join 192.168.10.26:6443 --token 0cz1ut.m76ulyo3r3mc2c4g --discovery-token-ca-cert-hash sha256:【填写生成的token值】
6.3、自动生成加入集群的命令
kubeadm token create --print-join-command
7、Node节点从集群中删除
7.1、master执行-移除节点
kubectl drain node2 --delete-local-data --force --ignore-daemonsets
kubectl delete node node2
7.2、node节点执行-移除历史记录文件
kubeadm reset
systemctl stop kubelet docker
rm -rf /etc/kubernetes/
8、错误处理
8.1、NotReady
Mar 14 20:45:20 master1 kubelet[17332]: E0314 20:45:20.965419 17332 kubelet.go:2475] "Container runtime network not ready"
networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized" # 原因:没有安装网络插件如:需要安装flannel、calico等 # 解决方法: kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml # 如果重启一下这个服务 systemctl restart containerd.service
8.2、cni0和flannel.1网段不一致的问题
报错:failed (add): failed to delegate add: failed to set bridge
现象:容器一直在创建中,无法创建,检查是节点flannel网关的问题
解除方法:
ifconfig cni0 down
ip link delete cni0
# 系统会自动创建
注意:cni0和flannel.1网口必须是同一个网段,否则网关有问题
cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.244.3.1 netmask 255.255.255.0 broadcast 10.244.3.255
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.244.3.0 netmask 255.255.255.255 broadcast 0.0.0.0
9、配置crictl
9.1、背景
因为docker查看不了k8s运行镜像的状态,所以要使用crictl查询
9.2、配置
cat >/etc/crictl.yaml<<'EOF'
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF
9.3、测试
[root@node1 ~]# crictl pods
POD ID CREATED STATE NAME NAMESPACE ATTEMPT RUNTIME
98c512f3fb52d 49 minutes ago Ready nginx-deployment-5b47ccdd5c-b9pnc default 0 (default)
548537fb74473 15 hours ago Ready kube-flannel-ds-z4bgg kube-system 0 (default)
6d84a7ce7d3d5 15 hours ago Ready kube-proxy-t7n6h kube-system 0 (default)