k8s--基础--6.1--环境搭建--多master高可用集群

2023-11-12

k8s–基础–6.1–环境搭建–多master高可用集群


前提

使用root用户

1、机器

主机名 IP 说明
master1 192.168.187.154 2核4G,硬盘20G,核数最小要求是2
master2 192.168.187.155 2核4G,硬盘20G,核数最小要求是2
master3 192.168.187.156 2核4G,硬盘20G,核数最小要求是2
node1 192.168.187.157 2核4G,硬盘20G,核数最小要求是2

2、公共配置

所有机器都要做

2.1、修改主机名

hostnamectl set-hostname master1
hostnamectl set-hostname master2
hostnamectl set-hostname master3
hostnamectl set-hostname node1

2.2、配置hosts文件

cat >> /etc/hosts  <<EOF
192.168.187.154   master1
192.168.187.155   master2
192.168.187.156   master3
192.168.187.157   node1
EOF

2.3、安装kubeadm和kubelet

# 安装kubeadm和kubelet,kubeadm和kubelet版本一定要一致
yum  -y  install kubelet-1.18.2  kubeadm-1.18.2  kubectl-1.18.2  --disableexcludes=kubernetes 
# 查看版本
kubeadm   version
# 查看版本
kubelet --version

# 开机启动
systemctl enable kubelet

在这里插入图片描述

2.3.1、解决kubeadm自动安装高版本问题

在这里插入图片描述

重新安装对应的kubelet版本

yum -y remove kubelet
yum  -y  install kubelet-1.18.2  kubeadm-1.18.2  kubectl-1.18.2  --disableexcludes=kubernetes 

# 查看版本
kubeadm   version
# 查看版本
kubelet --version

在这里插入图片描述

2.4、安装镜像

2.4.1、安装资料

在这里插入图片描述

2.4.2、安装镜像

docker load -i 1-18-kube-apiserver.tar.gz
docker load -i 1-18-kube-scheduler.tar.gz
docker load -i 1-18-kube-controller-manager.tar.gz
docker load -i 1-18-pause.tar.gz
docker load -i 1-18-cordns.tar.gz
docker load -i 1-18-etcd.tar.gz
docker load -i 1-18-kube-proxy.tar.gz

在这里插入图片描述

2.4.3、镜像版本

k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0 
k8s.gcr.io/coredns:1.6.7
k8s.gcr.io/kube-apiserver:v1.18.2
k8s.gcr.io/kube-controller-manager:v1.18.2
k8s.gcr.io/kube-scheduler:v1.18.2
k8s.gcr.io/kube-proxy:v1.18.2

3、部署keepalived+lvs

在各master节点操作

3.1、下载keepalived

yum install libnl* popt* -y
yum install -y socat keepalived ipvsadm conntrack


3.2、修改配置文件

vim /etc/keepalived/keepalived.conf

3.2.1、master1 配置

# 全局定义块 
global_defs {
	# 路由器标识,可以改,默认为本地主机名。故障发生时,邮件通知会用到。
	# 在局域网内应该是唯一的,注意和backup节点区分开。
   router_id LVS_DEVEL
}
# 定义一个虚拟路由器的实例,实例名称VI_1
vrrp_instance VI_1 {
	# 状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
    state BACKUP
	# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
    nopreempt
	# 对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
    interface ens32
	# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,
	# 而且这个虚拟ID还是虚拟MAC最后一段地址的信息,取值范围0-255
	# 同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
    virtual_router_id 80
	# 优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高。
    priority 100
	# MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    advert_int 1
	# 验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS.
	# auth_pass 1111   验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
	# 虚拟VIP地址,可以有多个地址,每个地址占一行,不需要子网掩码
	# 同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
    virtual_ipaddress {
		# IP/掩码 dev 配置在哪个网卡
        192.168.187.160
    }
}
# 定义LVS集群服务,名称可以是IP+PORT,也可以是fwmark 数字,也就是防火墙规则 
virtual_server 192.168.187.160 6443 {
	# 健康检查时间间隔,单位:秒 
    delay_loop 6
	# 负载均衡调度算法,互联网应用常用方式为wlc或rr 
    lb_algo loadbalance
	# 负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。 
    lb_kind DR
	# 子网掩码,这个掩码是VIP的掩码
    net_mask 255.255.255.0
	# http服务会话保持时间,单位:秒 
    persistence_timeout 0
	# 转发协议,分为TCP和UDP两种
    protocol TCP
	# 真实服务器IP和端口,可以定义多个 
    real_server 192.168.187.154 6443 {
		# 负载权重,值越大,转发的优先级越高 
        weight 1
		# SSL_GET方法去健康检查 
        SSL_GET {
			# 检测URL
            url {
				# 具体检测哪一个URL
				path /healthz
				# 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
				status_code 200
            }
			
            # 连接超时时间
            connect_timeout 3
			# 服务连接失败重试次数 
            nb_get_retry 3
			# 重试连接间隔,单位:秒
            delay_before_retry 3
        }
    }
    real_server 192.168.187.155 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.187.156 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

3.2.2、master2 配置

global_defs {
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface ens32
    virtual_router_id 80
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.187.160
    }
}
virtual_server 192.168.187.160 6443 {
    delay_loop 6
    lb_algo loadbalance
    lb_kind DR    net_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.187.154 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.187.155 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.187.156 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

3.2.3、master3 配置

global_defs {
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface ens32
    virtual_router_id 80
    priority 30
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.187.160
    }
}
virtual_server 192.168.187.160 6443 {
    delay_loop 6
    lb_algo loadbalance
    lb_kind DR
    net_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.187.154 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.187.155 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.187.156 6443 {
        weight 1
        SSL_GET {
            url {
              path /healthz
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

3.3、启动keepalived

3.3.1、顺序master1->master2->master3 启动keepalived

# 加入开机启动 keepalived
systemctl enable keepalived  
# 启动
systemctl start keepalived  
# 状态
systemctl status keepalived

3.3.2、查看是否成功

ip addr

在这里插入图片描述

4、初始化k8s集群

在master1节点初始化k8s集群。

4.1、创建初始化配置文件

mkdir -p /root/k8s/

vim  /root/k8s/kubeadm-config.yaml  

内容


# api版本
apiVersion: kubeadm.k8s.io/v1beta2
# 资源类型 
kind: ClusterConfiguration
# 资源版本 
kubernetesVersion: v1.18.2
# 虚拟IP
controlPlaneEndpoint: 192.168.187.160:6443
apiServer:
 # 哪些IP生成证书
 certSANs:
 - 192.168.187.154
 - 192.168.187.155
 - 192.168.187.156
 - 192.168.187.157
 - 192.168.187.160
networking:
 # pod 的网段
 podSubnet: 10.244.0.0/16
---
# api版本
apiVersion: kubeproxy.config.k8s.io/v1alpha1
# 资源类型 
kind:  KubeProxyConfiguration
# 模式
mode: ipvs

4.2、初始化k8s集群

kubeadm init --config /root/k8s/kubeadm-config.yaml

在这里插入图片描述

kubeadm join … 这条命令需要记住,我们把k8s的master2、master3,node1节点加入到集群需要输入这条命令。

4.3、在master1节点执行如下,这样才能有权限操作k8s资源

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.4、检测上面命令是否成功

只有成功,下面的命令才有权限执行

4.4.1、获取节点

kubectl get nodes

在这里插入图片描述

4.4.2、获取pod

kubectl get pods -n kube-system

在这里插入图片描述

4.4.3、问题

上面可以看到master1的STATUS状态是NotReady,pods的cordns是pending。
这是因为没有安装网络插件,需要安装calico或者flannel。

5、安装网络插件:calico

在master1节点安装calico网络插件

5.1、安装镜像

在master1,master2,master3,node1上安装

5.1.1、安装资料

在这里插入图片描述

5.1.2、安装镜像


docker load -i cni.tar.gz
docker load -i calico-node.tar.gz
 

在这里插入图片描述

5.1.3、镜像版本

quay.io/calico/node:v3.5.3  
quay.io/calico/cni:v3.5.3   
 

5.2、上传配置文件

在master1执行

在这里插入图片描述

在这里插入图片描述

5.2.1、修改内容

在这里插入图片描述

5.3、执行操作

在master1执行

kubectl apply -f /root/k8s/calico.yaml

5.4、检测

在master1执行

kubectl get nodes
kubectl get pods -n kube-system
# 显示节点信息
kubectl get pods -n kube-system -o wide
 

在这里插入图片描述

上面可以看到master1的STATUS状态是Ready,pods的cordns是running
说明master1节点的calico安装完成

6、配置master1到各个机器的无密码登陆

  1. 目的方便复制文件
  2. 在master1操作

6.1、生成证书

cd 
ssh-keygen -t rsa

一直回车就可以
在这里插入图片描述

6.2、将公钥复制到对应的节点上

ssh-copy-id -i .ssh/id_rsa.pub root@master2
ssh-copy-id -i .ssh/id_rsa.pub root@master3
ssh-copy-id -i .ssh/id_rsa.pub root@node1

7、拷贝证书

把master1节点的证书拷贝到master2和master3上

7.1、 在master2和master3上创建证书存放目录

cd 
mkdir -p /etc/kubernetes/pki/etcd 
mkdir -p ~/.kube/

7.2、在master1节点上把证书拷贝到master2和master3

在master1上操作

scp  /etc/kubernetes/pki/ca.crt master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/ca.key master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/sa.key master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/sa.pub master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/front-proxy-ca.crt master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/front-proxy-ca.key master2:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/etcd/ca.crt master2:/etc/kubernetes/pki/etcd/
scp  /etc/kubernetes/pki/etcd/ca.key master2:/etc/kubernetes/pki/etcd/


scp  /etc/kubernetes/pki/ca.crt master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/ca.key master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/sa.key master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/sa.pub master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/front-proxy-ca.crt master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/front-proxy-ca.key master3:/etc/kubernetes/pki/
scp  /etc/kubernetes/pki/etcd/ca.crt master3:/etc/kubernetes/pki/etcd/
scp  /etc/kubernetes/pki/etcd/ca.key master3:/etc/kubernetes/pki/etcd/

8、master2和master3加入到集群

master2和master3都要执行以下操作

8.1、加入集群

kubeadm join 192.168.187.160:6443 --token tskgjy.qk0li5f4870gc41h \
--discovery-token-ca-cert-hash sha256:a5d2494e93cdea6747be7908b6bc8f76d6706569a7e34bf4af0b186d97cbae5a \
--control-plane 

–control-plane:表示加入到k8s集群的是master节点

8.2、在节点上执行如下,这样才能有权限操作k8s资源

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

8.3、查看节点信息

kubectl get nodes

在这里插入图片描述

上面图片说明master2和master3已经加入到集群

9、node1节点加入到k8s集群

在node1节点操作

9.1、加入集群

kubeadm join 192.168.187.160:6443 --token tskgjy.qk0li5f4870gc41h \
    --discovery-token-ca-cert-hash sha256:a5d2494e93cdea6747be7908b6bc8f76d6706569a7e34bf4af0b186d97cbae5a 

9.2、查看节点信息

在master1上执行

kubectl get nodes

在这里插入图片描述

说明node1节点也加入到k8s集群了

通过以上就完成了k8s多master高可用集群的搭建

10、最终节点状态

kubectl get pods -n kube-system -o wide


在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s--基础--6.1--环境搭建--多master高可用集群 的相关文章

随机推荐

  • 利用Scrum敏捷工具管理敏捷产品迭代Sprint Backlog

    什么是Sprint Backlog Sprint Backlog是Scrum的主要工件之一 在Scrum中 团队按照迭代的方式工作 每个迭代称为一个Sprint 在Sprint开始之前 PO会准备好产品Backlog 准备好的产品Backl
  • 数据本地存储方法

    存储到本地的数据类型有 数组 字典 字符串 对象类型的 1 字符串的本地存储 NSString str dsadasd NSArray arr NSSearchPathForDirectoriesInDomains NSLibraryDir
  • opencv-python中的腐蚀与膨胀函数

    1 图像的腐蚀 就像土壤侵蚀一样 这个操作会把前景物体的边界腐蚀掉 但是前景仍然是白色 这是怎么做到的呢 卷积核沿着图像滑动 如果与卷积核对应的原图像的所有像素值都是1 那么中心元素就保持原来的像素值 否则就变为零 这回产生什么影响呢 根据
  • Vision-Centric BEV Perception: A Survey (以视觉为中心的BEV感知综述)论文笔记

    原文链接 https arxiv org abs 2208 02797 1 引言 BEV表达包含了丰富的语义信息 精确定位和绝对尺度 可直接应用于下游任务如行为预测和运动规划 此外 BEV表达为融合不同视角 模态 时间和智能体的信息提供了物
  • nginx配置文件root和alias区别

    总结 alias指定的目录是准确的 root是指定目录的上级目录 并且该上级目录要含有location指定名称的同名目录 root的处理结果是 root路径 location路径 http后面的地址 alias的处理结果是 使用alias路
  • R语言的包bnlearn生成的概率图模型如何进行后续的检验和验证是否合理?有相关示例和论文吗?...

    bnlearn 包生成的概率图模型可以通过多种方法进行后续检验和验证 具体来说 可以考虑以下几种方法 对模型进行统计检验 以评估模型是否符合数据的分布 例如 可以使用Kolmogorov Smirnov检验 Lilliefors检验等 对模
  • condition update在分布式系统中设计

    condition update在分布式系统中设计 1 定义 condition update称为条件更新 用于分布式系统中数据一致性 能够保证在并发操作数据时的正确性 2 方式 1 可以通过version来保证condition upda
  • 解决pgAdmin4启动失败方法

    1 问题现象 有时pgadmin 4启动仅显示启动界面 或者 点击图标一直都没反应 启动界面用鼠标点击下就消失了 然后过很长时间就保错 the application server could not be contect 错误 比如一直出
  • python安装anaconda_安装Anaconda后,python出现import Error

    背景 Win10 VSCode下安装了Python3 6 4和一些package 有的package在site package路径下 在已经安装了Python3 6 4之后 又安装了Anaconda 安装设置都是默认的 Error出现 这时
  • qt控件学习笔记

    QToolBox控件 QToolBox控件 类似于下拉列表控件 头文件 include
  • Jenkins持续集成demo

    1 下载Jenkins的war包 官网地址 https jenkins io 点击下载 将jenkins war 部署到Tomcat中 本文使用的是Tomcat8 5 35 注意Tomcat需要配置账号密码 Tomcat7 是 manage
  • MySQL、Oracle中去重并保留最新的一条数据

    MySQL select from my table where id in select id from select id name group code max create time mt from my table group b
  • IDEA的设置

    terminal wsl2 setting gt tools gt Termianl gt shell path 填写wsl exe的绝对路 绝对路径的查找 wsl2 安装 https docs microsoft com en us wi
  • LA@向量组线性相关性

    文章目录 向量组线性相关性 线性相关 线性无关 多向量向量组线性相关 单向量向量组的线性相关性 单位向量向量组线性相关性 双向量向量组的线性相关性 双向量线性相关的几何意义 三向量线性相关的几何意义 包含零向量的向量组线性相关 概念迁移 线
  • STC89C51——中断系统

    前言 本文介绍基于常见的51单片机 即如下图的芯片 STC89C51具备5个中断源 中断源 优先级 中断请求标志位 中断允许控制位 外部中断0 0 IE0 EX0 定时器中断0 1 TF0 ET0 外部中断1 2 IE1 EX1 定时器中断
  • 2021 Web 前端热点笔试面试题总结【更新版】

    提醒 我只是答案的搬运工 如果在浏览中发现有错误 欢迎评论中提出来 我好修改 谢谢 简述异步和同步的区别 同步 浏览器访问服务器请求 用户看得到页面刷新 重新发请求 等请求完 页面刷新 新内容出现 用户看到新内容 进行下一步操作 异步 浏览
  • 指定岗位

    一 背景介绍 这里我们选择的是目前求职和招聘最常用的网站Bxxx 在采用其它方法的试验中 我们可能会遇到如下问题 不知道该怎么解析网址 自定义城市和岗位的搜索词 不知道怎么样批量爬取 这里指的是自动切页 不知道该怎么破解动态cookie的问
  • K8S 安装 Ingress Controller

    版本介绍 版本1 NGINX Ingress Controller nginx公司的nginx ingress NGINX Ingress Controller 由 F5 NGINX 开发和维护 docs nginx com 可在 GitH
  • Ubuntu命令介绍——echo

    echo是一个非常简单 直接的linux命令 将argument送出至标准输出 STDOUT 通常就是在显示器 monitor 上输出 为了更好的理解 不如先让我们跑一下 echo 命令好了 echo 你会发现只有一个空白行 然后又回到 s
  • k8s--基础--6.1--环境搭建--多master高可用集群

    k8s 基础 6 1 环境搭建 多master高可用集群 前提 使用root用户 1 机器 主机名 IP 说明 master1 192 168 187 154 2核4G 硬盘20G 核数最小要求是2 master2 192 168 187