二进制部署k8s集群 部署高可用master节点

目录

本次部署的环境

一、master02 节点部署

二、负载均衡部署

安装nginx服务

部署keepalive服务

修改node节点上的配置文件

在master节点上创建pod

三、部署 Dashboard

 二进制部署k8s集群部署的步骤总结

(1)k8s的数据存储中中心的搭建 etcd

(2)单机master节点的部署

(3)k8s的node节点的部署

(4)高可用k8s的搭建

        在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪,所以成熟的k8s的集群一定要考虑到master的高可用。)

        企业的运用一般至少存在两台master及其以上的部署(一般都是三台),本次将根据前面的部署,再添加一台master(三个master或者更多,也可以根据本次添加步骤重复添加)。添加master后,我们会将借助keepalived+nginx的架构,来实现高可用的master【也可以使用haproxy+keepalived或则是keepalived+lvs(不推荐,步骤过于复杂)】

除此之外,我们还将搭建出k8s的ui管理界面

本次部署的环境

mater节点
mater01192.168.80.7kube-apiserver kube-controller-manager kube-scheduler 
master02192.168.80.17kube-apiserver kube-controller-manager kube-scheduler 
node节点
node01192.168.80.11kubelet kube-proxy docker (容器引擎)
node02192.168.80.12kubelet kube-proxy docker (容器引擎)
etcd  cluster集群
etcd节点1192.168.80.7(mater01)etcd
etcd节点2192.168.80.11(node01)etcd
etcd节点3192.168.80.12(node02)etcd
load balance(高可用调度器)
主调度器192.168.80.13nginx,keepalived
从调度器192.168.80.16nginx,keepalived

架构说明:

        node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver。简而言之,node节只能有一个master来领导。

        kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。

        所以在多master节点的环境下,需要有nginx负载均衡器来进行调度,而且需要进行keepalived高可用的构建(主从两个节点) ,防止主节点宕机导致整个k8s集群的不可用。

一、master02 节点部署

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

scp -r /opt/etcd/ root@192.168.80.17:/opt/
scp -r /opt/kubernetes/ root@192.168.80.17:/opt/
scp -r /root/.kube root@192.168.80.17:/root
scp -r /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.80.17:/usr/lib/systemd/system/
修改master02配置文件kube-apiserver中的IP
vim /opt/kubernetes/cfg/kube-apiserver

KUBE_APISERVER_OPTS="--logtostderr=false  \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--etcd-servers=https://192.168.80.7:2379,https://192.168.80.11:2379,https://192.168.80.12:2379 \
--bind-address=192.168.80.17 \
--secure-port=6443 \
--advertise-address=192.168.80.17 \
......

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

systemctl enable --now kube-apiserver.service

systemctl enable --now kube-controller-manager.service

systemctl enable --now 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服务

//配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
##### 在lb01、lb02节点上操作 ##### 
//配置nginx的官方在线yum源,配置本地nginx的yum源 (注意 epel源下载的 nginx 不支持stream)
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.80.7:6443;
        server 192.168.80.17:6443;
    }
    server {
        listen 6443;
        proxy_pass k8s-apiserver;
    }
}

http {
......


//检查配置文件语法
nginx -t   

//启动nginx服务,查看已监听6443端口
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 

部署keepalive服务

//部署keepalived服务

yum install keepalived -y

//修改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_skip_check_adv_addr
   #vrrp_strict                #这里要注释
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#添加一个周期性执行的脚本
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配置的脚本
    }
}



//创建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

scp /etc/keepalived/keepalived.conf root@192.168.80.16:/etc/keepalived/keepalived.conf

scp /etc/nginx/check_nginx.sh root@192.168.80.16:/etc/nginx/check_nginx.sh


注意另外一台keepalive配置也要进行修改(需改内容已经用注释提示)

//启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
systemctl start keepalived
systemctl enable keepalived
ip a                #查看VIP是否生成

关闭主节点的nginx服务,模拟故障,测试keepalived
 ​
 #关闭主节点lb01的Nginx服务,模拟宕机,观察VIP是否漂移到备节点
 systemctl stop nginx
 ip addr
 systemctl status keepalived   #此时keepalived被脚本杀掉了   
 ​
 #备节点查看是否生成了VIP
 ip addr    #此时VIP漂移到备节点lb02
 



 #恢复主节点
 systemctl start nginx         #先启动nginx
 systemctl start keepalived    #再启动keepalived
 ip addr​

修改node节点上的配置文件

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为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

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

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

在master节点上创建pod

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

//查看Pod的状态信息
kubectl get pods
NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          14s   #正在创建中

kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          34m  			#创建完成,运行中

kubectl get pods -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE            NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          39m   10.244.0.3   192.168.80.11   <none>           <none>
//READY为1/1,表示这个Pod中有1个容器

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

这时在master01节点上查看nginx日志

kubectl logs nginx

三、部署 Dashboard

Dashboard 介绍
        仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。

        例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

//在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001     #添加
  type: NodePort          #添加  NodePort测试环境使用,生产环境不使用。
  selector:
    k8s-app: kubernetes-dashboard

kubectl apply -f recommended.yaml

#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

使用输出的token登录Dashboard

 二进制部署k8s集群部署的步骤总结

(1)k8s的数据存储中中心的搭建 etcd

etcd 安装步骤

准备 CA 证书和 私钥文件 ,首先 CA 签发服务端证书 和 私钥文件
使用 CA 证书 、服务端证书、私钥文件 还有etcd 集群配置文件 启动etcd服务
复制etcd工作目录和管理文件到另外几个etcd节点上并修改etcd的配置文件,然后启动etcd服务
最后使用 etcdctl 命令查看etcd集群的状态

(2)单机master节点的部署

master 组件

1、先安装 apiserver

        1.1 准备apiserver的证书和私钥文件
              准备bootstrap  token 认证文件 (用于kubelet启动时签发证书时使用)
              准备apiserver的配置文件
              启动 apiserver 服务    端口是 6443 https

2、再安装controller-manager 和 scheduler

        2.1 先准备相关的启动配置文件
              然后再准备相关证书和私钥文件 生成 kubeconfig 文件(用于指定对接apiserver,使用什么证书认证)启动服务

              准备kubeconfig文件  把kubectl 加入到集群中(指定对接apiserver,使用什么证书认证)

(3)k8s的node节点的部署

先部署docker 引擎
准备kubeconfig文件、kube-proxy.kubeconfig文件还有kubenetes组件(kubelet、kube-proxy)
对kubelet-bootstrap 用户授予权限,启动相应服务并通过 CSR 请求

  • 安装CNI 网络插件实现 pod 跨主机的通信
  • 安装CoreDNS 插件实现 service 名称解析到 clusterIP

(4)高可用k8s的搭建

首先引入新的master节点,然后把master01 节点上的证书文件、各master组件的配置文件和服务管理文件拷贝到 其它master 节点并修改配置文件。最后启动相关服务。

搭建nginx/Haproxy    keepalived 高可用负载均衡器对master节点

修改 node节点上kubelet kube-proxy的 kubeconfig配置文件对接VIP

kubectl的配置文件也要对接VIP或者当前的节点

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

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

相关文章

UNION的使用

UNION的使用 给出将多条查询语句组合成单个结果集&#xff0c;两个表对应的列数和数据类型必须相同 UNION操作符&#xff1a; 返回两个查询结果集的并集&#xff0c;并去除重复记录 UNION ALL操作符 返回两个查询的结果集的并集。不去掉两个结果集的重复部分&#xff0c;重…

【Linux】Linux信号产生,接受与处理机制

理解Linux信号产生&#xff0c;接受与处理机制 信号是Linux操作系统中一种用于进程间通信和异步事件处理的机制。在本文中&#xff0c;我们将结合Linux的源码&#xff0c;深入分析信号的产生、发送、接收和处理的底层原理。 文章目录 理解Linux信号产生&#xff0c;接受与处理…

一、QGroundControl地面站使用介绍

文章目录 环境功能介绍飞行视图规划视图飞机设置分析工具程序设置 连接飞机飞机设置分析工具飞行视图规划任务 总结参考 环境 QGroundControl V4.2.0PX4-Autopilot V1.3.0devGazebo 模拟无人机 功能介绍 飞行视图规划视图飞机设置分析工具程序设置 飞行视图 软件打开后为飞…

跟着鲁sir学CV_Opencv(10)卡尔曼滤波

简介 卡尔曼滤波器由鲁道夫卡尔曼&#xff08;Rudolf E. Klmn&#xff09;在1960年提出&#xff0c;广泛应用于导航系统、信号处理、机器人定位、金融等多个领域。 主要分为两阶段&#xff1a;预测与更新 贝叶斯滤波器 贝叶斯框架下&#xff1a;预测&#xff08;先验&#x…

楼道堆积物视觉识别监控系统

楼道堆积物视觉识别监控系统采用了AI神经网络和深度学习算法&#xff0c;楼道堆积物视觉识别监控系统通过摄像头实时监测楼道的情况&#xff0c;通过图像处理、物体识别和目标跟踪算法&#xff0c;系统能够精确地识别楼道通道是否被堆积物阻塞。楼道堆积物视觉识别监控系统检测…

K210的MicroPython扩展例程——自动驾驶例程(视觉循迹)

前言 该例程实现的功能是循迹功能&#xff0c;可为想拿K210做视觉循迹开发作为参考 例程使用前需要搭建好MicroPython的开发环境 K210开发板MicroPython开发环境搭建 一、将K210连接好后打开CanMV IDE&#xff0c;连接成功后&#xff0c;三角形变成绿色 二、然后要把小车驱动…

接口测试怎么测?为什么要做接口测试?

一、前言 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间及内部各个子系统之间的交互点。测试的重点是检查数据的交换、传递和控制管理过程&#xff0c;以及系统间的逻辑依赖关系等。 简单地说&#xff0c;接口测试就是通过URL向服务器或者…

leetCode-hot100-数组专题之区间问题

数组专题之区间问题 知识点&#xff1a;解决思路&#xff1a;例题56.合并区间57.插入区间253.会议室 Ⅱ485.无重叠区间 数组区间问题是算法中常见的一类问题&#xff0c;它们通常涉及对数组中的区间进行排序、合并、插入或删除操作。无论是合并区间、插入区间还是删除重复空间&…

azure gpt 技术教程教学 | 在Azure OpenAI 上部署GPT-4o

Azure OpenAI GPT-4o是OpenAI推出的最新旗舰级人工智能模型。GPT-4o模型设计为能够实时对音频、视觉和文本进行推理&#xff0c;这是迈向更自然人机交互的重要一步。该模型的一大特点是能够处理多种类型的数据输入和输出&#xff0c;包括文本、音频和图像&#xff0c;实现了跨模…

适用于Windows 电脑的最佳视频恢复软件和方法

毫无疑问&#xff0c;丢失您的基本数据总是有压力的&#xff0c;尤其是当这些是您为捕捉最美好回忆而收集的重要视频文件时。要恢复丢失或损坏的视频文件&#xff0c;您可以借助视频恢复工具。但是&#xff0c;在选择最佳视频恢复工具时&#xff0c;您必须考虑多个扫描选项&…

Windows10安装python3.8.2

1、下载与安装 下载地址&#xff1a;https://www.python.org/downloads/release/python-382/ 滑动到页面底部 下载好的安装包安装到合适的位置&#xff08;默认安装到C盘&#xff09; 安装的时候&#xff0c;见到Add Python 3.8 to PATH 记得勾选. 2、检测安装是否成功 cm…

Facebook隐私保护:数据安全的前沿挑战

在数字化时代&#xff0c;随着社交媒体的普及和应用&#xff0c;个人数据的隐私保护问题日益受到关注。作为全球最大的社交平台之一&#xff0c;Facebook承载了数十亿用户的社交活动和信息交流&#xff0c;但与此同时&#xff0c;也面临着来自内外部的数据安全挑战。本文将深入…

Flask Response 对象

文章目录 创建 Response 对象设置响应内容设置响应状态码设置响应头完整的示例拓展设置响应的 cookie重定向响应发送文件作为响应 总结 Flask 是一个 Python Web 框架&#xff0c;用于快速开发 Web 应用程序。在 Flask 中&#xff0c;我们使用 Response 对象来构建 HTTP 响应。…

汽车IVI中控开发入门及进阶(十九):监控视频图像分割处理

图像分割是一种计算机视觉技术,可将数字图像分成离散的像素组(图像分段),为对象检测和相关任务提供信息。通过将图像的复杂视觉数据解析为特定形状的片段,图像分割可以实现更快、更先进的图像处理。 图像分割技术的范围很广,从简单直观的启发式分析到最前沿的深度学习实…

【论文笔记】advPattern

【论文题目】 advPattern: Physical-World Attacks on Deep Person Re-Identification via Adversarially Transformable Patterns Abstract 本文首次尝试对深度reID实施鲁棒的物理世界攻击。提出了一种新颖的攻击算法&#xff0c;称为advPattern&#xff0c;用于在衣服上生成…

CR80清洁卡都能用在什么地方?

CR80清洁卡&#xff08;也被称为ISO 7810 ID-1清洁卡&#xff09;的规格确实使其在各种需要读取磁条或接触式智能卡的设备中都有广泛的用途。这些设备包括但不限于&#xff1a; ATM自动终端机&#xff1a;当ATM机的磁条读卡器出现故障或读卡不灵敏时&#xff0c;可以使用CR80清…

H800基础能力测试

H800基础能力测试 参考链接A100、A800、H100、H800差异H100详细规格H100 TensorCore FP16 理论算力计算公式锁频安装依赖pytorch FP16算力测试cublas FP16算力测试运行cuda-samples 本文记录了H800基础测试步骤及测试结果 参考链接 NVIDIA H100 Tensor Core GPU Architecture…

CVPR2022医疗图像-GBCNet网络:胆囊癌(GBC)超声(USG)图像检测模型

Surpassing the Human Accuracy:Detecting Gallbladder Cancer from USG Images with Curriculum Learning&#xff1a;超越人类的准确性:基于课程学习的USG图像检测胆囊癌 目录 一、背景与意义 二、介绍 三、网络框架 3.1 区域选择网络 3.2 MS-SoP分类器 3.3 多尺度块 …

linux创建离线yum源给局域网机器使用

适用场景&#xff1a;在封闭的内网环境中&#xff0c;无法使用互联网进行安装各种rpm包的时候&#xff0c;离线yum源可以解决大部分问题&#xff0c;配置号后可直接使用yum进行安装包 1.准备好镜像源ISO&#xff1a; 例如以下示例&#xff0c;具体可参考自己的系统进行下载&a…

vscode插件-07Java

文章目录 Extension Pack for JavaSpring Initializr Java SupportCodeSwingJdk下载JDK安装jdkWindows安装jdkLinux安装jdk&#xff08;以Ubuntu为例&#xff09; jdk环境变量在VScode中配置Windows系统中配置Linux系统中配置&#xff08;以Ubuntu为例&#xff09; Extension P…