K8S 集群节点扩容

发布于:2024-07-04 ⋅ 阅读:(17) ⋅ 点赞:(0)

环境说明:

主机名 IP地址 CPU/内存 角色 K8S版本 Docker版本
k8s231 192.168.99.231 2C4G master 1.23.17 20.10.24
k8s232 192.168.99.232 2C4G woker 1.23.17 20.10.24
k8s233(需上线) 192.168.99.233 2C4G woker 1.23.17 20.10.24

        当现有集群中的节点资源不够用,此时就需要给集群扩容添加机器

1. 上线节点环境准备

1.1 确定上线节点与当前集群网段一致,且可互通

        使用 ping 命令检查网络是否互通

1.2 配置hosts解析

cat >> /etc/hosts <<EOF
192.168.99.250 linux250
192.168.99.251 linux251
192.168.99.252 linux252
EOF

 1.3 关闭 swap 分区

#临时关闭
swapoff -a && sysctl -w vm.swappiness=0
#基于配置文件永久关闭
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

1.4 确保各个节点MAC地址或Product_uuid唯一

ifconfig  eth0  | grep ether | awk '{print $2}'
cat /sys/class/dmi/id/product_uuid 

温馨提示:

        一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。

        Kubernetes使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。

1.5 修改Linux内核参数调优

cat > /etc/sysctl.d/k8s.conf <<'EOF'
#允许 Linux 系统作为路由器转发 IPv4 数据包。当设置为 1 时,表示启用 IP 数据包转发功能。
net.ipv4.ip_forward = 1

#启用桥接设备在通过 iptables 进行网络过滤时的调用。
net.bridge.bridge-nf-call-iptables = 1

#启用桥接设备在通过 ip6tables 进行 IPv6 网络过滤时的调用。
net.bridge.bridge-nf-call-ip6tables = 1

#允许 Linux 在不重新引起操作的情况下卸载正在使用的挂载点。
fs.may_detach_mounts = 1

#设置内存过量分配策略。当设置为 1 时,Linux 将允许分配超过物理内存总量的虚拟内存。
vm.overcommit_memory=1

#当内存耗尽(OOM,Out-Of-Memory)时,是否触发内核崩溃。设置为 0 表示禁用这个行为。
vm.panic_on_oom=0

#设置用户可以监视的文件数量的最大值,对于文件系统监视服务很重要,比如 inotify。
fs.inotify.max_user_watches=89100

#设置系统中打开的文件描述符的最大数量。
fs.file-max=52706963

#设置系统中打开文件描述符的最大数量,和 fs.file-max 有类似的作用。
fs.nr_open=52706963

#设置连接跟踪表的最大条目数量,用于管理网络连接状态。
net.netfilter.nf_conntrack_max=2310720

#设置 TCP keepalive 超时时间(单位:秒),用于检测空闲连接是否仍然可用。
net.ipv4.tcp_keepalive_time = 600

#在认定连接失效之前,发送多少个 TCP keepalive 探测包。
net.ipv4.tcp_keepalive_probes = 3

#两次 TCP keepalive 探测之间的时间间隔(单位:秒)。
net.ipv4.tcp_keepalive_intvl =15

#设置 TIME-WAIT 状态的最大连接数。
net.ipv4.tcp_max_tw_buckets = 36000

#允许重新使用 TIME-WAIT 状态的 TCP 连接。
net.ipv4.tcp_tw_reuse = 1

#允许系统保持的最大无主 TCP 连接数。
net.ipv4.tcp_max_orphans = 327680

#设置在关闭套接字时内核应该进行多少次重试。
net.ipv4.tcp_orphan_retries = 3

#启用 TCP SYN cookies,用于防范 SYN 攻击。
net.ipv4.tcp_syncookies = 1

#设置 TCP SYN 队列的最大长度。
net.ipv4.tcp_max_syn_backlog = 16384

#设置 IPv4 连接跟踪表的最大条目数量。
net.ipv4.ip_conntrack_max = 65536

#控制着系统允许的未完成的 TCP 握手队列的最大长度
net.ipv4.tcp_max_syn_backlog = 16384

#禁用 TCP 时间戳,可能用于防范某些攻击。
net.ipv4.tcp_timestamps = 0

#设置系统级别的最大并发连接数,影响 TCP 和 UDP 套接字的 listen 函数的 backlog 参数的默认值。
net.core.somaxconn = 16384
EOF

1.6 加载文件

sysctl --system

 1.8 禁用SELinux

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config

 1.9 修改cgroup的管理进程systemd

阿里云镜像加速

harbor私有仓库解析

修改cgroup的管理进程systemd

cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://0pcinxc2.mirror.aliyuncs.com"],
"insecure-registries": ["harbor253.bihuang.com","192.168.99.253"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重启docker
systemctl restart docker

#查看是否修改
[root@linux250 ~]# docker info | grep "Cgroup"
 Cgroup Driver: systemd
 Cgroup Version: 1

温馨提示:

        如果不修改cgroup的管理驱动为systemd,则默认值为cgroupfs,在初始化 master 节点时会失败

2. 安装必要组件

2.1 安装 docker 环境

二进制部署 docker_docker 二进制包-CSDN博客

2.2 配置K8S软件源

cat  > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

2.3 安装 kubeadm,kubectl,kubelet 软件包

[root@k8s233 ~]# yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 

2.4 启动kubelet服务

        若服务启动失败时正常现象,其会自动重启,初始化集群后恢复

systemctl enable --now kubelet
systemctl status kubelet

3. 在 master 节点创建 token

3.1 创建一个永不过期的 token,并打印加入集群命令

[root@k8s231 /app/manifests/sts]# kubeadm token create --print-join-command bihuan.aaaaabbbbbcccccd --ttl 0

#指定时间 0 为永不过期
--ttl 

#生成的值
kubeadm join 192.168.8.246:6443 --token bihuan.aaaaabbbbbcccccd --discovery-token-ca-cert-hash sha256:23e378324af6e61e27df5af6a8eb56b90f1d560b40c591ea3b7d06902a0d3b8f 

注意:

        --print-join-command bihuan.aaaaabbbbbcccccd 

        这个字段的格式为 6个字符.16个字符

        可根据自己需求自定义

3.2 查看现有的token

[root@k8s231 /app/manifests/sts]# kubeadm token list
TOKEN                     TTL         EXPIRES   USAGES                   DESCRIPTION                                                EXTRA GROUPS
bihuan.aaaaabbbbbcccccd   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

4. worker 节点加入集群

#将刚刚生成的值,在需要加入集群的节点上执行
[root@k8s233 ~]# kubeadm join 192.168.8.246:6443 --token bihuan.aaaaabbbbbcccccd --discovery-token-ca-cert-hash sha256:23e378324af6e61e27df5af6a8eb56b90f1d560b40c591ea3b7d06902a0d3b8f

5. 查看节点

[root@k8s231 /app/manifests/sts]# 
[root@k8s231 /app/manifests/sts]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
k8s231   Ready    control-plane,master   59d   v1.23.17
k8s232   Ready    <none>                 59d   v1.23.17
k8s233   Ready    <none>                 40s   v1.23.17

6. 删除 token 

等所有节点都加入集群后,删除创建的永久token

#查看现有token
[root@k8s231 /app/manifests/sts]# kubeadm token list
TOKEN                     TTL         EXPIRES   USAGES                   DESCRIPTION                                                EXTRA GROUPS
bihuan.aaaaabbbbbcccccd   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

#删除token
[root@k8s231.oldboyedu.com ~]# kubeadm token delete bihuang