【Kbernetes】K8S 多master集群架构

目录

多master集群架构

一、master02 节点部署

1.0 环境准备

1.1 拷贝证书文件到新的master节点

1.2 修改kube-apiserver 配置文件的IP地址

1.3 启动服务并设置开机自启

1.4 给master02的服务做软连接

1.5 查看node节点状态

二、负载均衡部署

2.1 在lb01、lb02节点上部署nginx

2.1.1 配置nginx 的 yum源

2.1.2配置四层反向代理负载均衡

​编辑

2.2 部署keepalived服务

2.2.1 修改keepalived配置文件

2.2.2 创建nginx 状态检查 脚本 

2.2.3添加执行权限

 2.2.4 lb02同lb01 操作

2.2.5 启动keepalived服务

2.3 修改node 节点上配置文件的IP为VIP

2.3.1重启kubelet和kube-proxy服务

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

2.5 在 master01 节点上操作

2.5.1 测试创建pod

2.5.2 查看Pod的状态信息

2.5.3 访问

2.5.4 查看日志

三、部署 Dashboard

3.0 Dashboard 介绍

3.1 在 node节点操作

3.1.1 在node01节点上操作

3.1.2 在node02节点上操作

3.2 在 master01 节点上操作

3.2.1 暴露node 端口到外部

3.2.2 读取并解析recommended.yaml 文件,创建

3.2.3 创建服务账户

3.2.4 浏览器访问


多master集群架构

为了避免单点故障,做多master集群架构

企业中master最少4核8G;node跑业务8核32G

企业中通过nginx 来实现负载均衡,node可以随时增加

例子:试一下怎么增加node

一、master02 节点部署

1.0 环境准备

#根据规划设置主机名
hostnamectl set-hostname master02
su

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

#在master添加hosts
cat >> /etc/hosts << EOF
192.168.67.30 master01
192.168.67.11 master02
192.168.67.12 node01
192.168.67.13 node02
EOF
cat /etc/hosts

#调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system

#时间同步
yum install ntpdate -y
timedatectl set-timezone Asia/Shanghai
ntpdate time.windows.com

1.1 拷贝证书文件到新的master节点

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

cat /etc/hosts
scp -r /opt/etcd/ root@192.168.67.11:/opt/
scp -r /opt/kubernetes/ root@192.168.67.11:/opt/
scp -r /root/.kube/ root@192.168.67.11:/root
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.67.11:/usr/lib/systemd/system/

.kube 文件:里面存的kubeconfig的配置文件、令牌什么的

node会带着配置文件去请求master

1.2 修改kube-apiserver 配置文件的IP地址

//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.67.30:2379,https://192.168.67.12:2379,https://192.168.67.13:2379 \
--bind-address=192.168.67.11 \
--secure-port=6443 \
--advertise-address=192.168.67.11 \

1.3 启动服务并设置开机自启

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

systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl status kube-apiserver.service

systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl status kube-controller-manager.service

systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service
systemctl status kube-scheduler.service

1.4 给master02的服务做软连接

 //给master的服务做软连接

ln -s /opt/kubernetes/bin/* /usr/local/bin/
ll /usr/local/bin/

1.5 查看node节点状态

kubectl get nodes
#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
kubectl get node -o wide

//此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

二、负载均衡部署

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

2.1 在lb01、lb02节点上部署nginx

VIP:192.168.67.35

负载均衡nginx+keepalive01(master):192.168.67.21
负载均衡nginx+keepalive02(backup):192.168.67.22

#修改(master)主机名
hostnamectl set-hostname lb01
su
#关闭防火墙
systemctl stop firewalld.service
systemctl enable firewalld.service
setenforce 0
#修改(backup)主机名
hostnamectl set-hostname lb02
su
#关闭防火墙
systemctl stop firewalld.service
systemctl enable firewalld.service
setenforce 0

2.1.1 配置nginx 的 yum源

//配置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

cat /etc/yum.repos.d/nginx.repo

yum -y install nginx

2.1.2配置四层反向代理负载均衡

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

vim /etc/nginx/nginx.conf

#在events 模块下添加
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.67.30:6443;
    server 192.168.67.11:6443;
  }
  server {
    listen 6443;
    proxy_pass k8s-apiserver;
  }
}
systemctl start nginx
systemctl enable nginx
netstat -natp | grep nginx 


2.2 部署keepalived服务

yum -y install keepalived

2.2.1 修改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
   #lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP
   router_id NGINX_MASTER
}

#添加一个周期性执行的脚本
vrrp_script check_nginx {
  #指定检查nginx存活的脚本路径
  script "/etc/nginx/check_nginx.sh"
}


 

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.67.35/24	#指定 VIP
    }
    track_script {
        check_nginx			#指定vrrp_script配置的脚本
    }
}

以下的内容全部删除,200dd

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

2.2.3添加执行权限

chmod +x /etc/nginx/check_nginx.sh
ll /etc/nginx/check_nginx.sh

 2.2.4 lb02同lb01 操作

//在lb01 节点执行

scp /etc/keepalived/keepalived.conf root@192.168.67.22:/etc/keepalived/keepalived.conf
scp /etc/nginx/check_nginx.sh root@192.168.67.22:/etc/nginx/

//在lb02 上操作

vim /etc/keepalived/keepalived.conf

查看check_nginx.sh脚本文件;(传过来有执行权限,就不用加了)

2.2.5 启动keepalived服务

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

systemctl start keepalived
systemctl enable keepalived
#查看VIP是否生成
ip a

2.3 修改node 节点上配置文件的IP为VIP

//修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP

cd /opt/kubernetes/cfg/
ls /opt/kubernetes/cfg/
vim bootstrap.kubeconfig
    #修改IP地址为VIP地址
    server: https://192.168.67.35:6443
vim kubelet.kubeconfig
    #修改IP地址为VIP地址
    server: https://192.168.67.35:6443
vim kube-proxy.kubeconfig
    #修改IP地址为VIP地址
    server: https://192.168.67.35:6443

可以尝试写一个脚本来实现IP地址的修改

2.3.1重启kubelet和kube-proxy服务

systemctl restart kubelet.service
systemctl status kubelet.service

systemctl restart kube-proxy.service
systemctl status kube-proxy.service

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

netstat -natp | grep nginx

2.5 在 master01 节点上操作

2.5.1 测试创建pod

kubectl run nginx --image=nginx

2.5.2 查看Pod的状态信息

kubectl get pods
kubectl get pods -o wide

状态:

ContainerCreating:正在创建中

Running:创建完成,运行中

//READY为1/1,表示这个Pod中有1个容器

2.5.3 访问

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

curl 10.244.168.195
#二进制安装只能在node节点访问到,后面通过yum一键式安装的可以在master节点访问

2.5.4 查看日志

//访问nginx页面后,可以在master01节点上通过Pod的name来查看nginx的日志

kubectl logs nginx

#通过node02访问nginx,日志中的IP地址是nginx的IP地址?为什么?

三、部署 Dashboard

3.0 Dashboard 介绍

仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源。

您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)。

例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。

仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息。

3.1 在 node节点操作

node1、node2操作:
准备Dashboard 和 metrics-scraper.tar压缩包

上传dashboard.tar与metrics-scraper.tar包到node01节点与node02节点的/opt/目录下,用于生成镜像文件

dashboard

Kubernetes Dashboard 是一个基于 Web 的用户界面,用于管理 Kubernetes 集群。通过 Dashboard,用户可以查看集群的状态、管理资源(如部署、Pod、服务等)、以及查看集群的日志和事件。

metrics-scraper

在 Kubernetes Dashboard 中,Metrics Scraper 是一个用于从 Kubernetes 集群中收集度量数据(如 Pod 和节点的 CPU、内存使用情况)的组件。这些数据然后可以在 Dashboard 中显示,帮助用户更好地了解集群的状态和性能

3.1.1 在node01节点上操作

cd /opt
ls

#上传dashboard.tar与metrics-scraper.tar包到node01节点与node02节点的/opt/目录下

docker load -i dashboard.tar
docker load -i metrics-scraper.tar

docker images

3.1.2 在node02节点上操作

cd /opt
ls

#上传dashboard.tar与metrics-scraper.tar包到node01节点与node02节点的/opt/目录下

docker load -i dashboard.tar
docker load -i metrics-scraper.tar

docker images

3.2 在 master01 节点上操作

3.2.1 暴露node 端口到外部

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

cd /opt/k8s
vim recommended.yaml

nodePort: 30001        到两千多个地址,就没有了

需要带着令牌来访问

secret:密文

通过descreb 访问令牌

#默认Dashboard只能集群内部访问,修改Service为的类型为:NodePort,暴露到外部:

3.2.2 读取并解析recommended.yaml 文件,创建

kubectl apply -f recommended.yaml

#表示读取 recommended.yaml 文件中定义的资源配置,并在集群中创建、更新或删除相应的资源。这可以包括部署、服务、配置映射

#做错时可以通过 delete 来删除创建的
kubectl delete -f recommended.yaml

3.2.3 创建服务账户

#创建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}')

用于创建一个名为 dashboard-admin 的服务账户,并将其绑定到默认的 cluster-admin 集群角色;这将授予该服务账户对 Kubernetes 集群中所有资源的完全访问权限

①创建一个名为 dashboard-admin 的服务账户,并将其放置在 kube-system 命名空间中。服务账户是一种 Kubernetes 资源,用于代表应用程序或其他服务与 Kubernetes API 进行交互

②创建一个名为 dashboard-admin 的集群角色绑定,将 cluster-admin 集群角色授予该服务账户。集群角色是一种 Kubernetes 资源,用于定义对集群范围内资源的访问权限

③使用 describe 命令查看 dashboard-admin 服务账户的凭据信息。这将显示一个包含该服务账户的访问令牌的密钥值对列表,以及其他相关信息

kubectl create serviceaccount dashboard-admin -n kube-system
#kubectl create:创建
#ServiceAccount:创建类型为服务账号
#dashboard-admin:创建服务账号名称,一般为dashboard-admin,具有管理员权限的服务账号
#-n kube-system:指定命名空间kube-system
'命令含义'
#在kube-system命名空间中创建了一个名为dashboard-admin的ServiceAccount(服务账号)
#ServiceAccount是Kubernetes中用于Pod访问API资源的身份。
 
 
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
#kubectl create:创建资源
#clusterrolebinding:用于将ClusterRole绑定到一个或多个服务账号、用户或者组,从而授予它们对集群中资源的访问权限
#dashboard-admin:创建的ClusterRoleBinding的自定义名称,在整个集群中必须是唯一的
#--clusterrole=cluster-admin:标志,用于指定要绑定的ClusterRole的名称
#--serviceaccount=kube-system:dashboard-admin:标志,用于指定服务账号的名称和命名空间
 
'命令含义'
#这个命令创建了一个ClusterRoleBinding,将cluster-admin这个ClusterRole绑定到kube-system命名空间中的dashboard-admin这个ServiceAccount上。
#cluster-admin是一个预定义的ClusterRole,它拥有集群中几乎所有的权限。这意味着与dashboard-admin这个ServiceAccount关联的Pod将能够执行集群中的任何操作。
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
 
 
#kubectl -n kube-system get secret:列出kube-system命名空间中的所有secrets。
'Secret 是 Kubernetes 中的一个资源对象,用于存储敏感信息,如密码、OAuth令牌和SSH密钥。
这些信息可以以明文或加密的形式存储在Secret中,通常它们会被Base64编码以符合Secret的数据格式'
 
#awk '/dashboard-admin/{print $1}':
使用awk命令过滤输出,只打印与dashboard-adminServiceAccount相关的secret的名称
#默认是dashboard-admin-token-xxxxx,其中xxxxx是一个随机字符串。
 
kubectl describe secrets -n kube-system $(...):
#使用上一步得到的secret名称,描述这个secret的详细信息。
#这通常包括secret的类型(在这种情况下是kubernetes.io/service-account-token),
#以及与ServiceAccount关联的token(这个token通常用于身份验证和授权)。

3.2.4 浏览器访问

#使用输出的token登录Dashboard

https://192.168.67.12:30001

#使用输出的token登录Dashboard

https://NodeIP:30001

通过https访问,会提示站点不安全,点击【详细信息】,点击【继续跳转网页】

选择【Token】,输入【Token 令牌】,点击【登录】

 

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(通常简称为K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它的高可用集群架构主要包括以下几个组件和机制: 1. Master节点:Kubernetes集群的控制平面组件运行在Master节点上,它们包括etcd、kube-apiserver、kube-controller-manager和kube-scheduler。Master节点起着集群的大脑和控制中心的作用,负责管理和控制整个集群的运行。 2. Worker节点:Kubernetes集群中的工作节点,也被称为Minion或Node。它们用来运行容器化的应用程序。每个Worker节点上都运行着一个kubelet进程和一个kube-proxy进程,用于与Master节点进行通信、接收指令、执行任务以及负载均衡等。 3. etcd:Kubernetes使用etcd作为集群中所有重要数据的分布式键值存储数据库。etcd以高可用的方式运行,并在整个集群中保持数据的一致性和可靠性。 4. 健康检查和故障转移:Kubernetes的高可用集群架构中包含了许多健康检查和故障转移机制,以确保集群的稳定性和容错性。例如,kube-apiserver利用持久化存储来记录集群状态,并使用选举机制选出一个新的Leader节点以应对Master节点的单点故障。 5. 负载均衡:Kubernetes集群可以通过负载均衡器来分发流量和请求,确保应用程序在各个Worker节点上的均衡分布。常见的负载均衡方式包括Round Robin、Session Sticky等。 6. 水平伸缩:Kubernetes提供了水平伸缩的能力,可以根据应用程序的负载情况自动增加或减少容器的数量,以提高整个集群的性能和可用性。 总结起来,Kubernetes的高可用集群架构通过Master节点的管理和控制,Worker节点的执行和负载均衡,etcd的数据存储和一致性,以及多种健康检查和故障转移机制,实现了集群的高可用性、容错性和稳定性,从而保证了容器化应用程序的持续可靠运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值