【云原生】Kubernetes二进制--多节点Master集群高可用

news2024/12/25 1:26:03

多节点Master集群高可用

    • 一、Kubernetes多Master集群高可用方案
      • 1、实现高可用方法
      • 2、多节点Master高可用的部署
    • 二、多节点Master部署
      • 1、配置master02
      • 2、修改配置文件kube-apiserver中的IP
      • 3、在 master02 节点上启动各服务并设置开机自启
    • 三、负载均衡部署
      • 1、配置nginx的官方在线yum源,配置本地nginx的yum源
      • 2、修改配置文件
    • 四、部署keepalived服务
      • 1、安装keepalive服务
      • 2、修改keepalived配置文件
      • 3、创建nginx状态检查脚本
      • 4、node节点上的bootstrap.kubeconfig、kubelet.kubeconfig、kube-proxy.kubeconfig配置文件为VIP
      • 5、重启服务
      • 6、在 ba01 上查看 nginx 和 node 、 master 节点的连接状态
    • 五、在Master01节点操作
      • 1、测试创建pod
      • 2、查看Pod的状态信息
    • 六、部署Dashboard
      • 1、Dashboard介绍
      • 2、上传 recommended.yaml 文件到 /opt/k8s 目录中
      • 3、创建service account并绑定默认cluster-admin管理员集群角色
      • 4、使用输出的token登录Dashboard
    • 总结

一、Kubernetes多Master集群高可用方案

在这里插入图片描述
作用:实现高可用
apiserver对外安全通信端口6443,对内端口8080
在这里插入图片描述

1、实现高可用方法

  • etcd:etcd群集至少是3副本,奇数台,通过raft算法,保证数据的一致性
  • node节点:承载业务,跟Master进行对接
  • master节点:高可用使用keepalived+LB方案,keepalived能够提供VIP和主备,LB实现负载均衡,使用nginx+haproxy,将master加入nginx地址池,由nginx转发到对应的apiserver,再通过schduleer调度到相应的node节点,使用轮询算法。

2、多节点Master高可用的部署

  • 从maste01复制etcd,k8s的证书,可执行文件,配置文件,master组件的服务管理文件 到 master02节点
  • 再Masters节点修改apiserver的配置,修改为自己的配置
  • 启动master相关组件
  • 部署keepalived + LB (nginx , haproxy)实现高可用 和 负载均衡
  • keepalived需要健康检查脚本来实现自动的故障切换
  • 在所有Node节点上修改 node相关组件的 Kubeconfig 文件配置 ,把对接的 server ip 指定为VIP

二、多节点Master部署

在单节点Master搭建基础之上部署在此新添加了一台master02,两台负载均衡节点

实验环境

服务器主机名IP地址主要组件
k8s集群master01 + etcd01master01192.168.10.130kube-apiserver kube-controller-manager kube-schedular etcd
k8s集群master02master02192.168.10.134kube-apiserver kube-controller-manager kube-schedular
k8s集群node01 + etcd02node01192.168.10.132kubelet kube-proxy docker flannel
k8s集群node02 + etcd03node02192.168.10.133kubelet kube-proxy docker flannel
Balanc01nginx01192.168.10.135keepalived 负载均衡(主)
Balanc02nginx02192.168.10.136keepalived 负载均衡(备)

1、配置master02

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

[root@master01 ~]#scp -r /opt/etcd/ root@192.168.10.134:/opt/
[root@master01 ~]#scp -r /opt/kubernetes/ root@192.168.10.134:/opt/
[root@master01 ~]#scp -r /root/.kube root@192.168.10.134:/root/
[root@master01 ~]#scp -r /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.10.134:/usr/lib/systemd/system/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

[root@master01 ~]#vim /opt/kubernetes/cfg/kube-apiserver 

KUBE_APISERVER_OPTS="--logtostderr=false  \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--etcd-servers=https://192.168.10.130:2379,https://192.168.10.132:2379,https://192.168.10.133:2379 \
--bind-address=192.168.10.134 \         #修改
--secure-port=6443 \
--advertise-address=192.168.10.134 \    #修改
#保存退出

在这里插入图片描述

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

[root@master02 ~]#systemctl start kube-apiserver.service 
[root@master02 ~]#systemctl enable kube-apiserver.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.

[root@master02 ~]#systemctl start kube-controller-manager.service 
[root@master02 ~]#systemctl enable kube-controller-manager.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.

[root@master02 ~]#systemctl start kube-scheduler.service 
[root@master02 ~]#systemctl enable kube-scheduler.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.

[root@master02 ~]#ln -s /opt/kubernetes/bin/* /usr/local/bin/
[root@master02 ~]#kubectl get nodes
NAME             STATUS   ROLES    AGE     VERSION
192.168.10.132   Ready    <none>   4h51m   v1.20.11

[root@master02 ~]#kubectl get nodes -o wide
NAME             STATUS   ROLES    AGE     VERSION    INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
192.168.10.132   Ready    <none>   4h52m   v1.20.11   192.168.10.132   <none>        CentOS Linux 7 (Core)   3.10.0-862.el7.x86_64   docker://23.0.5

在这里插入图片描述
在这里插入图片描述

三、负载均衡部署

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

在ba01、ba02节点上操作

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

在这里插入图片描述

2、修改配置文件

配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口

[root@ba01 ~]#vim /etc/nginx/nginx.conf
#添加
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.10.130:6443;
        server 192.168.10.134:6443; 
    }                 
    server {          
        listen 6443;
        proxy_pass k8s-apiserver;
    }
}
[root@ba01 ~]#nginx -t
[root@ba01 ~]#systemctl start nginx
[root@ba01 ~]#systemctl enable nginx
[root@ba01 ~]#ss -natp | grep nginx
另外一台机子也需要上述同样的操作就不一一截图了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、部署keepalived服务

1、安装keepalive服务

[root@ba01 ~]#yum install keepalived.x86_64 -y

2、修改keepalived配置文件

! 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  #ba01节点的为 NGINX_MASTER,ba02节点的为 NGINX_BACKUP
}
#添加一个周期性执行脚本
   vrrp_script check_nginx {
        script "/etc/nginx/check_nginx.sh"  #指定检查nginx存活的脚本路径
}
vrrp_instance VI_1 {
    state MASTER           #ba01节点为MASTER,ba02节点为BACKUP
    interface ens33        #指定网卡名称ens33
    virtual_router_id 51   #指定vrid,两个节点要一致
    priority 100           #ba01节点的为100,ba02节点的为90
    advert_int 1
authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.100/24  #指定VIP地址
    }
    track_script {
       check_nginx    #指定vrrp——script配置脚本
    }
}
#保存退出

3、创建nginx状态检查脚本

[root@ba01 ~]#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
[root@ba01 ~]#chmod +x /etc/nginx/check_nginx.sh 
[root@ba01 ~]#systemctl start keepalived.service 
[root@ba01 ~]#systemctl enable keepalived.service 
#但ba2是没有的,只有ba1挂掉之后才会到ba2上

在这里插入图片描述

4、node节点上的bootstrap.kubeconfig、kubelet.kubeconfig、kube-proxy.kubeconfig配置文件为VIP

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

[root@node02 cfg]# vim bootstrap.kubeconfig 
[root@node02 cfg]# vim kubelet.kubeconfig 
[root@node02 cfg]# vim kube-proxy.kubeconfig 
[root@node02 cfg]# systemctl restart kubelet.service 
[root@node02 cfg]# systemctl restart kube-proxy.service 

在这里插入图片描述

5、重启服务

[root@node01 cfg]# systemctl restart kubelet.service 
[root@node01 cfg]# systemctl restart kube-proxy.service 
[root@node02 cfg]#systemctl restart kubelet.service 
[root@node02 cfg]#systemctl restart kube-proxy.service

在这里插入图片描述
在这里插入图片描述

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

[root@ba01 ~]#netstat -natp |grep nginx
tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      4395/nginx: master  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4395/nginx: master  

在这里插入图片描述

五、在Master01节点操作

1、测试创建pod

[root@master01 opt]#kubectl run nginx --image=nginx

2、查看Pod的状态信息

[root@master01 ~]#kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
dns-test   1/1     Running   0          18h
nginx      1/1     Running   0          14h

在这里插入图片描述

六、部署Dashboard

1、Dashboard介绍

仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job daemonset等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

2、上传 recommended.yaml 文件到 /opt/k8s 目录中

在 master01 节点上操作

[root@master01 ~]#cd /opt/k8s/
#上传recommended.yaml文件
[root@master01 k8s]#vim recommended.yaml 
[root@master01 k8s]#kubectl apply -f recommended.yaml 

在这里插入图片描述

3、创建service account并绑定默认cluster-admin管理员集群角色

[root@master01 k8s]#kubectl create serviceaccount dashboard-admin -n kube-system

[root@master01 k8s]#kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

[root@master01 k8s]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

在这里插入图片描述
在这里插入图片描述

4、使用输出的token登录Dashboard

https://NodeIP:30001
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

master组件
1.先安装apiserver
准备组件的相关证书和私钥文件
准备bootstrap token 认证文件(给ukubelet启动时签发证书使用)
准备组件的启动配置文件
启动apiserver服务端口6443 https

2、再启动controller-manager和scheduler
准备启动配置文件
准备证书和私钥文件呢生成kubeconfig文件(用于指定对接哪个apiserver,使用什么证书认证)启动服务

3、检查组件状态
需要准备kubeconfig文件kubectl加入到集群中(指定对接哪个apiserver,使用什么证书认证)

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

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

相关文章

Google I/O 2023 大会上发布了一些令人兴奋的技术和产品,让我们一起来看看吧!

文章目录 Google I/O 2023 的主要内容- **Android 14**&#xff1a;- **Google Pixel 7**&#xff1a;- **Google Assistant**&#xff1a;- **Google Lens**&#xff1a;- **Google Cloud**&#xff1a; Google I/O 2023 大会四大主题 回顾&#xff1a;跨移动、网络、AI 和云A…

以太坊钱包私钥爆破产业链和攻击案例

一:产业链频道&#xff1a;小飞机搜索"BRUTE_FORCE_CRYPTO_WALLET" 2、github项目(有成熟的工具)GitHub - Houzich/CUDA-GPU-Brute-Force-Mnemonic-Old-Electrum-V1: CUDA-GPU-Brute-Force-Mnemonic-Old-Electrum-V1 3、揭秘以太坊 Vanity 生成器 Profanity 私钥破解…

C++学习路线-自用

C学习路线 做目录索引用&#xff0c;后续更新 初步想在学习完成后做对应的link 1、summary 参考网址 https://mp.weixin.qq.com/s/tXilzUzN7cDhnc3ztw4Vlw https://blog.csdn.net/qq_43564374/article/details/109409256 https://zhuanlan.zhihu.com/p/130364187 学习方式 看书…

景区剧本杀开发方案

景区剧本杀软件发展趋势包括以下几个方面&#xff1a; 个性化定制&#xff1a;随着用户需求的不断增加&#xff0c;景区剧本杀软件将更加注重个性化定制&#xff0c;满足不同用户的需求。 跨平台支持&#xff1a;景区剧本杀软件将逐渐实现跨平台支持&#xff0c;比如在…

经典命令--sort、uniq、tr、cut等

目录 一&#xff1a;sort--排列工具 1.sort命令介绍 2.sort命令常用选项 3.sort命令事例 二: uniq--去重工具 1.uniq命令介绍 2.uniq命令常用选项 3.uniq命令事例 4.筛选出重复3次的ip 5.将超过3次登录失败的用户加入黑名单 三&#xff1a;tr-- 替换工具 1.tr命令介绍…

10个前端开发者务必知道的JavaScript 技巧

前言 过去&#xff0c;我写了很多垃圾代码&#xff0c;现在看起来很糟糕。 当我再次看到那些代码片段时&#xff0c;我甚至怀疑自己是否适合做程序员。 所以&#xff0c;这里有 10 个我总结的JavaScript 技巧&#xff0c;可以帮助你避免编写我曾经做过的那种垃圾代码。 Prom…

提取每个汉字的首字母

1&#xff1a;在项目 POM 中 引入 汉字拼音转换JAR包 ​​​​​<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency> 2:工具类 public…

Vue项目修改页面标签

Vue项目修改页面标签 1、在 Vue CLI 创建的项目中&#xff0c;可以通过修改 public/index.html 文件来改变网页标题。 2、在 Element UI 中&#xff0c;可以通过修改 document.title 属性来改变页面的标题。以下是一个示例代码&#xff1a; export default {mounted() {// 修改…

Android 检查网络状态和监听网络状态变化

此篇存在的主要意义在于解决用户使用app中网络状态发生了变化&#xff0c;需要我们去动态监听网络连接状态&#xff08;有网、无网&#xff09;、网络类型 &#xff08;包括wifi、移动网络 -> 3G、4G等等&#xff09; 文章目录 门前授课具体实现异常场景兴趣扩展 门前授课 …

设备产线运维合集丨图扑数字孪生流水线,提升产品装配自动化效率

前言 图扑软件基于 HTML5&#xff08;Canvas/WebGL/WebVR&#xff09;标准的 Web 技术&#xff0c;满足了工业物联网跨平台云端化部署实施的需求&#xff0c;以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从 SDK 组件库&#xff0c;到 2D 和 3D 编辑&#…

类加载器和双亲委派模型

类加载机制的第一步就是“加载”&#xff0c;即将Class文件获取二进制字节流并加载到方法区中 这个“加载”动作是放在JVM 之外去实现的&#xff0c;能够让应用程序来决定如何获取所需要的类 类和类加载器 对于任意一个类&#xff0c;都必须由加载它的类加载器和这个类本身一…

数字藏品的价值和意义

2022年以来&#xff0c;数字藏品概念在国内火热起来。从年初的《关于防范 NFT相关金融风险的倡议》到8月份央行数字货币 DCEP的正式面世&#xff0c;从中国香港首个“NFT”艺术品在香港拍卖市场成交到国内多家互联网大厂推出数字藏品平台&#xff0c;越来越多的企业开始试水数字…

Spring Cloud Alibaba--Nacos服务注册和配置中心

文章目录 一、什么是Nacos1.1、Nacos的由来1.2、Nacos的特性1.3、Nacos的下载和启动 二、Nacos服务注册2.1、代码示例2.2、各种注册中心的比较CAP定理多个注册中心比较 三、Nacos配置中心3.1、Nacos配置管理3.2、代码示例3.3、多环境多项目管理3.3.1、命名空间3.3.2、Group分组…

递归到动态规划:空间压缩技巧-纸币问题的有限张数

这个题是我们纸币问题的第三题 题目大意&#xff1a; arr是货币数组&#xff0c;其中的值都是正数。再给定一个正数aim。 每个值都认为是一张货币&#xff0c; 认为值相同的货币没有任何不同&#xff0c; 返回组成aim的方法数 例如&#xff1a;arr {1,2,1,1,2,1,2}&#xff0…

【C】模拟实现atoi,atof函数

目录 atoi函数 atof函数 模拟实现atoi&#xff0c;atof函数 1、atoi模拟实现 2、atof模拟实现 3、测试案例代码 atoi函数 atoi函数是将字符串转换成整数 函数头文件&#xff1a;#include <stdlib.h> 函数原型&#xff1a;int atoi(const char *str); 参数&…

利用结构相似性做单细胞多模态分析

多模态单细胞测序技术从多层基因组数据中提供了丰富的细胞异质性信息。然而&#xff0c;在没有正确消除模态偏差的情况下去分析联合空间&#xff0c;往往会得到比单模态分析更差的聚类结果。如何有效利用多组学额外信息来描绘细胞状态并识别有意义的信号仍然是一个重大的挑战。…

华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记

请从官网下载 TD4VM 技术参考手册&#xff0c;地址如下&#xff1a; TDA4VM 技术参考手册地址 VOS 作为静态库移植到TDA4VM/VH 芯片的 TI RTOS SDK 中 VOS 移植到 mcusw/mcal_drv/mcal/vos&#xff0c;如下&#xff1a; vos 测试应用 在 mcusw/mcuss_demos/vos_test_app …

Shell脚本之正则表达式

目录 一、正则表达式的介绍 1&#xff09;正则表达式的组成 2&#xff09;正则表达式和通配符的区别 二、基础正则表达式 1&#xff09;转义字符的运用 将特殊含义的字符转换为普通字符的含义 将普通字符转换为特殊作用的字符 2&#xff09;基础正则表达式实际应用 查…

C++ | 结构体及大小计算

C结构体及大小计算 文章目录 C结构体及大小计算struct 和 class 区别字节对齐默认对齐方式 位域使用#pragma pack(n)结构体中有结构体Reference struct 和 class 区别 结构体&#xff08;struct&#xff09;和类&#xff08;class&#xff09;有点像&#xff0c;均是定义一个数…

Activi7工作流经典实战(附:常用流程流转代码片段)

一、Activiti7介绍 Activiti正是目前使用最为广泛的开源工作流引擎。Activiti的官网地址是 https:// www.activiti.org 历经6.x和5.x两个大的版本。 1. Activiti工作流引擎 他可以将业务系统中复杂的业务流程抽取出来&#xff0c;使用专门的建模语言BPMN2.0进行定义。业务流…