k8s二进制部署--多master、负载均衡、高可用

目录

1、环境准备

1.1 服务器配置

1.2 master02 节点部署

2、负载均衡部署

2.1 下载nginx

2.2 修改nginx配置文件

2.3 启动nginx

2.3.1 检查配置文件语法

2.3.2 启动nginx服务,查看已监听6443端口

3. 部署keepalived服务(nginx主机,以nginx01为例)

3.1 下载keepalived

3.2 修改keepalived配置文件

3.3 创建nginx状态检查脚本 

3.4启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)

3.5 修改node节点对接IP(node节点,以node1为例)

3.5.1 修改node节点配置文件

3.5.2 重启kubelet和kube-proxy服务

3.6 在nginx01 上查看 nginx 和 node 、 master 节点的连接状态

4、在 master01 节点上操作

4.1 查看pode、node列表

4.2 创建pod


1、环境准备

1.1 服务器配置

 

服务器主机名IP地址主要组件/说明
master01节点+etcd01节点master01192.168.80.116kube-apiserver kube-controller-manager kube-schedular etcd
master02节点master02192.168.80.115kube-apiserver kube-controller-manager kube-schedular
node01节点+etcd02节点node01192.168.80.111kubelet kube-proxy docker flannel
node02节点+etcd03节点node02192.168.80.112kubelet kube-proxy docker flannel
nginx01节点nginx01192.168.80.113keepalived负载均衡(主)
nginx02节点nginx02192.168.80.114keepalived负载均衡(备)

1.2 master02 节点部署

//从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点

scp -r /opt/etcd/ root@192.168.80.115:/opt/ 
scp -r /opt/kubernetes/ root@192.168.80.115:/opt 
scp -r /root/.kube root@192.168.80.115:/root 
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.80.115:/usr/lib/systemd/system/

//修改配置文件kube-apiserver中的IP

vim /opt/kubernetes/cfg/kube-apiserver KUBE_APISERVER_OPTS="--logtostderr=true \ 
--v=4 \ 
--etcd-servers=https://192.168.80.116:2379,https://192.168.80.111:2379,https://192.168.80.112:2379\ 
--bind-address=192.168.80.115 \  修改
--secure-port=6443 \
--advertise-address=192.168.80.115 \ ​修改

 

//在 master02 节点上启动各服务并设置开机自启

systemctl start kube-apiserver.service

systemctl enable kube-apiserver.service

systemctl start kube-controller-manager.service

systemctl enable kube-controller-manager.service

systemctl start kube-scheduler.service

systemctl enable 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节点都关联起来

2、负载均衡部署

  • 配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
  • 在nginx01和nginx02节点上操作

2.1 下载nginx

配置nginx的官方在线yum源,配置本地nginx的yum源

[root@nginx01 ~]# cat > /etc/yum.repos.d/nginx.repo << 'EOF'
> [nginx]
> name=nginx repo
> baseurl=http://nginx.org/packages/centos/7/$basearch/
> gpgcheck=0
> EOF
[root@nginx01 ~]# yum install -y nginx

2.2 修改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.80.115:6443;
    server 192.168.80.116:6443;
}
server {
    listen 6443;
    proxy_pass k8s-apiserver;
}
}

http { ......

2.3 启动nginx

2.3.1 检查配置文件语法

nginx -t

 

2.3.2 启动nginx服务,查看已监听6443端口

systemctl start nginx 
systemctl enable nginx 
netstat -natp | grep nginx

 

3. 部署keepalived服务(nginx主机,以nginx01为例)

3.1 下载keepalived

yum install keepalived -y

3.2 修改keepalived配置文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   # 接收邮件地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   # 邮件发送地址
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER	#lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP
}

#添加一个周期性执行的脚本
vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"	#指定检查nginx存活的脚本路径
}

vrrp_instance VI_1 {
    state MASTER			#lb01节点的为 MASTER,lb02节点的为 BACKUP
    interface ens33			#指定网卡名称 ens33
    virtual_router_id 51	#指定vrid,两个节点要一致
    priority 100			#lb01节点的为 100,lb02节点的为 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.80.100/24	#指定 VIP
    }
    track_script {
        check_nginx			#指定vrrp_script配置的脚本
    }
}

3.3 创建nginx状态检查脚本 

vim /etc/nginx/check_nginx.sh
#!/bin/bash
#egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID,即脚本运行的当前进程ID号
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi


chmod +x /etc/nginx/check_nginx.sh

3.4启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)

systemctl start keepalived 
systemctl enable keepalived

ip a #查看VIP是否生成

 

3.5 修改node节点对接IP(node节点,以node1为例)

3.5.1 修改node节点配置文件

修改node节点上的bootstrap.kubeconfig、kubelet.kubeconfig和kube-proxy.kubeconfig配置文件中的server为VIP

​
cd /opt/kubernetes/cfg/

vim bootstrap.kubeconfig

server: https://192.168.80.100:6443

vim kubelet.kubeconfig

server: https://192.168.80.100:6443

vim kube-proxy.kubeconfig

server: https://192.168.80.100:6443

​

 

3.5.2 重启kubelet和kube-proxy服务

systemctl restart kubelet.service 
systemctl restart kube-proxy.service

3.6 在nginx01 上查看 nginx 和 node 、 master 节点的连接状态

netstat -natp | grep nginx 

 

本地nginx监听端口为6443和80,6443负责负载均衡代理,80负责web展示服务。 VIP的6443端口分别与nginx01/nginx02相连接。 master01/master02的6443端口分别与nginx01相连接。

自此,多节点负载均衡搭建完毕。

4、在 master01 节点上操作

4.1 查看pode、node列表

[root@master02 ~]# kubectl get node

[root@master02 ~]# kubectl get pod

 

4.2 创建pod

//测试创建pod 
kubectl run nginx --image=nginx

//查看Pod的状态信息 
[root@master01 k8s]#kubectl get pods
NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          80s #创建中
sh      1/1     Running             0          157m
[root@master01 k8s]#kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          3m7s          #创建完成,运行中
sh      1/1     Running   0          159m
[root@master01 k8s]#kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE    IP              NODE             NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          4m     172.16.70.132   192.168.80.112   <none>           <none>
sh      1/1     Running   0          160m   172.16.110.2    192.168.80.111   <none>           <none>

//READY为1/1,表示这个Pod中有1个容器

//在对应网段的node节点上操作,可以直接使用浏览器或者curl命令访问
curl 172.16.70.132

//这时在master01节点上查看nginx日志
kubectl logs nginx-dbddb74b8-nf9sk

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOP for Oracle 23ai:Python 连接 Oracle 的两种方法

前情回顾 前文介绍了如何使用 python-oracledb 连接 Oracle 23ai 数据库&#xff0c;并演示了如何使用独立连接方式。 其中提到了支持两种连接池&#xff1a; DRCP 和 PRCP。 本文将对这两种连接池做具体演示。 DRCP 和 PRCP 连接池 连接池技术的优点不言而喻&#xff1a; 缩短…

selenium发展史

Selenium Core 2004 年&#xff0c;Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作&#xff0c;由于这个项目需要频繁回归&#xff0c;这导致他不得不每天做着重复且低效的工作。为了解决这个困境&#xff0c;Jason 开发了一个运行在 JavaScript 沙箱中…

Python的for循环

for循环 Python中的for循环是一种迭代循环&#xff0c;可以迭代容器中的每一个元素。 for循环结构 示例&#xff1a; users ["汤姆", "艾米", "李华"] for i in users:print(i) 其中i为临时变量&#xff0c;仅在循环中有效&#xff1b;users…

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

mysql 查询---多表设计

部分数据 1distinct去重 select distinct job from tb_emp;select * from tb_emp where id in (1,2,3); select * from tb_emp where id between 1 and 5; select * from tb_emp where name like __; #下划线匹配单个字符, %匹配任意多个字符select min(entrydate) from tb_e…

第9章.Keil5-MDK软件简介

目录 0. 《STM32单片机自学教程》专栏 9.1 主界面 9.2 文本格式编辑 9.3 代码提示&语法检测&代码模版 9.4 其他小技巧 9.4.1 TAB 键的妙用 9.4.2 快速定位函数/变量被定义的地方 9.4.3 快速注释与快速消注释 9.4.4 快速打开头文件 9.4.5 查找替换…

C++基础——继承(下)

一、继承与静态成员 基类定义了static 静态成员&#xff0c;则整个继承体系里面只有一个这样的成员。无论派生出多少个子 类&#xff0c;都只有一个 static 成员实例 。 class person { public:person(const char* name "lisi"):_name(name){} public:string _name;…

Trieve实践:好用功的开源RAG

目录 RAG概述 RAG架构 Trieve Trieve介绍 Trieve使用 初始化 自行搭建RAG Trieve是什么&#xff0c;RAG是什么&#xff0c;本文来带你了解。其实在很多产品应用里面都会有RAG,比如ai客服&#xff0c;针对性的智能问答&#xff0c;都是基于RAG实现的 RAG概述 RAG 是一种…

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 &#xff08;窗口需处于激活状态&#xff09;(2)、监听全局按键事件 &#xff08;窗口无需处于激活状态&#xff09;(3)、补充&#xff1a;自定义窗口菜单快捷…

力扣刷题 day2

快乐数 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;   图: java // 快乐数 --> 19 > 1^2 9 ^2 82 > 82 > 8 ^ 2 2 ^ 2 ......public boolean isHappy(int n) {// 使用快慢指针int slow n, fast getSum(n);while (slow ! fast) {slow getSum(slo…

十大排序算法之->归并排序

一、归并排序简介 归并排序是一种基于分治策略的有效且稳定的排序算法。归并排序由约翰冯诺伊曼提出&#xff0c;是计算机科学中一个非常基础且历史悠久的算法。 归并排序利用分治法的策略&#xff0c;将一个大的数组拆分成几个小的子数组&#xff0c;这些子数组各自独立地排…

2024中国应急(消防)品牌巡展西安站成功召开!惊喜不断

消防品牌巡展西安站 5月10日&#xff0c;由中国安全产业协会指导&#xff0c;中国安全产业协会应急创新分会、应急救援产业网联合主办&#xff0c;陕西消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-西安站成功举办。该巡展旨在展示中国应急&#xff08;消防&am…

免费体验GPT-4o这5大功能,非常好用!

这几天&#xff0c;OpenAI发布了新的GPT版本&#xff0c;GPT-4o&#xff0c;比GPT4更加智能也更快。 据说&#xff0c;GPT-4o在文本、推理和编码智能方面实现了GPT-4 Turbo级别的性能&#xff0c;在多语言、文本、音频和视觉功能方面甚至超过了市面上所有同类产品。 有几个亮点…

树链剖分详解,看这一篇就够了

前置知识&#xff1a; 树形结构链式前向星(熟练)线段树(熟练)DFS序(熟练)LCA(了解定义) 什么是树链剖分 树链剖分其实有两种&#xff1a;重链剖分和长链剖分。重链剖分就是把儿子节点最重的儿子称为重儿子&#xff0c;把树分成若干条重链&#xff08;如图一&#xff09;&#…

雍禾植发张东宏:以诚相待毛发患者

医学道路上的奋斗往往需要坚定的信念和不懈的努力。对于张东宏医生来说&#xff0c;医学并非止步于书本知识&#xff0c;而是一次次与患者对话、一次次实操中的历练和积累。在他的成长历程中&#xff0c;医学之路如同一棵参天大树&#xff0c;每一步都是扎实的打磨&#xff0c;…

2024年CSPM考试时间线梳理!

最近后台有朋友在问今年CSPM的考试安排&#xff0c;给大家整理一下&#xff0c;需要的朋友认真查看&#xff0c;不要错过考试。2024年5月12日举行了本年度第二次CSPM3级考试~接下来的考试安排如下&#xff1a; 1&#xff09;2024年CSPM考试安排 本次考试出成绩时间——2024年6…

【RSGIS数据资源】2001-2021 年亚洲季风区主要国家作物种植制度数据集

文章目录 1. 数据集概况2. 数据格式3. 文件名命名规则4. 数据生产服务单位5. 元数据6. 数据引用与参考文献引用 1. 数据集概况 2001-2021 年亚洲季风区主要国家作物种植制度数据集&#xff08;ACIA500&#xff09;是结合MODIS 影像和现有的土地利用等多源数据&#xff0c;基于…

QT状态机1-三态循环状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【半夜学习MySQL】复合查询(含多表查询、自连接、单行/多行子查询、多列子查询、合并查询等详解)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 回顾基本查询多表查询自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询合并查询 回顾基本查询 下面使用…

使用python给图片加上文字水印

使用python给图片加上文字水印 作用效果代码 作用 给图片加上文字水印文字水印的字体&#xff0c;颜色&#xff0c;位置可自定义 效果 原图&#xff1a; 加水印后的图&#xff1a; 代码 from PIL import Image, ImageDraw, ImageFontdef add_text_watermark(input_image…