k8s新增Node节点 简单易上手 如何给k8s新添加node节点
1、集群环境初始化
机器数量: 1台、操作系统: CentosStream9 、分别设置主机名称为:no’de-3
[root@master app1]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node Ready control-plane 96d v1.28.2
node-1 Ready <none> 96d v1.28.2
node-2 Ready <none> 96d v1.28.2
禁用开机启动防火墙和Selinux
# systemctl disable firewalld
# sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
SELINUX=disabled
关闭Swap分区
Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
[root@master /]# sed -i 's/.*swap.*/#&/' /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
注意改完fstab先重启,再做下面的操作
2、安装和配置先决条件
在node3节点操作
2.1、转发 IPv4 并让 iptables 看到桥接流量
验证 br_netfilter
模块是否已加载
# lsmod | grep br_netfilter
为了让 Linux 节点的 iptables 能够正确查看桥接流量,确认 sysctl
配置中的 net.bridge.bridge-nf-call-iptables
设置为 1。
# cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# modprobe overlay
# modprobe br_netfilter
设置所需的 sysctl 参数,参数在重新启动后保持不变
# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
应用 sysctl 参数而不重新启动
# sysctl --system
3、容器运行时
安装 containerd
在node3节点操作
本文采用yum方式安装
获取阿里云docker yum源
# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看YUM源中Containerd软件
# yum list | grep containerd
containerd.io.x86_64 1.6.15-3.1.el9 docker-ce-stable
安装Containerd.io软件,即可安装Containerd
# yum -y install containerd.io
设置containerd服务启动及开机自启动
# systemctl enable containerd
# systemctl start containerd
验证可用性
安装Containerd后ctr命令即可使用,ctr命令主要用于管理容器及容器镜像等。
使用ctr命令查看Containerd客户端及服务端相关信息。
# ctr version
配置containerd
生成containerd配置文件
# 生成默认配置,config.toml这个文件二进制安装方式默认不存在,如果是Yum安装则直接覆盖
containerd config default > /etc/containerd/config.toml
修改sandbox_image 镜像源
修改sandbox_image 镜像源,1.24以下k8s.gcr.io 、1.25 改成了registry.k8s.io
# sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
配置containerd cgroup 驱动程序systemd
把SystemdCgroup = false修改为:SystemdCgroup = true,
# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
Containerd配置镜像加速
endpoint位置添加阿里云的镜像源,https://yafixjtd.mirror.aliyuncs.com 这个地址是我自己阿里加速器地址,每个人都不一样
# vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors] #下面两行是新加的
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://yafixjtd.mirror.aliyuncs.com" ,"https://registry-1.docker.io"]
配置crictl
因为ctr命令查看镜像非常混乱,可以用这个命令查看镜像
# cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
查看镜像
# crictl image list
需要稍等一下十分钟
重启containerd
# systemctl restart containerd
4、安装k8s套件
在node3节点操作
配置aliyun的yum源
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm、kubelet 和 kubectl
# yum makecache
# yum install -y kubelet kubeadm kubectl ipvsadm ipset --disableexcludes=kubernetes
默认为最新版,对应最新版k8s
--disableexcludes=kubernetes 禁掉除了这个kubernetes之外的别的仓库
说明:如果想安装指定版本的kubeadmin
# yum install kubelet-1.28.2-0.x86_64 kubeadm-1.28.2-0.x86_64 kubectl-1.28.2-0.x86_64 ipvsadm ipset --disableexcludes=kubernetes -y
查看版本
# kubectl version
# yum info kubeadm
启动kubelet
# systemctl enable --now kubelet
注意官方提示:kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。 在 crashloop 状态中等待 kubeadm 发布指令。crashloop 状态是正常现象。 初始化控制平面后,kubelet 将正常运行。
5、获取镜像
特别说明:
node-3节点下载
注意下载时把版本号修改到官方最新版,即使下载了最新版也可能版本不对应,需要按报错提示下载
每次部署都会有版本更新,具体版本要求,运行初始化过程失败会有版本提示
kubeadm的版本和镜像的版本最好是对应的
用命令查看版本当前kubeadm对应的k8s镜像版本
查看镜像
# kubeadm config images list --kubernetes-version v1.28.2
registry.k8s.io/kube-apiserver:v1.28.2
registry.k8s.io/kube-controller-manager:v1.28.2
registry.k8s.io/kube-scheduler:v1.28.2
registry.k8s.io/kube-proxy:v1.28.2
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
查看国内镜像
# kubeadm config images list --kubernetes-version v1.28.2 --image-repository registry.aliyuncs.com/google_containers
registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.2
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.2
registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.2
registry.aliyuncs.com/google_containers/kube-proxy:v1.28.2
registry.aliyuncs.com/google_containers/pause:3.9
registry.aliyuncs.com/google_containers/etcd:3.5.9-0
registry.aliyuncs.com/google_containers/coredns:v1.10.1
coredns如果下载不了可以通过docker pull coredns/coredns:v1.10.1从docker官方下载
下载镜像
# ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0
注意:必须用-n指定namespace,否则k8s和crictr都看不到镜像
下载下来的镜像名称不用重新修改,直接使用aliyun的镜像
[root@master ~]# cat pull.sh
#!/bin/bash
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.2
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.2
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.2
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.2
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.9
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0
ctr -n=k8s.io image pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
[root@node-3 ~]# bash pull.sh
[root@node-3 ~]# crictl image ls
IMAGE TAG IMAGE ID SIZE
registry.aliyuncs.com/google_containers/coredns v1.10.1 ead0a4a53df89 16.2MB
registry.aliyuncs.com/google_containers/etcd 3.5.9-0 73deb9a3f7025 103MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.28.2 cdcab12b2dd16 34.7MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.28.2 55f13c92defb1 33.4MB
registry.aliyuncs.com/google_containers/kube-proxy v1.28.2 c120fed2beb84 24.6MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.28.2 7a5d9d67a13f6 18.8MB
registry.aliyuncs.com/google_containers/pause 3.9 e6f1816883972 322kB
下载flannel网络插件的镜像,与已经存在的集群节点使用的版本一样即可
[root@node-3 ~]# ctr -n=k8s.io image pull docker.io/flannel/flannel:v0.25.7
[root@node-3 ~]# ctr -n=k8s.io image pull docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2
[root@node-3 ~]# crictl image ls
IMAGE TAG IMAGE ID SIZE
docker.io/flannel/flannel-cni-plugin v1.5.1-flannel2 962fd97b50f9c 10.9MB
docker.io/flannel/flannel v0.25.7 bc5476d21c449 83.9MB
6.master节点重新生成token
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.209.131:6443 --token mi9eh2.i78xiyfr7x4aazof --discovery-token-ca-cert-hash sha256:f9d9a1d2f7ac029ee67f26d1d58719b89469f4271326b4350b826c4dd46df146
node3加入集群
[root@node-3 ~]# kubeadm join 192.168.209.131:6443 --token mi9eh2.i78xiyfr7x4aazof --discovery-token-ca-cert-hash sha256:f9d9a1d2f7ac029ee67f26d1d58719b89469f4271326b4350b826c4dd46df146
master节点检查
[root@master app1]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node Ready control-plane 96d v1.28.2
node-1 Ready <none> 96d v1.28.2
node-2 Ready <none> 96d v1.28.2
node-3 Ready <none> 3m52s v1.28.2
到此完成