千家信息网

生产环境二进制k8s集群扩容node节点的实践

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,K8s二进制生产环境扩容node节点由于项目微服务也是部署在k8s集群中去维护的,所以扩容node节点也是必要的联系,扩容node节点一定要保证你整个集群的容器环境的网络都是互通的,这也是很重要的一步
千家信息网最后更新 2025年12月01日生产环境二进制k8s集群扩容node节点的实践

K8s二进制生产环境扩容node节点

由于项目微服务也是部署在k8s集群中去维护的,所以扩容node节点也是必要的联系,扩容node节点一定要保证你整个集群的容器环境的网络都是互通的,这也是很重要的一步,这里我根据自己的经验去扩容,仅供参考首先我这里是安装的二进制方式去部署的k8s集群,进行扩容node的时候,也是非常方便的
扩容node节点分为两步,第一步先将我们旧的node节点上的配置先去拷贝到我们新的节点上,第二点就是将我们的容器网络环境打通这里我是直接扩容两个node节点。

第一步:

  1. 我们先去将我们的master节点上将我们的kubelet,kube-proxy的的bin下的目录文件拷贝到我们的新的节点上,以便于我们去扩容的时候去方便的将我们的服务使用systemd去启动管理起来。
    创建文件目标所需node的节点的目录文件
[root@k8s-node3 ~]# mkdir -p /opt/kubernetes/{bin,ssl,cfg}[root@k8s-node4 ~]# mkdir -p /opt/kubernetes/{bin,ssl,cfg}[root@k8s-master1 ~]# scp /data/k8s/soft/kubernetes/server/bin/{kubelet,kube-proxy} root@192.168.30.25:/opt/kubernetes/bin/[root@k8s-master1 ~]# scp /data/k8s/soft/kubernetes/server/bin/{kubelet,kube-proxy} root@192.168.30.26:/opt/kubernetes/bin/
  1. 将我们的最初node1节点上的/opt/kubernetes下的组件进行拷贝到新的节点上
    [root@k8s-node1 ~]# scp -r /opt/kubernetes/ root@192.168.30.25:/opt[root@k8s-node1 ~]# scp -r /opt/kubernetes/ root@192.168.30.26:/opt[root@k8s-node1 ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.30.25:/usr/lib/systemd/system[root@k8s-node1 ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@192.168.30.26:/usr/lib/systemd/system

去node3上操作
把拷贝过去的文件的证书删除,这是node1的证书,我们需要重新生成

[root@k8s-node3 ~]# cd /opt/kubernetes/ssl/[root@k8s-node3 ssl]# lskubelet-client-2019-11-07-14-37-36.pem  kubelet-client-current.pem  kubelet.crt  kubelet.key[root@k8s-node3 ssl]# rm -rf *Node4上的也是一样删除[root@k8s-node4 ~]# cd /opt/kubernetes/ssl/[root@k8s-node4 ssl]# lskubelet-client-2019-11-07-14-37-36.pem  kubelet-client-current.pem  kubelet.crt  kubelet.key[root@k8s-node4 ssl]# rm -rf *

修改ip ,找到配置文件把ip上改成第三个node,也就是本身的node

[root@k8s-node3 cfg]# grep 23 *kubelet:--hostname-override=192.168.30.23 \kubelet.config:address: 192.168.30.23kube-proxy:--hostname-override=192.168.30.23 \

这个和扩容第4个node节点都是一样的
扩容的时候记得这里是需要docker环境的,需要安装一下docker-ce

[root@k8s-node3 ~]# systemctl restart docker [root@k8s-node3 ~]# docker -vDocker version 19.03.4, build 9013bf583a[root@k8s-node4 ~]# systemctl restart docker [root@k8s-node4 ~]# docker -vDocker version 19.03.4, build 9013bf583a

另外就是需要etcd的启动文件。也拷贝过来,然后重启

[root@k8s-node1 ~]# scp -r /opt/etcd/ root@192.168.30.25:/opt [root@k8s-node1 ~]# scp -r /opt/etcd/ root@192.168.30.25:/opt

把这些都修改为25主机的IP之后启动

[root@k8s-node3cfg]# systemctl restart kubelet[root@k8s-node3 cfg]# systemctl restart kube-proxy.service[root@k8s-node3 cfg]# ps -ef |grep kuberoot      62846      1  0 16:49 ?        00:00:07 root      86738      1  6 21:27 ?        00:00:00 /opt/kubernetes/bin/kubelet --logtostderr=false --log-dir=/opt/kubernetes/log --v=4 --hostname-override=192.168.30.25 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet.config --cert-dir=/opt/kubernetes/ssl --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0root      86780      1 35 21:28 ?        00:00:02 /opt/kubernetes/bin/kube-proxy --logtostderr=true --v=4 --hostname-override=192.168.30.25 --cluster-cidr=10.0.0.0/24 --proxy-mode=ipvs --kubeconfig=/opt/kubernetes/cfg/kube-proxy.kubeconfigroot      86923  66523  0 21:28 pts/1    00:00:00 grep --color=auto kube

查看到master节点又有新的节点加入

[root@k8s-master1 ~]# kubectl get csrNAME                                                   AGE   REQUESTOR           CONDITIONnode-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo   90s   kubelet-bootstrap   Pendingnode-csr-xLNLbvb3cibW-fyr_5Qyd3YuUYAX9DJgDwViu3AyXMk   31m   kubelet-bootstrap   Approved,Issued

颁发证书

[root@k8s-master1 ~]# kubectl certificate approve node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqocertificatesigningrequest.certificates.k8s.io/node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo approved[root@k8s-master1 ~]# kubectl get csrNAME                                                   AGE     REQUESTOR           CONDITIONnode-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo   3m18s   kubelet-bootstrap   Approved,Issuednode-csr-xLNLbvb3cibW-fyr_5Qyd3YuUYAX9DJgDwViu3AyXMk   33m     kubelet-bootstrap   Approved,Issued

查看node节点状态

[root@k8s-master1 ~]# kubectl get nodeNAME            STATUS   ROLES    AGE   VERSION192.168.30.23   Ready       25m   v1.15.1192.168.30.24   Ready       51s   v1.15.1192.168.30.25   Ready       25m   v1.15.1192.168.30.26   Ready       51s   v1.15.1

第二步:
打通容器之间的网络通信环境,这里我使用的是flannel进行管理
准备docker环境,这里我们之前是准备好的,但是我们还是需要给他们去分配一个子网,flanneld和docker分配要一个子网里面
给新加入的节点部署flannel,将部署的文件拷贝过去

[root@k8s-node1 ~]# scp /usr/lib/systemd/system/{flanneld,docker}.service root@192.168.30.25:/usr/lib/systemd/system [root@k8s-node1 ~]# scp /usr/lib/systemd/system/{flanneld,docker}.service root@192.168.30.26:/usr/lib/systemd/system

去node1上指定一个我们的node
[root@k8s-node1 ~]# ./flannel.sh https://192.168.30.21:2379,https://192.168.30.22:2379,https://192.168.30.23:2379,https://192.168.30.24:2379,https://192.168.30.25:2379,https://192.168.30.26:2379

然后将我们的指定好的flanneld文件拷贝到新的节点上

[root@k8s-node1 ~]# cd /opt/kubernetes/cfg/[root@k8s-node1 cfg]# lsbootstrap.kubeconfig  flanneld  kubelet  kubelet.config  kubelet.kubeconfig  kube-proxy  kube-proxy.kubeconfig[root@k8s-node1 cfg]# scp flanneld root@192.168.30.25:/opt/kubernetes/cfg/ [root@k8s-node1 cfg]# scp flanneld root@192.168.30.26:/opt/kubernetes/cfg/

重启新的节点
查看网络是否与docker同一网段

[root@k8s-node3 ~]# ip a5: docker0:  mtu 1500 qdisc noqueue state DOWN group default     link/ether 02:42:97:f5:6c:cd brd ff:ff:ff:ff:ff:ff    inet 172.17.25.1/24 brd 172.17.25.255 scope global docker0       valid_lft forever preferred_lft forever6: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default     link/ether b2:1a:97:5c:61:1f brd ff:ff:ff:ff:ff:ff    inet 172.17.25.0/32 scope global flannel.1       valid_lft forever preferred_lft forever[root@k8s-node4 ~]# systemctl start flanneld[root@k8s-node4 ~]# systemctl restart docker[root@k8s-node4 ~]# ip a5: docker0:  mtu 1500 qdisc noqueue state DOWN group default     link/ether 02:42:3f:3c:a8:62 brd ff:ff:ff:ff:ff:ff    inet 172.17.77.1/24 brd 172.17.77.255 scope global docker0       valid_lft forever preferred_lft forever6: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default     link/ether 96:1c:bc:ec:05:d6 brd ff:ff:ff:ff:ff:ff    inet 172.17.77.0/32 scope global flannel.1

并测试与其他节点的容器是否都能共享各个节点的网络环境

[root@k8s-master1 ~]# kubectl exec -it nginx-deployment-7b8677db56-wkbzb /bin/shping  172.17.79.2 PING 172.17.79.2 (172.17.79.2): 56 data bytes64 bytes from 172.17.79.2: icmp_seq=0 ttl=62 time=0.703 ms64 bytes from 172.17.79.2: icmp_seq=1 ttl=62 time=0.459 ms^C--- 172.17.79.2 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max/stddev = 0.459/0.581/0.703/0.122 msping 172.17.40.3PING 172.17.40.3 (172.17.40.3): 56 data bytes64 bytes from 172.17.40.3: icmp_seq=0 ttl=62 time=0.543 ms64 bytes from 172.17.40.3: icmp_seq=1 ttl=62 time=0.404 ms^C--- 172.17.40.3 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max/stddev = 0.404/0.474/0.543/0.070 msping 172.17.6.3PING 172.17.6.3 (172.17.6.3): 56 data bytes64 bytes from 172.17.6.3: icmp_seq=0 ttl=62 time=0.385 ms64 bytes from 172.17.6.3: icmp_seq=1 ttl=62 time=0.323 ms^C--- 172.17.6.3 ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max/stddev = 0.323/0.354/0.385/0.031 ms

测试成功都能连通

节点 文件 环境 拷贝 网络 容器 集群 时候 证书 二进制 就是 目录 子网 准备 分配 服务 测试 管理 配置 生产 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 ibm服务器启动找不到光盘 山东云川互联网科技有限公司 地理信息数据库招聘 国内免费mysql数据库 重庆网络安全培训服务 网络营销对比软件开发 高斯数据库修改表名称 今年国家网络安全宣传周是 如何把云端服务器的声音 中小型企业网络安全设计需求分析 db2数据库软件 删除数据 都市之互联网科技公司 网络安全同担网络安全共享 软件开发面试自我评价 英雄联盟台服连不上服务器 登陆数据库失败是怎么回事 软件开发 解耦 服务器管理器 安装iis 廊坊市吉创网络技术有限公司 b/s数据库系统设计实例 廊坊市网络安全知识竞赛活动 数据库耕地等级 数据库国考15年四月份 中山附迸网络技术有限公司 网络安全等级保护备案受理条件 郑州为天网络技术有限公司 北京国电网络技术 网络安全技术应用试点示范申报 文献被知名数据库收录情况怎么查 纵目科技互联网金融投资
0