kubernetes负载均衡部署

news2024/11/15 15:37:54

目录

1.新master节点的搭建

对master02进行初始化配置(192.168.88.31)

将master01的配置移植到master02

修改master02配置文件

2.负载均衡的部署

两台负载均衡器配置nginx

部署keepalived服务

所有node节点操作

总结


实验准备:

k8s集群master01:192.168.88.22	kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.88.31 
k8s集群node01:192.168.88.40	kubelet kube-proxy docker 
k8s集群node02:192.168.88.13
 
etcd集群节点1:192.168.88.22	etcd
etcd集群节点2:192.168.88.40
etcd集群节点3:192.168.88.13

负载均衡
192.168.88.50   nginx/haproxy
192.168.88.51   nginx/haproxy

架构说明:

  • node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver。简而言之,node节只能有一个master来领导。
  • kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。
  • 所以在多master节点的环境下,需要有nginx负载均衡器来进行调度,而且需要进行keepalived高可用的构建(主从两个节点) ,防止主节点宕机导致整个k8s集群的不可用。

1.新master节点的搭建

对master02进行初始化配置(192.168.88.31)

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
 
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
 
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
 
#根据规划设置主机名
hostnamectl set-hostname master02
su
#在master添加hosts(添加到整个k8s集群的主机上,保证其他主机均有该映射)
cat >> /etc/hosts << EOF
192.168.88.22 master01
192.168.88.31 master02
192.168.88.40 node01
192.168.88.13 node02
EOF
 
#调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
 
sysctl --system
 
#时间同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
 
#将时间同步的操作添加到计划性任务,确保所有节点保证时间的同步
crontab -e
*/30 * * * * /usr/sbin/ntpdate  ntp.aliyun.com
crontab -l

将master01的配置移植到master02

 ##------------ 1、 master01节点,拷贝文件到master02 -------------------------------
 #从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
 scp -r etcd/ master02:`pwd`
 scp -r kubernetes/ master02:`pwd`
 scp /usr/lib/systemd/system/kube-* master02:/usr/lib/systemd/system/
 scp -r /root/.kube/  master02:/root/​

修改master02配置文件

 ##----------- 2、 master02节点,修改配置文件并启动相关服务-------------------------
 
 #修改配置文件kube-apiserver中的IP
 vim /opt/kubernetes/cfg/kube-apiserver
 KUBE_APISERVER_OPTS="--logtostderr=true \        #输出日志,false表示标准错误不输出到屏幕,而是输出到日志中。true表示标准错误会输出到屏幕。
 --v=4 \                                          #日志级别
 --etcd-servers=https://192.168.88.22:2379,https://192.168.88.40:2379,https://192.168.88.13:2379 \      #etcd节点的IP通信地址
 --bind-address=192.168.88.31 \              #修改,当前绑定的内网IP监听的地址
 --secure-port=6443 \                                                                #基于HPPTS开放端口
 --advertise-address=192.168.88.31 \         #修改,内网通告地址,让其他node节点地址通信
 ......
 
vim kube-controller-manager
vim kube-scheduler
​
 #在 master02 节点上启动各服务并设置开机自启
 systemctl enable --now kube-apiserver.service
 systemctl enable --now kube-controller-manager.service
 systemctl enable --now kube-scheduler.service
 ​
 #将可执行文件,创建软链接
 ln -s /opt/kubernetes/bin/* /usr/local/bin/
 ​
 #查看node节点状态
 kubectl get nodes
 kubectl get nodes -o wide           #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
 #此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

2.负载均衡的部署

负载均衡
192.168.88.50   nginx/haproxy
192.168.88.51   nginx/haproxy

两台负载均衡器配置nginx

#配置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
EOF
 ​
 yum install nginx -y
 ​
 #修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
 vim /etc/nginx/nginx.conf
 events {
     worker_connections  1024;
 }
 ​
 #添加
 stream {
     log_format  main  '$remote_addr $upstream_addr - [$time_local] $status 
     $upstream_bytes_sent';
     
     access_log  /var/log/nginx/k8s-access.log  main;
 ​
     upstream k8s-apiserver {
         server 192.168.88.22:6443;    #master01
         server 192.168.88.31:6443;    #master02
     }
     server {
         listen 6443;
         proxy_pass k8s-apiserver;
     }
 }
 ​
 http {
 ......
 ​
 ​
 #检查配置文件语法
 nginx -t   
 ​
 #启动nginx服务,查看已监听6443端口
 systemctl start nginx
 systemctl enable nginx
  
 ss -lntp|grep nginx ​

部署keepalived服务

#部署keepalived服务
 yum install keepalived -y
 ​
 #修改keepalived配置文件
 vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
   router_id nginx_master
}
 
vrrp_script check_nginx {
   script "/etc/nginx/check_nginx.sh"   #指定检测脚本的路径,并且该脚本充当心跳检测脚本
}
 
vrrp_instance VI_1 {
    state MASTER        #指定状态为master节点,109为BACKUP备用节点
    interface ens33
    virtual_router_id 51
    priority 100    #108优先级为100 109为90,优先级决定着主备的位置
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.88.250
    }
    track_script {
     check_nginx        #追踪脚本的进程
    }
}
  ​
 ​
#创建nginx状态检查脚本 
vim /etc/nginx/check_nginx.sh
 
#!/bin/bash
killall -0 nginx &>/dev/null
if [ $? -ne 0 ];then
  systemctl stop keepalived
fi
 
 ​
 chmod +x /etc/nginx/check_nginx.sh  #为脚本增加执行权限
 
 ​
 #两台主备调度器启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
 systemctl start keepalived
 systemctl enable keepalived
 ip addr             #查看主节点的VIP是否生成
 ​

所有node节点操作

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig 
server: https://192.168.88.250:6443
                      
vim kubelet.kubeconfig
server: https://192.168.88.250:6443
                        
vim kube-proxy.kubeconfig
server: https://192.168.88.250:6443

//重启kubelet和kube-proxy服务
systemctl restart kubelet.service 
systemctl restart kube-proxy.service

//在 lb01 上查看 nginx 和 node 、 master 节点的连接状态
netstat -natp | grep nginx

总结

部署多master高可用

  1. 负责master组件相关的二进制文件、证书、私钥、启动参数配置文件、kubeconfig集群引导配置文件和etcd的证书、私钥文件
  2. 修改 kube-apiserver  kube-controller-manager  kube-scheduler 启动参数配置文件里的监听地址和通告地址,再依次重启服务进程
  3. 部署 nginx/haproxy 负载均衡器和 keepalived 高可用
  4. 修改 kubelet kube-proxy kubectl 的kubeconfig集群引导配置文件里的server参数都指向keepalived的VIP地址,再重启 kubelet kube-proxy 服务进程
  5. 修改其它master节点上的 kube-controller-manager  kube-scheduler 的kubeconfig集群引导配置文件里的server参数都指向各自本机的apiserver地址,再重启服务进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1467931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链】智能交易模式下的数据安全流通模型

【区块链】智能交易模式下的数据安全流通模型 写在最前面**区块链智能交易模式概述****数据安全流通的挑战****数据安全流通模型的核心要素****实现数据安全流通的区块链技术****区块链智能交易模式下数据安全流通模型的设计原则****数据安全流通模型的应用案例分析****面临的挑…

海外媒体推广通过5个发稿平台开拓国际市场-华媒舍

随着全球化的进程&#xff0c;国际市场对于企业的吸引力日益增加。进入国际市场并获得成功并非易事。海外媒体推广发稿平台成为了一种重要的营销手段&#xff0c;能够帮助企业在国际市场中建立品牌形象、传递信息和吸引目标受众。本文介绍了五个海外媒体推广发稿平台&#xff0…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式&#xff0c;它与传统的中心化云计算不同&#xff0c;将数据和计算任务分布到多个节点上&#xff0c;而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势&#xff0c;包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

2_怎么看原理图之协议类接口之UART笔记

通信双方先约定通信速率&#xff0c;如波特率115200 一开始时&#xff0c;2440这边维持高电平 1> 开始发送时&#xff0c;由2440将&#xff08;RxD0&#xff09;高电平拉低&#xff0c;并持续一个T的时间&#xff08;为了让PC机可以反应过来&#xff09;&#xff0c;T1/波…

无公网IP情况下如何远程查看本地群晖NAS存储的文件资源

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

提示工程(Prompt Engineering)、微调(Fine-tuning) 和 嵌入(Embedding)

主要参考资料&#xff1a; 还没搞懂嵌入&#xff08;Embedding&#xff09;、微调&#xff08;Fine-tuning&#xff09;和提示工程&#xff08;Prompt Engineering&#xff09;&#xff1f;: https://blog.csdn.net/DynmicResource/article/details/133638079 B站Up主Nenly同学…

XUbuntu22.04之解决:systemd-journald占用cpu过高问题(二百一十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2024如何恢复旧版的Chrome的主题样式

起因 chrome 更新版本之后的主题样式变成了浅紫色的页签卡样式&#xff0c;感觉很不习惯&#xff0c;也很不喜欢 如何换回旧版主题 通过主题商店&#xff0c;安装旧版本的主题 主题商店搜索下面&#xff0c;或着直接访问下面的地址 Chrome Original White Theme https://…

【原理图专题】OrCAD Capture原理图属性过滤器

在使用Orcad Capture CIS进行原理图设计时,在拷贝了其他器件或网络时,往往连同属性一起带入到自己的设计中。 如下所示其中很多属性是没有用到的。比如我们在导BOM或平时看的时候,根本不关注器件是哪个作者(author)画的。还有一些如Graphic等等。 原理图中属性太多,而想…

【力扣hot100】刷题笔记Day11

前言 科研不顺啊......又不想搞了&#xff0c;随便弄弄吧&#xff0c;多花点时间刷题&#xff0c;今天开启二叉树&#xff01; 94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 递归 # 最简单递归 class Solution:def inorderTraversal(self, root: TreeNode) …

DBAPI如何使用数组类型参数

DBAPI如何使用数组类型参数 需求 根据多个id去查询学生信息 API创建 在基本信息标签&#xff0c;创建参数ids &#xff0c;参数类型选择 Array<bigint> 在执行器标签&#xff0c;填写sql&#xff0c;使用in查询 select * from student where id in <foreach ope…

多种方法合并Python中的两个列表、字典

直接看例子 两个字典的合并&#xff1a;已知字典 a{a: 1, b: 2, c: 3} 和 b{d: 4, e: 5, f: 6} 合并方法1&#xff1a; dict(a, **b) 操作如下&#xff1a; >>> a{a:1,b:2,c:3} >>> b{d:4,e:5,f:6} >>> dict(a,**b) {a: 1, b: 2, c: 3, d: 4, e:…

ETA1061V50S2G 输出5V 钰泰 同步升压转换器 1MHZ

描述 ETA1061是一种高效率的同步升压转换器&#xff0c;具有超低静态电流小于1μA。如果从低电压源提供至少2W的功率&#xff0c;即在5V输出时提供0.4A的功率它还具有一个真正的切断功能&#xff0c;从输出断开输入&#xff0c;在关机和输出短路条件。这消除了对外部MOSFET及其…

【JavaEE Spring 项目】在线 OJ 系统

在线OJ系统 1. 需求2. 最终页面展示3. 需求分析4. 创建 Spring 项目5. 前后端交互接口约定6. 后端功能实现6.1 编译运行模块6.1.1 进程和线程的相关知识6.1.2 Java 中的多进程编程6.1.3 进程间通信 -- 文件6.1.4 Java中的 IO 知识6.1.5 封装创建进程执行命令工具类6.1.6 实现编…

35.搜索插入位置+825.山脉数组的峰顶索引(二分查找的应用)

一、搜索插入位置 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0;int right nums.size()-1;int mid (leftright)/2;while(left<right){if(nums[mid]<target){left mid1…

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…

杰发科技AC7801——SRAM 错误检测纠正

0.概述 7801暂时无错误注入&#xff0c;无法直接进中断看错误情况&#xff0c;具体效果后续看7840的带错误注入的测试情况。 1.简介 2.特性 3.功能 4.调试 可以看到在库文件里面有ecc_sram的库。 在官方GPIO代码里面写了点测试代码 成功打开2bit中断 因为没有错误注入&#x…

猫头虎分享已解决Bug || 服务器过热(Server Overheating):OverheatingWarning, ThermalShutdown

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

文心一言4.0 VS ChatGPT4.0 图片生成能力大比拼!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

基于Tomcat+MySQL+JAVA开发的酒店管理信息系统(无须Eclipse直接可在Tomcat中运行)

基于TomcatMySQLJAVA开发的酒店管理信息系统 项目介绍&#x1f481;&#x1f3fb; 介绍思路 1 《酒店管理系统》 资源目录介绍 2 安装配置 1&#xff09;前期准备 a、安装好MySQL数据库&#xff0c;用户名root&#xff0c;密码root b、安装配置java环境&#xff08;JDK1.7&…