kubernetes多master集群架构

news2024/9/23 1:22:09

一、完成master02节点的初始化操作

  • master02环境准备,详细过程参考上一期博客环境准备
#添加主机映射
vim /etc/hosts
192.168.88.3 master01
192.168.88.8 master02
192.168.88.4 node01
192.168.88.5 node02

 

1、准备master02节点需要的文件
  • 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点
  • scp -r /opt/etcd/ @192.168.10.20:/opt/
    #拷贝etcd服务需要的文件到新的master02节点
    
    scp -r /opt/kubernetes/ @192.168.10.20:/opt
    #拷贝kubernetes目录下的文件到新的master02 节点
    
    scp -r /root/.kube @192.168.10.20:/root
    #拷贝当前目录下的文件到新的master02节点
    
    scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.10.20:/usr/lib/systemd/system/
    #拷贝master01节点组件的服务管理文件到新的master02节点
    

 

2、修改配置文件kube-apiserver中的IP
  • master02节点
  • #修改apiserver配置文件
    vim /opt/kubernetes/cfg/kube-apiserver
    --bind-address=192.168.88.8 \
    #第5行,ip修改为本机的地址
    --secure-port=6443 \
    --advertise-address=192.168.88.8 \
    #第7行,ip修改为本机的地址
    

3、启动各服务并设置开机自启

  • master02 节点
  • systemctl enable --now kube-apiserver.service
    #apiserver服务,开机自启并立即启动
    
    systemctl status kube-apiserver.service
    #查看apiserver服务状态
    
    systemctl enable --now kube-controller-manager.service
    #controller-manager服务,开机自启并立即启动
    
    systemctl status kube-controller-manager.service
    #查看服务状态
    
    systemctl enable --now kube-scheduler.service
    #scheduler服务开机自启并立即启动
    
    systemctl status kube-scheduler.service
    #查看服务状态
    

 

4、查看node节点状态
  • master02节点
  • ln -s /opt/kubernetes/bin/* /usr/local/bin/
    #做软连接
    
    kubectl get nodes
    #查看node节点信息
    
    kubectl get nodes -o wide
    #查看node节点信息
    #-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
    
    #此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来
    

 

二、负载均衡部署

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

1.1 准备nginx编译安装脚本

#查看nginx编译安装脚本
cat nginx.sh
#/bin/bash
systemctl  start  nginx  >>/dev/null
if [ $? -eq 0 ];then
echo  "nginx服务已安装"
else
useradd -M -s /sbin/nologin nginx
cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz >>/dev/null
echo "正在安装,请耐心等待"
tar xf   nginx-1.18.0.tar.gz
cd  /opt/nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel  &>>/dev/null
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j `lscpu|sed -n '4p'|awk '{print $2}'`&>>/dev/null
make  install  &>>/dev/null
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
cat >  /usr/lib/systemd/system/nginx.service  <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chown -R nginx.nginx  /usr/local/nginx
systemctl  daemon-reload  &>>/dev/null
systemctl  enable --now nginx
echo  "nginx服务已开启"
fi
cd /opt/
#切换目录

#上传nginx.sh脚本文件

chmod +x nginx.sh
#添加执行权限

./nginx.sh
#执行脚本
  • nginx01节点
  • nginx02节点

 

1.2 修改nginx配置文件
  • 配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口
  • #修改nginx配置文件
    vim /usr/local/nginx/conf/nginx.conf
    #添加stream模块配置
    stream {
       log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
       access_log  /usr/local/nginx/logs/k8s-access.log  main;
    
     upstream k8s-apiserver {
                server 192.168.10.11:6443;
                server 192.168.10.20:6443;
                 #负载均衡
            }
            server {
                listen 6443;
                proxy_pass k8s-apiserver;
                #反向代理
            }
    }
    
    scp /usr/local/nginx/conf/nginx.conf 192.168.10.15:/usr/local/nginx/conf/nginx.conf
    #拷贝nginx01节点的nginx配置文件到nginx02节点
    

  • nginx01节点 负载均衡指向master的ip地址

 

  • nginx02节点

 1.3 启动nginx服务

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

systemctl enable --now nginx
#开机自启,立即启动

systemctl restart nginx
#重启nginx服务

ss -natp | grep nginx 
#查看nginx进程
  • nginx01
  • nginx02

2、部署keepalived服务

  • nginx01节点、nginx02节点操作
  • 2.1 修改keepalive配置文件
  • yum install -y keepalived.x86_64
    #安装keepalive服务
    
    #修改keepalived配置文件
    vim /etc/keepalived/keepalived.conf
       smtp_server 127.0.0.1
       #修改此处ip
       smtp_connect_timeout 30
       router_id LVS_MASTER
       #nginx01节点的为MASTER,nginx02节点的为BACKUP
       vrrp_skip_check_adv_addr
       #vrrp_strict
       #注销此行
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    vrrp_script check_nginx {
    #添加一个周期性执行的脚本
        script "/usr/local/nginx/conf/check_nginx.sh"
        #指定检查nginx存活的脚本路径
    }
    
    vrrp_instance VI_1 {
        state MASTER
        #nginx01节点的为 MASTER,nginx02节点的为 BACKUP
        interface ens33
        #指定网卡名称 ens33
        virtual_router_id 51
        #指定vrid,两个节点要一致
        priority 100
        #nginx01节点的优先级为100、nginx02节点的优先级为80
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.10.100/24
            #指定 VIP
        }
        track_script {
            check_nginx
            #指定vrrp_script配置的脚本
        }
    }
    #下面配置部分全部删除即可
    
    scp /etc/keepalived/keepalived.conf 192.168.10.15:/etc/keepalived/keepalived.conf
    #复制nginx01节点的keepalive配置文件到nginx02节点
    
    #按照上面说明部分修改nginx02节点keepalive配置文件
    

  • nginx01节点

 

  • nginx02节点

 

2.2 创建nginx状态检查脚本

#创建nginx状态检查脚本 
vim /usr/local/nginx/conf/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 /usr/local/nginx/conf/check_nginx.sh
#添加权限

 

  • nginx01节点
  • nginx02节点

 2.3 启动keepalive服务

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

systemctl start keepalived
#开启keepalive服务

systemctl enable keepalived
#开机自启

systemctl status keepalived.service
#查看服务状态

ip a
#查看VIP是否生成
  • nginx01节点

 

  • nginx02 节点

 3、修改node节点上的配置文件

  • bootstrap.kubeconfig 和 kubelet.kubeconfig配置文件配置vip地址
  • cd /opt/kubernetes/cfg/
    #切换目录
    
    #修改配置文件
    vim bootstrap.kubeconfig 
    server: https://192.168.10.100:6443
    #改为vip
    
    #修改配置文件
    vim kubelet.kubeconfig
    server: https://192.168.10.100:6443
    #改为vip
    
    #修改配置文件
    vim kube-proxy.kubeconfig
    server: https://192.168.10.100:6443
    #改为vip
    
    systemctl restart kubelet.service 
    systemctl restart kube-proxy.service
    #重启kubelet和kube-proxy服务
    

  • nginx01节点

 

 

  • nginx02节点

 

 查看连接状态

  • 在nginx01节点上查看 nginx 和 node 、 master 节点的连接状态
  • ss -natp|grep nginx
    #在nginx01节点查看nginx进程
    

  • 在 master01 节点上操作
  • kubectl run nginx --image=nginx
    #测试创建pod
    
    kubectl get pods
    #查看Pod的状态信息
    
    ---------------------------------------------------------------------------------------------------------------------
    ContainerCreating
    #正在创建中
    ImagePullBackOff
    #表示镜像不存在,需要在node节点拉取镜像信息
    Running
    #创建完成,运行中
    ---------------------------------------------------------------------------------------------------------------------
    
    kubectl get pods -o wide
    #显示pod详细信息
    #READY为1/1,表示这个Pod中有1个容器
    
    [root@node01 cfg]#curl 172.16.253.70
    #在对应网段的node节点上操作(此处对应的是node01节点)
    
    kubectl logs nginx
    #这时在master01节点上查看nginx日志
    

 

 

 

 

 三、部署 Dashboard

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

2、部署Dashboard
  • 在 master01 节点上操作
  • cd /opt/k8s
    #切换目录
    
    #上传 recommended.yaml 文件到 /opt/k8s 目录中
    
    --------------------------------------------------------------------------------------------------------
    vim recommended.yaml
    #默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-das/hboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      ports:
    
       - port: 443
         targetPort: 8443
         nodePort: 30001
         #添加
           type: NodePort
           #添加
           selector:
             k8s-app: kubernetes-dashboard
    --------------------------------------------------------------------------------------------------------
    
    kubectl apply -f recommended.yaml
    #指定yml文件启动recommended服务
    
    kubectl create serviceaccount dashboard-admin -n kube-system
    #创建一个新的serviceaccount,名为 dashboard-admin
    
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    #创建service account并绑定默认cluster-admin管理员集群角色
    
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    #在 kube-system 命名空间中查找名称中包含 dashboard-admin 的 Secret,并获取并描述这个 Secret 的详细信息。
    
    https://NodeIP:30001
    #使用输出的token登录Dashboard(此处nodeip使用node01节点或者node02节点都可以)
    

  • 使用浏览器访问登录

 

部署多master集群架构过程
首先部署master02等其他master节点(master01节点的配置文件(私钥文件、执行文件、服务文件)拷贝到master02 节点)
对master节点搭建nginx/haproxy+keepalive高可用负载均衡器
修改node节点上的kubelet、kube-proxy的kubeconfig配置文件对接vip
kubectl配置文件也要对接vip或者当前的节点

 

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

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

相关文章

数学:矩阵范数的定义、常见的矩阵范数

1 算子范数【从属范数】 1.1 1-算子范数【列和范数】 &#xff1a;即对A的每列的绝对值求和再求其中的最大值 1.2 ∞-算子范数【行和范数】即对 A 的每行的绝对值求和再求其中的最大值 1.3 2-算子范数【谱范数】 学过奇异值分解就知道谱范数是最大奇异值/ 二次型的最大特…

大数据Spark教程从入门到精通第四篇:Spark快速上手

一&#xff1a;Spark快速上手 1&#xff1a;创建Maven项目 idea安装scala_idea scala插件-CSDN博客 代表了我们安装scala的maven环境已经准备好了&#xff0c;代码可以正常跑了

kafka用java收发消息

用java客户端代码来对kafka收发消息 具体代码如下 package com.cool.interesting.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; i…

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…

程序验证之Dafny--证明霍尔逻辑的半自动化利器

一、What is Dafny?【来自官网介绍 Dafny 】 1)介绍 Dafny 是一种支持验证的编程语言&#xff0c;配备了一个静态程序验证器。 通过将复杂的自动推理与熟悉的编程习语和工具相结合&#xff0c;使开发者能够编写可证明正确的代码&#xff08;相对于 {P}&#xff33;{Q} 这种…

数据结构(C):树的概念和二叉树初见

目录 &#x1f37a;0.前言 1.树概念及结构 2.认识一棵树 3.树的表示 3.1树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 4.二叉树 4.1特殊的二叉树 4.2二叉树的性质 &#x1f48e;5.结束语 &#x1f37a;0.前言 言C之言&#xff0c;聊C之识&…

OpenAI 震撼发布:GPT-4o免费,实时语音视频交互开启新纪元

OpenAI 震撼发布&#xff1a;GPT-4o免费&#xff0c;实时语音视频交互开启新纪元 在仅仅问世17个月后&#xff0c;OpenAI 研制出了仿佛科幻片中登场的超级人工智能——GPT-4o&#xff0c;而且所有人都可以完全免费使用&#xff0c;让这个科技界的巨浪让人震撼无比&#xff01;…

JSP技术

前言&#xff1a;虽然现在Vue盛行&#xff0c;但是对于初学者和一些项目我们还是采用jsp技术来编写前端代码&#xff0c;一些老的项目也需要jsp去维护。就像老师说的法国的银行系统还是采用COBOL这种古老语言。本篇文章主要介绍jsp技术。 目录 一、概述 &#xff08;1&#…

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…

docker安装minio附带图片

1.拉镜像 docker pull minio/minio 2.创建挂载点目录 mkdir -p /usr/local/minio/config mkdir -p /usr/local/minio/data 3.创建minio容器 docker run \ -p 19000:9000 \ -p 9090:9090 \ --nethost \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYmini…

【前端】CSS基础(4)

文章目录 前言1、CSS常用属性1.1 文本属性1.1.1 文本对齐1.1.2 文本装饰1.1.3 文本缩进1.1.5 行高 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&…

第 397 场 LeetCode 周赛题解

A 两个字符串的排列差 模拟&#xff1a;遍历 s s s 记录各字符出现的位置&#xff0c;然后遍历 t t t 计算排列差 class Solution {public:int findPermutationDifference(string s, string t) {int n s.size();vector<int> loc(26);for (int i 0; i < n; i)loc[s…

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度&#xff0c;有此需求的小伙伴学起来&#xff01; 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时&#xff0c;不能够跨分钟&#xff0c;跨小时&#x…

在做题中学习(59):除自身以为数组的乘积

238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀积和后缀积 思路&#xff1a;answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。 而前缀积(f[i])是&#xff1a;[0,i-1]所有元素的乘积 后缀…

6. 网络编程-网络io与select、poll,epoll

https://0voice.com/uiwebsite/html/courses/v13.7.html 首先看看这个学习计划 网络、网络编程、网络原理基础组件&#xff0c;20个。中间件 Redis ,MySQL&#xff0c;Kafka&#xff0c;RPC&#xff0c;Nginx开源框架&#xff08;解决方案&#xff09;业务开发(工程师开发&am…

【C语言】5.C语言函数(2)

文章目录 7.嵌套调⽤和链式访问7.1 嵌套调⽤7.2 链式访问 8.函数的声明和定义8.1 单个⽂件8.2 多个⽂件8.3 static 和 extern8.3.1 static 修饰局部变量8.3.2 static 修饰全局变量8.3.3 static 修饰函数 7.嵌套调⽤和链式访问 7.1 嵌套调⽤ 嵌套调用就是函数之间的互相调用。…

震撼发布!GPT-4o 上线!

5 月 14日凌晨一点&#xff0c;OpenAI 发布了 GPT-4o&#xff01; 新模型的功能简单概括就是&#xff1a;更快、更智能、更像人类。 秉承着持续更新的态度&#xff0c;Hulu AI 快速接入 GPT-4o 啦&#xff01; 继 5 月份上线 Suno 之后&#xff0c;这次是 Hulu AI 的又一重大…

Android 应用开发-实现将公共存储空间内的文件复制到应用的私用存储空间中

一、前言 几个月前&#xff0c;我用Android Studio给公司销售部门的同事开发了一款手机app&#xff0c;让同事们用自己的手机就能进行商品的扫码盘点操作&#xff0c;帮他们提高了工作效率&#xff0c;他们用了一段时间&#xff0c;反映还不错。不过前几天&#xff0c;销售部门…

Mysql 事务隔离级别

前言 在数据库管理系统中&#xff0c;事务&#xff08;Transaction&#xff09;是保证数据一致性和完整性的重要机制。在并发环境下&#xff0c;多个事务同时操作相同的数据可能会引发各种问题&#xff0c;如脏读、不可重复读、幻读等。为了解决这些问题&#xff0c;MySQL提供…