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

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

  1. 我们先去将我们的master节点上将我们的kubelet,kube-proxy的的bin下的目录文件拷贝到我们的新的节点上,以便于我们去扩容的时候去方便的将我们的服务使用systemd去启动管理起来。
    创建文件目标所需node的节点的目录文件
    [[email protected] ~]# mkdir -p /opt/kubernetes/{bin,ssl,cfg}
    [[email protected] ~]# mkdir -p /opt/kubernetes/{bin,ssl,cfg}
    [[email protected] ~]# scp /data/k8s/soft/kubernetes/server/bin/{kubelet,kube-proxy} [email protected]:/opt/kubernetes/bin/
    [[email protected] ~]# scp /data/k8s/soft/kubernetes/server/bin/{kubelet,kube-proxy} [email protected]:/opt/kubernetes/bin/
  2. 将我们的最初node1节点上的/opt/kubernetes下的组件进行拷贝到新的节点上
    [[email protected] ~]# scp -r /opt/kubernetes/ [email protected]:/opt
    [[email protected] ~]# scp -r /opt/kubernetes/ [email protected]:/opt
    [[email protected] ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service [email protected]:/usr/lib/systemd/system
    [[email protected] ~]# scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service [email protected]:/usr/lib/systemd/system
    去node3上操作
    把拷贝过去的文件的证书删除,这是node1的证书,我们需要重新生成
    [[email protected] ~]# cd /opt/kubernetes/ssl/
    [[email protected] ssl]# ls
    kubelet-client-2019-11-07-14-37-36.pem kubelet-client-current.pem kubelet.crt kubelet.key
    [[email protected] ssl]# rm -rf
    Node4上的也是一样删除
    [[email protected] ~]# cd /opt/kubernetes/ssl/
    [[email protected] ssl]# ls
    kubelet-client-2019-11-07-14-37-36.pem kubelet-client-current.pem kubelet.crt kubelet.key
    [[email protected] ssl]# rm -rf

修改ip ,找到配置文件把ip上改成第三个node,也就是本身的node
[[email protected] cfg]# grep 23 *
kubelet:--hostname-override=192.168.30.23 \
kubelet.config:address: 192.168.30.23
kube-proxy:--hostname-override=192.168.30.23 \

这个和扩容第4个node节点都是一样的
扩容的时候记得这里是需要docker环境的,需要安装一下docker-ce
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# docker -v
Docker version 19.03.4, build 9013bf583a
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# docker -v
Docker version 19.03.4, build 9013bf583a
另外就是需要etcd的启动文件。也拷贝过来,然后重启
[[email protected] ~]# scp -r /opt/etcd/ [email protected]:/opt
[[email protected] ~]# scp -r /opt/etcd/ [email protected]:/opt
把这些都修改为25主机的IP之后启动
[[email protected]]# systemctl restart kubelet
[[email protected] cfg]# systemctl restart kube-proxy.service
[[email protected] cfg]# ps -ef |grep kube
root 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.0
root 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.kubeconfig
root 86923 66523 0 21:28 pts/1 00:00:00 grep --color=auto kube

查看到master节点又有新的节点加入
[[email protected] ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo 90s kubelet-bootstrap Pending
node-csr-xLNLbvb3cibW-fyr_5Qyd3YuUYAX9DJgDwViu3AyXMk 31m kubelet-bootstrap Approved,Issued

颁发证书
[[email protected] ~]# kubectl certificate approve node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo
certificatesigningrequest.certificates.k8s.io/node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo approved
[[email protected] ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr-eH_jPNUBXJF6sIii9SvNz9fW71543MLjPvOYWeDteqo 3m18s kubelet-bootstrap Approved,Issued
node-csr-xLNLbvb3cibW-fyr_5Qyd3YuUYAX9DJgDwViu3AyXMk 33m kubelet-bootstrap Approved,Issued
查看node节点状态
[[email protected] ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.30.23 Ready <none> 25m v1.15.1
192.168.30.24 Ready <none> 51s v1.15.1
192.168.30.25 Ready <none> 25m v1.15.1
192.168.30.26 Ready <none> 51s v1.15.1

第二步:
打通容器之间的网络通信环境,这里我使用的是flannel进行管理
准备docker环境,这里我们之前是准备好的,但是我们还是需要给他们去分配一个子网,flanneld和docker分配要一个子网里面
给新加入的节点部署flannel,将部署的文件拷贝过去
[[email protected] ~]# scp /usr/lib/systemd/system/{flanneld,docker}.service [email protected]:/usr/lib/systemd/system
[[email protected] ~]# scp /usr/lib/systemd/system/{flanneld,docker}.service [email protected]:/usr/lib/systemd/system

去node1上指定一个我们的node
[[email protected] ~]# ./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文件拷贝到新的节点上
[[email protected] ~]# cd /opt/kubernetes/cfg/
[[email protected] cfg]# ls
bootstrap.kubeconfig flanneld kubelet kubelet.config kubelet.kubeconfig kube-proxy kube-proxy.kubeconfig
[[email protected] cfg]# scp flanneld [email protected]:/opt/kubernetes/cfg/
[[email protected] cfg]# scp flanneld [email protected]:/opt/kubernetes/cfg/
重启新的节点
查看网络是否与docker同一网段
[[email protected] ~]# ip a
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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 forever
6: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

[[email protected] ~]# systemctl start flanneld
[[email protected] ~]# systemctl restart docker
[[email protected] ~]# ip a
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> 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 forever
6: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
并测试与其他节点的容器是否都能共享各个节点的网络环境
[[email protected] ~]# kubectl exec -it nginx-deployment-7b8677db56-wkbzb /bin/sh
ping 172.17.79.2
PING 172.17.79.2 (172.17.79.2): 56 data bytes
64 bytes from 172.17.79.2: icmp_seq=0 ttl=62 time=0.703 ms
64 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 loss
round-trip min/avg/max/stddev = 0.459/0.581/0.703/0.122 ms
ping 172.17.40.3
PING 172.17.40.3 (172.17.40.3): 56 data bytes
64 bytes from 172.17.40.3: icmp_seq=0 ttl=62 time=0.543 ms
64 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 loss
round-trip min/avg/max/stddev = 0.404/0.474/0.543/0.070 ms
ping 172.17.6.3
PING 172.17.6.3 (172.17.6.3): 56 data bytes
64 bytes from 172.17.6.3: icmp_seq=0 ttl=62 time=0.385 ms
64 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 loss
round-trip min/avg/max/stddev = 0.323/0.354/0.385/0.031 ms
测试成功都能连通

原文地址:https://blog.51cto.com/14143894/2448593

时间: 2024-10-29 12:10:24

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

k8s集群之master节点部署

apiserver的部署 api-server的部署脚本 [[email protected] k8s]# cat apiserver.sh #!/bin/bash MASTER_ADDRESS=$1 主节点IP ETCD_SERVERS=$2 etcd地址 cat <<EOF >/opt/kubernetes/cfg/kube-apiserver KUBE_APISERVER_OPTS="--logtostderr=true \--v=4 \--etcd-servers=${

centos7环境部署ES集群(3节点)

此文档针对es在centos7环境3节点部署,3节点ip分别为:172.16.10.102.172.16.10.103,172.16.10.104一.增加host每个节点下增加host配置172.16.10.102 HadoopMaster172.16.10.103 HadoopSlave1172.16.10.104 HadoopSlave2二.然后下载es安装包cd /opt wget https://artifacts.elastic.co/downloads/elasticsearch/e

kubernetes生态--交付prometheus监控及grafana炫酷dashboard到k8s集群

由于docker容器的特殊性,传统的zabbix无法对k8s集群内的docker状态进行监控,所以需要使用prometheus来进行监控: 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本. 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prom

使用Rancher Server部署本地多节点K8S集群

当我第一次开始我的Kubernetes之旅时,我一直在寻找一种设置本地部署环境的方式.很多人常常会使用minikube或microk8s,这两者非常适合新手在单节点集群环境下进行操作.但当我已经了解了基础知识之后,这两者显然不太够用,我需要进一步寻找能够运行本地多节点集群.与生产环境更相似的平台.为此,我查阅了许多参考资料,最后我找到了Rancher Server.接下来,我要介绍我是如何设置我的本地K8S多节点集群的.  准备master节点和worker节点的虚拟机  上图显示了集群的架构,

jinkens+gitlab针对k8s集群实现CI/CD

一.环境准备 k8s集群环境(我这里是三台的K8s集群): 单独一台docker服务器,主要用于向私有仓库上传镜像,Jenkins和gitlab也部署在这台服务器: 上述环境共计服务器4台,均指向同一个私有仓库,以便共享docker镜像: 服务器IP依次为192.168.20.2.20.3.20.4.20.5(前三个IP为K8s集群中的节点) Jenkins采用war包的方式部署,需要用到tomcat环境,自行参考博文,进行部署:其他环境部署可以参考以下博文:Tomcat安装及优化配置:Dock

将 master 节点服务器从 k8s 集群中移除并重新加入

背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登录另外一台 master 节点将要改名的 master 节点移出集群. kubectl drain blog-k8s-n0 kubectl delete node blog-k8s-n0 登录已退出集群的 master 服务器重置 kubelet 配置并重新加入集群. kubeadm reset k

Elasticstack 5.1.2 集群日志系统部署及实践

Elasticstack 5.1.2 集群日志系统部署及实践 一.ELK Stack简介 ELK Stack 是Elasticsearch.Logstash.Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的. 可参考:https://www.elastic.co/products 二.Elasticstack重要组件 Elasticsearch: 准实时索引 Logtash: 收集数据,配置使用 Ruby DSL Kibana 展示数据,查询聚合,生成报表 Kafk

k8s实践19:kubernetes二进制部署集群v1.12升级v1.15

1.升级前的版本 [[email protected] ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", BuildDa

k8s集群一键新加node节点脚本

继推出k8s集群一键升级脚本之后有不少小伙伴还有k8s在线扩容节点的需求,所以本次波哥就又写了一个扩充节点的脚本.明天有时间我再整理一下k8s部署集群脚本,目前是固定版本的,转化成部署任意版本的脚本或许更灵活一些.这样我们部署,升级,扩容三套脚本基本就能搞定k8s日常基础需求了.波哥也可以安心的写小程序后台了. 同样只要是你使用波哥的脚本部署的k8s集群都支持一键扩容哦! 脚本介绍: 跟以往一下我们有个base.config文件,修改上面的参数.这里我写好了自己的例子还有相关注释. 配置完毕后执