【云原生Kubernetes】二进制搭建Kubernetes集群(下)——部署多master(1)

简介: 本文接上一篇文章,前面两篇文章中已部署了Kubernetes单master集群。本文将完成多master集群的部署,即部署master02,以及nginx负载均衡、keepalived高可用。

前言


多master集群架构图:

网络异常,图片无法展示
|


架构说明:

  • node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver。简而言之,node节只能有一个master来领导。
  • kubelet和kube-proxy是通过kubelet.kubeconfig和kube-proxy.kubeconfig文件中的server参数进行对接 master节点的。
  • 所以在多master节点的环境下,需要有nginx负载均衡器来进行调度,而且需要进行keepalived高可用的构建(主从两个节点) ,防止主节点宕机导致整个k8s集群的不可用。

部署两台或者三台master都可以:

  • 三台:多层保障、负载均衡(减轻每台master的压力)、选举机制选出leader。
  • 两台:也可实现负载均衡,负载压力没那么大的情况下可选两台,同时考虑到成本。

六、部署master02 节点

master02:192.168.41.20

##------------ 1、 master01节点,拷贝文件到master02 -------------------------------
 #从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
 scp -r /opt/etcd/ root@192.168.41.20:/opt/
 scp -r /opt/kubernetes/ root@192.168.41.20:/opt/
 scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.41.20:/usr/lib/systemd/system/
 scp -r /root/.kube/  master02:/root/
 ##----------- 2、 master02节点,修改配置文件并启动相关服务-------------------------
 #修改配置文件kube-apiserver中的IP
 vim /opt/kubernetes/cfg/kube-apiserver
 KUBE_APISERVER_OPTS="--logtostderr=true \        #输出日志,false表示标准错误不输出到屏幕,而是输出到日志中。true表示标准错误会输出到屏幕。
 --v=4 \                                          #日志级别
 --etcd-servers=https://192.168.41.20:2379,https://192.168.41.42:2379,https://192.168.41.43:2379 \      #etcd节点的IP通信地址
 --bind-address=192.168.41.20 \              #修改,当前绑定的内网IP监听的地址
 --secure-port=6443 \                                                                #基于HPPTS开放端口
 --advertise-address=192.168.41.20 \         #修改,内网通告地址,让其他node节点地址通信
 ......
 #在 master02 节点上启动各服务并设置开机自启
 systemctl enable --now kube-apiserver.service
 systemctl enable --now kube-controller-manager.service
 systemctl enable --now kube-scheduler.service
 #将可执行文件,创建软链接
 ln -s /opt/kubernetes/bin/* /usr/local/bin/
 #查看node节点状态
 kubectl get nodes
 kubectl get nodes -o wide           #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
 #此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
复制代码


1、 master01节点,拷贝文件到master02

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2、 master02节点,修改配置文件并启动相关服务

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


3、查看node节点状态:

网络异常,图片无法展示
|


七、部署负载均衡

配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)。

load balancer01:192.168.41.44

load balancer01:192.168.41.45

VIP:192.168.41.100

7.1 在lb01、lb02节点上配置nginx和keepalived

#配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)
 #----------------- 1、两台负载均衡器配置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.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.41.10:6443;    #master01
         server 192.168.41.20:6443;    #master02
     }
     server {
         listen 6443;
         proxy_pass k8s-apiserver;
     }
 }
 http {
 ......
 #检查配置文件语法
 nginx -t   
 #启动nginx服务,查看已监听6443端口
 systemctl start nginx
 systemctl enable nginx
 netstat -natp | grep nginx 
 tcp        0      0 0.0.0.0:6443            0.0.0.0:*               LISTEN      2715/nginx: master
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2715/nginx: master
 #------------------ 2、两台负载均衡器配置keepalived ------------------------------
 #部署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 LB01   #lb01节点的为LB01,lb02节点的为LB02
 }
 #添加一个周期性执行的脚本
 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.41.100/24   #指定 VIP,需要与之前证书中认证的地址一致
     }
     track_script {          #追踪脚本
         check_nginx         #指定vrrp_script配置的脚本
     }
 }
 #创建nginx状态检查脚本 
 vim /etc/nginx/check_nginx.sh
 #!/bin/bash
 #egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程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  #为脚本增加执行权限
 #启动keepalived服务(一定要先启动了nginx服务,再启动keepalived服务)
 systemctl start keepalived
 systemctl enable keepalived
 ip addr             #查看主节点的VIP是否生成
 #---------------- 3、关闭主节点的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
复制代码


1、两台负载均衡器配置nginx

网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2、两台负载均衡器配置keepalived

网络异常,图片无法展示
|


修改 /etc/keepalived/keepalived.conf

网络异常,图片无法展示
|

网络异常,图片无法展示
|


网络异常,图片无法展示
|


3、关闭主节点的nginx服务,模拟故障,测试keepalived

网络异常,图片无法展示
|


网络异常,图片无法展示
|


恢复主节点:

网络异常,图片无法展示
|


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
运维 监控 Cloud Native
构建高效稳定的云原生应用部署策略
【5月更文挑战第17天】 在现代软件工程实践中,云原生架构已成为实现敏捷开发、持续交付和微服务治理的关键。本文深入探讨了如何构建一个既能满足业务快速迭代需求,又能保障系统稳定性的云原生应用部署策略。通过分析容器化技术、微服务设计原则以及自动化部署工具的选择与使用,提出了一种综合部署流程优化方案。文章旨在为运维工程师提供一种系统性解决方案,以应对复杂多变的生产环境挑战。
11 1
|
1天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
114 3
|
1天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
30 3
|
2天前
|
存储 运维 监控
Kubernetes 集群的监控与性能优化策略
【5月更文挑战第19天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes已成为部署、管理和扩展服务的关键平台。然而,随着集群规模的增长和服务的复杂化,有效的监控和性能优化成为确保系统稳定性和高效性的重要挑战。本文将探讨针对Kubernetes集群监控的最佳实践,并提出一系列性能优化策略,旨在帮助运维人员识别潜在的瓶颈,保障服务的持续可靠性及响应速度。
|
4天前
|
监控 Cloud Native 测试技术
构建高效稳定的云原生应用部署策略
【5月更文挑战第17天】 在现代软件工程实践中,云原生应用的持续集成与部署(CI/CD)已成为提升开发效率、确保产品质量的关键因素。本文将探讨构建一个高效且稳定的云原生应用部署策略,涵盖从自动化测试到多阶段部署流程的设计。通过分析容器化技术、微服务架构以及自动化工具的应用,我们旨在为运维工程师提供一套优化部署流程的解决方案,以实现快速迭代和高可用性的平衡。
|
4天前
|
资源调度 Kubernetes 监控
Kubernetes 集群性能优化实践
【5月更文挑战第17天】在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随着集群规模的增长和业务复杂度的提升,性能优化成为确保系统稳定性与高效运行的关键。本文将深入探讨 Kubernetes 集群性能优化的策略与实践,覆盖从节点资源配置到网络通信优化,再到高效的资源调度机制,旨在为运维人员提供系统的优化路径和具体的操作建议。
|
5天前
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
6天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
6天前
|
Kubernetes Ubuntu Docker
初始化k8s多结点集群
在Ubuntu22.04.3 LTS上设置k8s多节点集群,采用Docker v24.0.6、kubeadm v1.28和cir-dockerd v0.3.4。首先安装docker和cri-dockerd,更新k8s三件套至v1.28。然后,参照官方文档进行`kubeadm init`初始化集群,配置包括自定义镜像仓库、控制面端点等。成功初始化后,显示了相关证书和配置信息。最后,提供了一些额外的kubectl命令以管理节点。
19 1
|
6天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化策略
【5月更文挑战第14天】 在动态且不断扩展的云计算环境中,保持 Kubernetes 集群的高性能运行是一个挑战。本文将探讨一系列实用的性能优化措施,旨在帮助运维专家确保其容器化应用能在资源受限的情况下仍保持高效与稳定。通过分析 Kubernetes 的资源调度机制、存储和网络配置,我们提出了一套综合的性能调优框架,并结合实际案例,展示如何实施这些策略以提升集群的整体性能。