二进制部署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-apiserverKUBE_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
EOFyum 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 keepalivedglobal_defs {# 接收邮件地址notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 邮件发送地址notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id NGINX_MASTER        #lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUPvrrp_skip_check_adv_addr#vrrp_strict                #这里要注释vrrp_garp_interval 0vrrp_gna_interval 0
}#添加一个周期性执行的脚本
vrrp_script check_nginx {script "/etc/nginx/check_nginx.sh"        #指定检查nginx存活的脚本路径
}vrrp_instance VI_1 {state MASTER                    #lb01节点的为 MASTER,lb02节点的为 BACKUPinterface ens33                    #指定网卡名称 ens33virtual_router_id 51            #指定vrid,两个节点要一致priority 100                    #lb01节点的为 100,lb02节点的为 90advert_int 1authentication {auth_type PASSauth_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 ];thensystemctl stop keepalived
fichmod +x /etc/nginx/check_nginx.shscp /etc/keepalived/keepalived.conf root@192.168.80.16:/etc/keepalived/keepalived.confscp /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 nginxip addrsystemctl status keepalived   #此时keepalived被脚本杀掉了   ​#备节点查看是否生成了VIPip addr    #此时VIP漂移到备节点lb02#恢复主节点systemctl start nginx         #先启动nginxsystemctl start keepalived    #再启动keepalivedip addr​

修改node节点上的配置文件

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig 
server: https://192.168.80.100:6443vim kubelet.kubeconfig
server: https://192.168.80.100:6443vim 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-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30001     #添加type: NodePort          #添加  NodePort测试环境使用,生产环境不使用。selector:k8s-app: kubernetes-dashboardkubectl apply -f recommended.yaml#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-adminkubectl 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或者当前的节点

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

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

相关文章

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

漏洞复现环境搭建请参考 http://t.csdnimg.cn/MxmId 漏洞版本 Apache Log4j 2.8.2之前的2.x版本 漏洞验证 &#xff08;1&#xff09;开放端口4712 漏洞利用 &#xff08;1&#xff09;ysoserial工具获取 wget https://github.com/frohoff/ysoserial/releases/download/v0…

Flink DataStream API 基础算子(一)

一、介绍 官网 DataStream API 得名于特殊的 DataStream 类&#xff0c;该类用于表示 Flink 程序中的数据集合。你可以认为 它们是可以包含重复项的不可变数据集合。这些数据可以是有界&#xff08;有限&#xff09;的&#xff0c;也可以是无界&#xff08;无限&#xff09;的…

spring启动后自动退出了

在项目中启动spring框架的application&#xff0c;但是还未等到接口访问它就自己退出了&#xff0c;运行截图如下所示&#xff1a; 解决办法&#xff1a; 将build.gradle文件里的依赖修改一下。我原先的依赖是&#xff1a; org.springframework:spring-web:5.3.10 现修改为 …

2024 电工杯高校数学建模竞赛(B题)| 平衡膳食食谱 |建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用负载均衡&#xff0c;多目标规划等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

2024-05-20 问AI:介绍一下大语言模型的in-context learning

文心一言 大语言模型的in-context learning&#xff08;ICL&#xff09;是指模型在不进行参数更新的情况下&#xff0c;仅通过少量示例或指令&#xff0c;快速适应新的任务和领域的能力。 传统的机器学习方法通常需要大量的标注数据来训练模型&#xff0c;而ICL的出现为我们提…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日&#xff0c;肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日&#xff0c;肯尼亚内罗毕以北的一座大坝决堤&#xff0c;冲毁房屋和车辆。当地官员称&#xff0c;事故遇难人数已升至71人。这起事件再次提醒我们&#xff0c;大坝安全无小事&#xff0c;监…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-23.1,2 讲 I2C驱动

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

C#一些高级语法

目录 C# 特性&#xff08;Attribute&#xff09; 规定特性&#xff08;Attribute&#xff09; 预定义特性&#xff08;Attribute&#xff09; AttributeUsage Obsolete 创建自定义特性&#xff08;Attribute&#xff09; 声明自定义特性 构建自定义特性 C# 反射&#…

【AI】如何用非Docker方法安装类GPT WebUI

【背景】 本地LLM通信的能力需要做成局域网SAAS服务才能方便所有人使用。所以需要安装WebUI&#xff0c;这样既有了用户界面&#xff0c;又做成了SAAS服务&#xff0c;很理想。 【问题】 文档基本首推都是Docker安装&#xff0c;虽然很多人都觉得容器多么多么方便&#xff0…

了解区块链基础设施,共同构建安全且强大的Sui网络

区块链基础设施的范畴很广&#xff0c;但其核心是那些直接与网络互动的计算机。这些实体通常被称为节点&#xff0c;分为不同的类型&#xff0c;例如维护完整区块链副本的全节点&#xff0c;以及作为共识决定者的验证节点。除了这两种类型之外&#xff0c;还有其他类型的节点&a…

【oracle的安装记录】

oracle安装记录 一、下载以后&#xff0c;解压到同一路径下面 二、双击可执行安装文件&#xff0c;等待文件加载 三、双击以后&#xff0c;弹出信息 四、提示该窗口&#xff0c;点击【是】即可 五、未填写配置安全更新信息 六、弹出小窗口&#xff0c;选择【是】 七、安装选项…

golang一键打包macos, linux, windows 应用程序 shell脚本

golang一键打包各个平台可执行应用程序shell脚本&#xff0c; 可自定义输出文件名&#xff0c;自动一键打包3大平台可执行应用程序。废话不多说&#xff0c;直接上代码&#xff1a; #!/bin/sh ################################## # 生成各个平台下的可执行程序 golang一键打包…

SQLI-labs-第二十四关

目录 1、登录界面 2、注册界面 3、修改密码界面 知识点&#xff1a;二次注入 思路&#xff1a; 这一关有几个页面可以给我们输入&#xff0c;一个登录界面&#xff0c;一个注册页面&#xff0c;一个修改密码界面 1、登录界面 首先我们登录界面看看 登录后出现一个修改密码…

对字符串的处理:比较是否相同,copy对象属性,copy列表list

系列文章目录 //1.copy list对象 List<User> usersnew ArrayList<>(); List<Person> persons BeanUtil.copyToList(users, Person.class);//2.比较两个listpublic static void main(String[] args) {List<Person> list1 Arrays.asList(new Person(&qu…

【MySQL精通之路】InnoDB配置(8)-缓存池配置

本节提供InnoDB缓冲池的配置和调优信息。 1 配置InnoDB缓冲池大小 当增加或减少innodb_buffer_pool_size时&#xff0c;操作是分块执行的 区块大小由innodb_buffer_pool_chunk_size 配置选项定义&#xff0c;默认值为128M。 缓冲池大小必须始终等于或等于&#xff08;n倍于 …

最近情况说明

最近转入了Django开发工作&#xff0c;所以主要方向在Python开发。大大

Ubuntu 搭建SRT协议 环境

1.官网clone源码 GitHub - Haivision/srt: Secure, Reliable, Transport 打不开的话国内gitee 不是最新的 https://gitee.com/smartavs/srt.git 下下来之后 cd 到srt目录 需要安装cmake openssl等依赖 我的环境已经有了 mkdir build && cd build cmake .. -…

Docker Update 用法详解

Docker 是一个开源的应用容器引擎&#xff0c;它让开发者可以打包应用及其依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上。docker update命令则是用于在容器运行时动态更新其配置&#xff0c;如资源限制、CPU权重等&#xff0c;而无需重启容器。本…

最有效的企业数据防泄漏手段 | 数据泄漏防护系统推荐

随意信息安全意识不断提高&#xff0c;企业纷纷寻求高效的数据防泄漏手段。在众多解决方案中&#xff0c;这五款软件各具特色&#xff0c;但它们的共同目标都是确保企业数据的安全性和保密性。 接下来&#xff0c;我们将逐一介绍这五款软件的特点和优势。 1、Ping 32 Ping32…

前端项目使用docker编译发版和gitlab-cicd发版方式

项目目录 app/ ├── container/ │ ├── init.sh │ ├── nginx.conf.template ├── src/ ├── .gitlab-ci.yml └── deploy.sh └── Dockerfile └── Makefilecontainer目录是放nginx的配置文件&#xff0c;给nginx镜像使用 .gitlab-ci.yml和Makefile是c…