【Kubernetes】二进制部署k8s集群(下)之多master节点负载均衡以及高可用

ops/2024/9/23 3:58:56/

!!!接着之前两篇的部署!!!

目录

一.在所有node节点上部署coreDNS

1.在所有 node 节点上操作

2.在 master01 节点上操作

二.完成master02节点的初始化操作

三.在master01节点基础上,完成master02节点部署

1.在master01 节点操作

2.在master02 节点操作

四.部署nginx做负载均衡

1.在01 节点上操作

2.在02 节点上操作

五.部署keepalived服务做k8s集群负载均衡器高可用

1.在01 节点上操作

2.在02 节点上操作

3.在01 节点上操作

4.在02 节点上操作

5.在01 节点上操作

六.修改node节点上的配置引导文件中的server对应的ip为VIP

1.node01 和node02 相同操作

2.去01 节点查看

七.所有的master节点的集群引导配置文件都指向本机apiserver的ip和端口


一.在所有node节点上部署coreDNS

1.在所有 node 节点上操作

#上传 coredns.tar 到 /opt 目录中
cd /opt
docker load -i coredns.tar

2.在 master01 节点上操作

#上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS 
cd /opt/k8s
kubectl apply -f coredns.yamlkubectl get pods -n kube-system 

二.完成master02节点的初始化操作

参考文章【Kubernetes】二进制部署k8s集群(上)之搭建单机matser和etcd集群-CSDN博客

顺便回顾一下组件部署

升级一下组件部署

master节点
master01192.168.80.101kube-apiserver kube-controller-manager kube-scheduler etcd
master02192.168.80.106
 node节点
node01192.168.80.102kubelet kube-proxy docker (容器引擎)
node02192.168.80.103kubelet kube-proxy docker (容器引擎)
etcd  cluster集群
etcd节点1192.168.80.101(mater01)etcd
etcd节点2

192.168.80.102

(node01)

etcd
etcd节点3

192.168.80.103

(node02)

etcd
负载均衡节点
nginx+keepalive01

192.168.80.104

(01)

master
nginx+keepalive02

192.168.80.105

(02)

backup

三.在master01节点基础上,完成master02节点部署

1.在master01 节点操作

//从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
scp -r etcd/ kubernetes/ master02:/optcd scp -r .kube/ master02:/rootcd /usr/lib/systemd/systemscp kube-* master02:`pwd`cd /usr/local/bin/scp kubectl master02:/usr/local/bin/

2.在master02 节点操作

修改IP
vim kube-apiserver

设置服务开机自启
systemctl enable --now kube-apiserver.service kube-controller-manager.service kube-scheduler.service
验证一下
systemctl status --now kube-apiserver.service kube-controller-manager.service kube-scheduler.service

查看node节点状态
ln -s /opt/kubernetes/bin/* /usr/local/bin/
kubectl get nodes
kubectl get nodes -o wide			#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
//此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

四.部署nginx做负载均衡

记得关闭防火墙

1.在01 节点上操作

192.168.80.104

//配置nginx的官方在线yum源,配置本地nginx的yum源
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
EOFyum install nginx -y

修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
vim /etc/nginx/nginx.conf
events {use epollworker_connections  1024;
}#添加
stream {upstream k8s-apiserver {server 192.168.80.101:6443;server 192.168.80.106:6443;}server {listen 6443;proxy_pass k8s-apiserver;}
}

//检查配置文件语法
nginx -t   //启动nginx服务,查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 

复制过去
scp nginx.conf 192.168.80.105:`pwd`

2.在02 节点上操作

192.168.80.105

其他同上

五.部署keepalived服务做k8s集群负载均衡器高可用

1.在01 节点上操作

yum install -y keepalived

创建nginx状态检查脚本
touch nginx_check.sh
chmod +x nginx_check.sh
#!/bin/bashif ! killall -0 nginx &> /dev/nullthensystemctl stop keepalived
fi

相关测试

修改keepalived配置文件vim keepalived.conf

复制到02主机上
scp keepalived.conf nginx_check.sh 192.168.80.105:`pwd`

2.在02 节点上操作

vim /etc/keepalived/keepalived.conf

3.在01 节点上操作

systemctl enable --now keepalived.serviceip a

关闭nginx服务
systemctl stop nginx

4.在02 节点上操作

systemctl enable --now keepalived.service
ip a

5.在01 节点上操作

systemctl start nginx keepalived.service

六.修改node节点上的配置引导文件中的server对应的ip为VIP

1.node01 和node02 相同操作

cd /opt/kubernetes/cfg/
[root@node01 cfg]# vim kubelet.kubeconfig 
[root@node01 cfg]# vim kube-proxy.kubeconfig 
[root@node01 cfg]# vim bootstrap.kubeconfig
systemctl restart kubelet.service kube-proxy.service

剩下两个也是一样修改成

192.168.80.100(vip地址)

2.去01 节点查看

netstat -natp | grep nginx

七.所有的master节点的集群引导配置文件都指向本机apiserver的ip和端口

在两个master节点修改
将原来的ip修改成vip地址
192.168.80.100

检察一下 
kubectl get nodeskubectl get svckubectl get cs

[root@master02 ~]# systemctl restart kube-apiserver.service 
[root@master02 ~]# systemctl restart kube-controller-manager.service 
[root@master02 ~]# systemctl restart kube-scheduler.service

到此k8s集群已经部署完毕了

终于可以使用了!!!


http://www.ppmy.cn/ops/88730.html

相关文章

Golang | Leetcode Golang题解之第306题累加数

题目&#xff1a; 题解&#xff1a; func stringAdd(x, y string) string {res : []byte{}carry, cur : 0, 0for x ! "" || y ! "" || carry ! 0 {cur carryif x ! "" {cur int(x[len(x)-1] - 0)x x[:len(x)-1]}if y ! "" {cur i…

算法通关:014_1:用栈实现队列

文章目录 题目总结代码运行结果 题目 用栈实现队列 leetcode :232 总结 时间复杂度 平均下来每个方式是O(1) 代码 class MyQueue {public Stack<Integer> in;public Stack<Integer> out;//初始化public MyQueue() {in new Stack<>();out new Stack<…

生成式人工智能(AIGC):开发者的得力助手还是职业威胁?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在当今软件开发领域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;技术正在以前所未有的方式改变着开发者的工作…

java之hashCode() 方法和 equals(Object obj) 方法之间的关系

1、 hashCode() 方法和 equals(Object obj) 在Java中&#xff0c;hashCode() 方法和 equals(Object obj) 方法之间的关系是紧密相连的&#xff0c;特别是在使用基于哈希的集合&#xff08;如 HashSet、HashMap、HashTable 等&#xff09;时。这两个方法共同决定了对象在哈希表…

arkhamintelligence 请求头加密 X-Payload 完整逆向分析+自动化解决方案

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 逆向是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出最高效的抉择又需要经验的积累。本期文章将以实战的方式,带你详细地逆向分析 arkhamintelligence 请求头加密字段 X-Payload 的…

《学会 SpringMVC 系列 · 返回值处理器》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

大数据技术原理-HDFS的安装与应用

摘要 本实验报告详细记录了“大数据技术原理”课程中的HDFS&#xff08;Hadoop分布式文件系统&#xff09;实验。实验环境基于Ubuntu操作系统&#xff0c;Hadoop框架&#xff0c;以及开发工具JDK和Eclipse。实验内容涵盖了Hadoop的启动、HDFS命令的操作&#xff0c;包括目录的…

极简聊天室-websocket版(双向通信)

我们知道WebSocket是可以双向通信的&#xff0c;把极简聊天室代码又改了一下&#xff0c;前端发信息到后端也使用websocket&#xff0c;其实代码量更少了。。。 const express require(express); const app express(); var wsServer require(express-ws)(app)var msgs[];ap…