当前位置: 首页 > news >正文

kubernetes负载均衡部署

目录

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.13etcd集群节点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
EOFsysctl --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中的IPvim /opt/kubernetes/cfg/kube-apiserverKUBE_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.servicesystemctl enable --now kube-controller-manager.servicesystemctl enable --now kube-scheduler.service​#将可执行文件,创建软链接ln -s /opt/kubernetes/bin/* /usr/local/bin/​#查看node节点状态kubectl get nodeskubectl 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.confevents {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;    #master01server 192.168.88.31:6443;    #master02}server {listen 6443;proxy_pass k8s-apiserver;}}​http {......​​#检查配置文件语法nginx -t   ​#启动nginx服务,查看已监听6443端口systemctl start nginxsystemctl enable nginxss -lntp|grep nginx ​

部署keepalived服务

#部署keepalived服务yum install keepalived -y​#修改keepalived配置文件vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_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 ens33virtual_router_id 51priority 100    #108优先级为100 109为90,优先级决定着主备的位置advert_int 1authentication {auth_type PASSauth_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 ];thensystemctl stop keepalived
fi​chmod +x /etc/nginx/check_nginx.sh  #为脚本增加执行权限​#两台主备调度器启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)systemctl start keepalivedsystemctl enable keepalivedip addr             #查看主节点的VIP是否生成​

所有node节点操作

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig 
server: https://192.168.88.250:6443vim kubelet.kubeconfig
server: https://192.168.88.250:6443vim 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地址,再重启服务进程

相关文章:

kubernetes负载均衡部署

目录 1.新master节点的搭建 对master02进行初始化配置&#xff08;192.168.88.31&#xff09; 将master01的配置移植到master02 修改master02配置文件 2.负载均衡的部署 两台负载均衡器配置nginx 部署keepalived服务 所有node节点操作 总结 实验准备&#xff1a; k8s…...

NestJS入门6:日志中间件

前文参考&#xff1a; NestJS入门1 NestJS入门2&#xff1a;创建模块 NestJS入门3&#xff1a;不同请求方式前后端写法 NestJS入门4&#xff1a;MySQL typeorm 增删改查 NestJS入门5&#xff1a;加入Swagger 1. 安装 nest g middleware logger middleware​ ​ ​ 2. lo…...

CommonJS、require、moudle实现两个文件传参

目的&#xff1a;实现两个文件传参 文件A给B传入一个参数&#xff0c;并且文件B代码执行后再传回A。 场景 拆分express项目中的app.js文件中的路由、项目越大会使app.js文件变大&#xff0c;复杂 如何使用 app.js文件 导入路由文件调用路由文件&#xff0c;调用的时候传入…...

关于php、php-fpm的解释

PHP语言是由PHP程序解释的&#xff0c;而不是由php-fpm程序解释的。 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种通用开源脚本语言&#xff0c;最初是为创建动态Web页面而设计的&#xff0c;但现在也可以用于命令行脚本编写等用途。PHP程序通常由Web服务器&…...

【CMake】(8)包含库文件

示例项目结构 假设你的项目结构如下所示: 项目根目录/ ├── CMakeLists.txt ├── include/ │ └── head.h ├── lib/ │ └── libcalc.a └── src/└── main.cpp链接库 link_directories和target_link_libraries指令用于配置和链接库文件。 link_direc…...

【 JS 进阶 】Web APIs (二)

“人生如舞台&#xff0c;每一个瞬间都是一场精彩的表演。在舞台的灯光下&#xff0c;以坚韧为舞伴&#xff0c;跳出自己的独特舞步&#xff0c;创造属于自己的绚丽人生芳华。” - 露易丝梭罗 学习会为 DOM 注册事件&#xff0c;实现简单可交互的网页特交。 事件是编程语言中的…...

解决弹性布局父元素设置高自动换行,子元素均分高度问题(align-content: flex-start)

案例&#xff1a; <view class"abc"><view class"abc-item" v-for"(item,index) in 8" :key"index">看我</view> </view> <style lang"less">.abc{height: 100px;display: flex;flex-wrap: …...

什么是负载均衡集群?

目录 1、集群是什么&#xff1f; 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡&#xff08;基于IP端口的负载均衡&#xff09; 7、七层的负载均衡&#xff08;基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…...

【es6】的新特性

声明语法 letconstclass字符串/函数/对象/数组的新语法/扩展功能模版字符串 反引号标签函数Proxy /ReflectPromiseclsss & static 静态方法 & extends 继承SetMapSymbolfor of 可迭代对象迭代器模式 通过 Symbol.interator 对外提供统一个接口外部可以通过 for...of 去…...

Java中的多线程是如何实现的?

在Java中&#xff0c;多线程的实现主要依赖于java.lang.Thread类和java.util.concurrent包中的类。以下是Java实现多线程的基本方法和概念&#xff1a; 1. **继承Thread类&#xff1a;** - 创建一个新的类继承自Thread类。 - 重写Thread类的run()方法&#xff0c;定义线…...

C++知识点总结(22):模拟算法

一、概念 模拟算法 根据题目描述进行筛选提取关键要素&#xff0c;按需求书写代码解决实际问题的算法。 二、步骤 1、提取题目的关键要素 2、根据关键要素的需求完成代码 三、关键要素 1、题目目的 2、样例的执行逻辑&#xff08;样例分析&#xff09; 3、数据范围&#xff08;…...

opengl 学习纹理

一.纹理是什么&#xff1f; 纹理是一个2D图片&#xff08;甚至也有1D和3D的纹理&#xff09;&#xff0c;它可以用来添加物体的细节&#xff1b;类似于图像一样&#xff0c;纹理也可以被用来储存大量的数据&#xff0c;这些数据可以发送到着色器上。 采样是指用纹理坐标来获取纹…...

STM32控制max30102读取血氧心率数据(keil5工程)

一、前言 MAX30102是一款由Maxim Integrated推出的低功耗、高精度的心率和血氧饱和度检测传感器模块&#xff0c;适用于可穿戴设备如智能手环、智能手表等健康管理类电子产品。 该传感器主要特性如下&#xff1a; &#xff08;1&#xff09;光学测量&#xff1a;MAX30102内置…...

高级语言期末2011级A卷

1.编写函数&#xff0c;判定正整数m和n&#xff08;均至少为2&#xff09;是否满足&#xff1a;数m为数n可分解的最小质因数&#xff08;数n可分解的最小质因数为整除n的最小质数&#xff09; 提示&#xff1a;判定m为质数且m是n的最小因数 #include <stdio.h> #include…...

SpringAMQP消息队列

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>配置文件 spring:rabbitmq:host: 172.27.99.52 # rabbitMQ的ip地址port: 5672 # 端口username: abcpa…...

二次元风格个人主页HTML源码

源码介绍 直接上传服务器压缩包解压就完事了&#xff0c;修改index.html内代码即可&#xff0c;注释写的很全&#xff0c;替换图片在文件夹img&#xff0c;只有前端&#xff0c;没有后台&#xff0c;大佬如果需要&#xff0c;可以自行添加后台。本源码非常适合个人工作室主页。…...

每日学习录

目录 [蓝桥杯 2022 省 A] 求和 题目描述 [蓝桥杯 2019 省 B] 特别数的和 题目描述 [蓝桥杯 2023 省 A] 填空问题 题目描述 [蓝桥杯 2020 省 AB1] 走方格 题目描述 [蓝桥杯 2017 省 AB] 分巧克力 [蓝桥杯 2016 省 B] 交换瓶子 题目描述 [蓝桥杯 2022 省 A] 求和 题目描…...

linux docker部署深度学习环境(docker还是conda)

在深度学习中&#xff0c;避免不了在远程服务器上进行模型的训练&#xff0c;如果直接在服务器裸机的基础环境跑显然是不可取的&#xff0c;此时搭建用于模型训练的docker环境显得尤为重要。 在深度学习中&#xff0c;避免不了在远程服务器上进行模型的训练&#xff0c;如果直…...

iOS面试:4.多线程GCD

一、多线程基础知识 1.1 什么是进程&#xff1f; 进程是指在系统中正在运行的一个应用程序。对于电脑而已&#xff0c;你打开一个软件&#xff0c;就相当于开启了一个进程。对于手机而已&#xff0c;你打开了一个APP&#xff0c;就相当于开启了一个进程。 1.2 什么是线程&am…...

云计算计算资源池与存储池访问逻辑

在云计算环境中&#xff0c;计算资源池和存储池通常是分开管理和访问的。计算资源池包含了用于运行虚拟机的 CPU、内存等计算资源&#xff0c;而存储池则提供了用于存储虚拟机镜像、数据等的存储资源。 计算资源池和存储池之间通常通过网络进行访问&#xff0c;它们之间不存在直…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...