kubeadm rpm包部署的k8s master节点扩容

说明:示例是kubernetesV1.23.6版本的master扩容,kubernetes使用的是kubeadm的rpm包部署

环境之前有的是单节点master和两个ndoe,一个ingress

由于之前将master02添加到集群了,所以现在删除设置为不可调度

服务器的环境是CentOs7.8

第一步:先准备master02机器环境(最基础的环境不在冗余叙述,不是重点)

防火墙关闭,selinux设置为disabled,内核转发等功能打开,安装docker-ce 20.0.14版本,kubelet,kubectl和kubeadm版本是V1.23.6版本,各个节点hosts文件配置master02,master02配置免密登录;

第二步:如果服务器的内核比较低需要先升级一下内核,最好在大于4.0版本之上;

第三步:在master01上面查看需要的镜像,然后再借点master02上下载对应的镜像,通过杭州阿里云或者是docker hub的镜像游乐园下载官方镜像:Play with Docker,或者将master01上的镜像打包过来docker save和docker load;

此处采用的是将master01上的镜像上传到master02上,比较方便;

包括calico的网络插件也一并上传到master02上;

第四步:在master01上执行,生成配置文件;


$ kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}'> /tmp/kubeadm.yaml

上面的配置中并没有列出额外的 SAN 信息,我们要添加一个新的数据,需要在 apiServer 属性下面添加一个 certsSANs 的列表。

controlPlaneEndpoint: 192.168.66.50:6443

apiServer:

certSANs:

- master01

- master02

- 192.168.66.50

- 192.1568.66.55

extraArgs:

authorization-mode: Node,RBAC

timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta3

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns: {}

etcd:

local:

dataDir: /var/lib/etcd

imageRepository: k8s.gcr.io

controlPlaneEndpoint: 192.168.66.50:6443

kind: ClusterConfiguration

kubernetesVersion: v1.23.6

networking:

dnsDomain: cluster.local

podSubnet: 10.42.0.0/16

serviceSubnet: 10.96.0.0/12

scheduler: {}

生成配置文件这种方法添加扩展master节点,我始终不成功,不知道什么原因,添加的master02节点作为集群的node节点,而不是controller节点存在(自己琢磨应该是参数问题);

还可以使用命令直接编辑添加参数;

# kubectl edit cm kubeadm-config -n kube-system

第五步:移除apiserver的证书,在master01上面执行;

#mv /etc/kubernetes/pki/apiserver.{crt,key} /tmp/

第六步:使用kubnadm命令生成新的apiserver证书,在master01上面执行;

# kubeadm init phase certs apiserver --config /tmp/kubeadm.yaml

第七步:重启apiserver容器,在master01上面执行;

docker kill $(docker ps | grep apiserver | grep -v pause | awk '{print $1}')

查看证书使用openssl命令;

# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text

第八步:将master01上的证书同步到master02上面;

# cd /etc/kubernetes/pki/

# scp ca.* master02:/etc/kubernetes/pki/

# scp sa.* master02:/etc/kubernetes/pki/

# scp front-proxy-ca.* master02:/etc/kubernetes/pki/

# scp ./etcd/ca.* master02:/etc/kubernetes/pki/etcd/

# scp ../admin.conf master02:/etc/kubernetes/

第十步:添加控制平面

将集群的证书上传到集群中,供其他控制节点使用(在master01上完成):

# kubeadm init phase upload-certs --upload-certs

生成token(master01上面完成):

# kubeadm token create --print-join-command

master02加入集群(在master02上面完成);

在master02加入集群之前先要保证master02上面的kubelet可以正常启动,否则会报错;

# kubeadm join 192.168.66.50:6443 --token h305n1.vpc223usk7yze0fm --discovery-token-ca-cert-hash sha256:5d73260eb588e2f31183bfa04b63fab12f614fa6cba8c382ceb9ea555b1e70e7 --control-plane --certificate-key 74890361532bc100970cb253c7cd6e939c985694324f5233b29c721b79e4e693

#mkdir -p $HOME/.kube

#cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#chown $(id -u):$(id -g) $HOME/.kube/config

参数:

--control-plane:是将节点加入进群,作为控制节点,如果是加入worker不需要此参数;

--certificate-key:在k8s新的版本中加入节点是需要此参数,感觉很多博客没有此参数,不知道是不是k8s版本的原因(自己猜测);

注意:

1:在kubeadm join之后/var/lib/kubelet才会存在下面的文件,在kubeadm join之前/var/lib/kubelet是没有任何文件,systemctl stat kubelet会报错,加载不到配置文件;

2:把master02在加入集群控制平面的时候可能会报错,此时需要用kubeadm reset命令回滚,此时还不够,还需要删除master02:/etc/kubernetes/下的所有文件,重新上传证书等;

第十一步:验证master02节点时候已经加入到k8s集群,以及是否作为master节点出现

#kubectl get nodes

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在CentOS 7上部署KubernetesK8S),你可以按照以下步骤进行操作: 1. 首先,升级你的CentOS 7系统的内核。你可以参考引用中的链接,了解如何升级内核。 2. 接下来,你需要安装Docker。你可以使用以下命令在CentOS 7上安装Docker: ``` yum install docker -y systemctl start docker systemctl enable docker ``` 3. 安装Kubernetes。你可以使用以下命令在CentOS 7上安装Kubernetes: ``` curl https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg -o /etc/pki/rpm-gpg/RPM-GPG-KEY-kubernetes yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet systemctl start kubelet ``` 4. 初始化Kubernetes Master节点。你可以使用以下命令来初始化Kubernetes Master节点: ``` kubeadm init --apiserver-advertise-address=<master节点的IP> ``` 5. 在初始化完成后,会输出一个加入集群的命令,你可以将该命令保存下来,以便后续加入Worker节点。 6. 安装网络插件。在Kubernetes集群中,你需要安装网络插件来实现Pod之间的通信。常用的网络插件有Flannel、Calico等,你可以根据自己的需求选择合适的插件进行安装。 7. 加入Worker节点。在Worker节点上执行1-7步骤,然后使用在第4步中输出的加入集群的命令将Worker节点加入到Kubernetes集群中。 请注意,这只是一个基本的部署过程,具体的操作步骤可能因为不同的环境和需求而有所差异。你可以参考引用和引用中的链接,了解更详细的部署步骤和脚本示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值