k8s master节点高可用方案部署

这篇具有很好参考价值的文章主要介绍了k8s master节点高可用方案部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

使用的是堆叠方案,即etcd与控制平面被部署在同一节点当中,之所以最少使用三个master节点是因为ETCD的RAFT算法,集群中节点超过半数可用,集群才可用,所以一般使用奇数master节点,比如3、5等

第一步:环境准备

每台机器都做

至少2cpu,4g机器环境

关闭防火墙、关闭selinux、关闭交换分区

(1)关闭selinux,设置为disabled

sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

(2)关闭交换分区

修改配置文件/etc/fstab文件配置,注释 swap的挂在命令行,永久有效。

使用swapoff -a 命令仅临时有效,重启失效,需要手动修改配置文件。

(3)关闭防火墙

systemctl disable firewalld 禁止防火墙开机自启

systemctl stop firewalld 关闭防火墙服务

Systemctl status firewalld 查看防火墙服务

(4)修改主机名及/etc/hosts文件作为名称解析(所有节点都操作)

192.168.11.128 master01

192.168.11.129 master02

192.168.11.130 master03

192.168.11.138 node

(5)所有节点设置kube-proxy开启ipvs的前置条件

yum -y install ipvsadm ipset

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

第二步:配置yum源

配置系统yum源 每台机器都做

将系统默认的yum源文件repo移动到新目录bak下,执行下面的wget命令下载新的配置文件:

wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo

配置k8s源 每台机器都做(此处是华为云的源,可能需要手动添加$basearch)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://repo.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-$basearch

enabled=1

gpgcheck=1

repo_gpgcheck=0

gpgkey=https://repo.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://repo.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

配置docker源 每台机器都做

wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

执行命令生成yum缓存

yum clean all

yum makecache

第三步:配置系统内核参数每台机器都做

修改文件/etc/sysctl.conf

cat <<EOF>/etc/sysctl.conf

net.ipv4.ip_forward = 1

net.ipv4.conf.all.forwarding = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

执行下面的命令使其生效:

modprobe br_netfilter;sudo sysctl -p /etc/sysctl.conf

第四步:同步时间 每台机器都做

yum install ntpdate -y

ntpdate time.windows.com

或ntpdate ntp1.aliyun.com

第五步:安装docker-ce 并设置开机自启每台机器都做

yum -y install docker-ce;systemctl enable docker.service --now

第六步:创建和编辑/etc/docker/daemon.json文件

  1. 配置国内镜像源或加速,这里例子是使用163加速,不过建议去阿里官方申请自己的镜像加速地址,免费的

  1. 修改docker Cgroup Driver为systemd

创建文件:

cat <<EOF >/etc/docker/daemon.json

{

"exec-opts": ["native.cgroupdriver=systemd"],

"registry-mirrors": ["https://hub-mirror.c.163.com"]

}

EOF

(4)使得/etc/docker/daemon.json文件配置生效。

systemctl daemon-reload;systemctl restart docker

通过命令docker info查看

第七步:安装k8s工具、部署k8s快捷键、并查看版本 每台机器都做

查看可用的kubeadm版本,这里不太建议最新版

yum list --showduplicates kubeadm

我选择的是这个版本

yum -y install kubeadm-1.19.16 kubectl-1.19.16 kubelet-1.19.16

部署k8s快捷键

kubectl completion bash >/etc/bash_completion.d/kubectl;kubeadm completion bash >/etc/bash_completion.d/kubeadm

第八步:安装nginx+keepalived

说明:master01、master02、master03 nginx的配置一样,keepalived的配置也一样,只是keepalived priority的优先级不同,此处将VIP设置为与三台主机网段一致,VIP为192.168.11.200/24

nginx为源码安装,编译时加上stream模块,默认安装位置为/usr/local/nginx、默认配置文件为/usr/local/nginx/conf/nginx.conf

查看三台master主节点的nginx配置,在nginx 配置文件中http 上面配置stream 四层代理这一段

k8s master节点高可用方案部署

查看三台master节点keepalived的配置,配置文件中只有state及priority有区别,state三台分别为 MASTER BACKUP BACKUP ;priority三台分别为 100 80 70

k8s master节点高可用方案部署

第九步:K8s中的master01主机初始化

  1. 查看初始化集群需要哪些镜像

kubeadm config images list

k8s master节点高可用方案部署
  1. 使用脚本拉取镜像,脚本内容如下(根据需要修改版本即可)

vim k8s.images.pull.sh

images=(

kube-apiserver:v1.19.16

kube-controller-manager:v1.19.16

kube-scheduler:v1.19.16

kube-proxy:v1.19.16

pause:3.2

coredns:1.7.0

etcd:3.4.13-0

)

for imageName in ${images[@]} ; do

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName

docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName

done

执行脚本

bash k8s.images.pull.sh

脚本执行后,使用命令查看,发现需要镜像已经全部拉取

k8s master节点高可用方案部署

初始化init配置(master01 节点执行)

[root@master01 ~]# kubeadm init --kubernetes-version=v1.19.16 --apiserver-advertise-address=192.168.11.128 --control-plane-endpoint=192.168.11.200:16443 --image-repository k8s.gcr.io --pod-network-cidr=10.244.0.0/16 --upload-certs --v=5

解析:

apiserver-advertise-address=192.168.11.128 这里的IP地址是master01的地址。

pod-network-cidr=10.244.0.0/16 这里的IP地址是pod节点之间的地址。

image-repository k8s.gcr.io 这个是镜像地址

--control-plane-endpoint=192.168.11.200:16443 控制面板的地址,这个是必须要的,此地址是keepalived的VIP地址,端口是nginx四层代理监听的端口

如何上述命令执行成功,会在最后显示如下,会有提示加入master节点的命令与加入node节点的命令以及必须的操作。

k8s master节点高可用方案部署

在master01上根据提示内容执行命令

mkdir -p $HOME/.kube

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

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

接下来把master02、master03、node节点加入Kubernetes集群,主机加入成为master节点与node节点的指令是有区别的

执行下面命令,这个命令在上图中可以看到

[root@master02 ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g \

--discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94 \

--control-plane --certificate-key 97582818beee6cc47f4e1b7df40614bfddfc2152fffda7ceaf874e04cae3541d

[root@master02 ~]# mkdir -p $HOME/.kube

[root@master02 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master02 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@master03 ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g \

--discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94 \

--control-plane --certificate-key 97582818beee6cc47f4e1b7df40614bfddfc2152fffda7ceaf874e04cae3541d

[root@master03 ~]# mkdir -p $HOME/.kube

[root@master03 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master03 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@node ~]# kubeadm join 192.168.11.200:16443 --token qdbff7.pxt192g9owgz7g4g --discovery-token-ca-cert-hash sha256:094f007fe7600557629cae441db90f0fa97d90980badec2a4b673028a3bd9e94

使用flannel网络方案

获取下面这个文件并上传到本地(如果下载不了,可以复制内容并粘贴)

https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml

k8s master节点高可用方案部署

此时在任意一台节点上查看所有节点状态都已经是好的(到此基本集群已经部署完毕)

k8s master节点高可用方案部署

第十步、测试高可用性

因为设置的时候设置master01节点上的keepalived为master ,所以VIP192.168.11.200/24在master01上,现在查看master01的VIP,并把master01关机,master01关机以后需要等一会儿查看才能发现master 01 NotReady

k8s master节点高可用方案部署
k8s master节点高可用方案部署

在master01 NotReady的情况下,在剩下两台master02 master03任意一台均可用,实现master节点的高可用性。但是注意,必须半数以上master节点可用,3master节点至少2台master节点高可用

k8s master节点高可用方案部署

因为懒所以没有将nginx设置为开机自启,其实是需要设置开机自启的文章来源地址https://www.toymoban.com/news/detail-405046.html

到了这里,关于k8s master节点高可用方案部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

    两种部署方式: kubeadm工具部署 。Kubeadm 是一个K8s 部署工具,提供 kubeadm init 和kubeadm join,用于快速部署 Kubernetes集群。 kubeadm 工具功能: kubeadm init:初始化一个 Master 节点。 kubeadm join:将工作节点加入集群。 kubeadm upgrade:升级 K8s 版本。 kubeadm token:管理 kubeadm join 使用的令

    2024年02月12日
    浏览(33)
  • kubeadm 安装k8s集群后,master节点notready问题解决方案

    使用kubeadm 安装k8s集群后,加载calico cni 网络组件后,master节点notready问题 表现为: 使用命令查看日志:journalctl -f -u kubelet 报错如下: Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top level Burstable QOS cgroup : failed to set supported cgroup subsystems for cgroup

    2024年01月22日
    浏览(39)
  • k8s集群部署 | 三节点(复用)高可用集群过程参考

    1.1.1 实验架构图 1.1.2 系统版本说明 OS 版本:CentOS Linux release 7.9.2009 (Core) 初始内核版本:3.10.0-1160.71.1.el7.x86_64 配置信息:2C2G 150G硬盘 文件系统:xfs 网络:外网权限 k8s 版本:1.25.9 1.1.3 环境基本信息 K8s集群角色 IP地址 主机名 组件信息 控制节点1(工作节点1) 192.168.204.10 k8

    2024年02月04日
    浏览(37)
  • k8s集群删除master节点

    1.在另外的master节点执行以下命令 kubectl get node      #查看需要删除的节点名称 kubectl delete node k8s-master01  #删除名为k8s-master01的节点 2.在k8s-master01清空集群配置信息 kubeadm reset  --cri-socket=unix:///var/run/cri-dockerd.sock  #因为我使用的是1.26.0版本的k8s所以需要指定cri rm -rf /var/lib/

    2024年02月13日
    浏览(34)
  • k8s添加node节点和master节点

    版本: kubelet:v1.20.4 docker: 20.10.23 资源: cpu:8 mem:16 kernel:3.10.0-1160.71.1.el7.x86_64 镜像仓库地址: registry.cn-hangzhou.aliyuncs.com/google_containers/ 2.1)关闭防火墙 2.2)关闭selinux 3)修改内核和加载所需要的内核 2.3)准备yum源 3.1)刷新缓存安装kubeadm、kubectl、kubelet、docker-ce 3.2)设置syste

    2023年04月16日
    浏览(34)
  • 阿里云k8s容器部署consul集群的高可用方案

    原本consul集群是由三个server节点搭建的,购买的是三个ecs服务器, java服务在注册到consul的时候,随便选择其中一个节点。 从上图可以看出, consul-01有28个服务注册,而consul-02有94个服务,consul-03则是29个。 有一次发生consul集群故障,某个conusl节点挂了,导致整个的服务发现

    2024年04月14日
    浏览(85)
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

    一、docker的问世         在LXC(Linux container)Linux容器虚拟技术出现之前,业界网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。 虚拟机是什么?         虚拟机其实就是 在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

    2024年03月26日
    浏览(48)
  • k8s其他master节点加入集群命令

      kubeadm join 192.168.0.236:16443 --token 7t2weq.bjbawausm0jaxury         --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195         --control-plane --certificate-key a01487c705d04e23832dafee30b06e9ef2ed9d946e9c5c1e869d915da043b640

    2024年01月18日
    浏览(35)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(39)
  • K8s集群重启与恢复-Master节点启停

    1 应用场景 场景 :在实际工作中,可能某个 Master 节点需要维护,迁移,我们需要平滑的停止、启动该节点,尽量减少启停中对集群造成的影响 注意 : 为了确保 K8s 集群能够安全恢复,请在操作前对 K8s 数据进行备份 为了确保重启 Master 节点期间 K8s 集群能够使用,集群中

    2023年04月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包