附031.Kubernetes_v1.20.4高可用部署架构二

kubeadm介绍 kubeadm概述

参考附003.Kubeadm部署Kubernetes。

kubeadm功能

参考附003.Kubeadm部署Kubernetes。

本方案描述

本方案采用kubeadm部署Kubernetes 1.20.4版本;

etcd采用混部方式;

KeepAlived:实现VIP高可用;

HAProxy:以系统systemd形式运行,提供反向代理至3个master 6443端口;

其他主要部署组件包括:

Metrics:度量;

Dashboard:Kubernetes 图形UI界面;

Helm:Kubernetes Helm包管理工具;

Ingress:Kubernetes 服务暴露;

Longhorn:Kubernetes 动态存储组件。

部署规划 节点规划 节点主机名 IP 类型 运行服务
master01   172.16.10.11   Kubernetes master节点   containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico  
master02   172.16.10.12   Kubernetes master节点   containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico  
master03   172.16.10.13   Kubernetes master节点   containerd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubectl、kubelet、metrics、calico  
worker01   172.16.10.21   Kubernetes worker节点   containerd、kubelet、proxy、calico  
worker02   172.16.10.22   Kubernetes worker节点   containerd、kubelet、proxy、calico  
worker03   172.16.10.23   Kubernetes worker节点   containerd、kubelet、proxy、calico  

Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。

架构图

Kubernetes高可用架构中etcd与Master节点组件混布方式特点:

所需机器资源少

部署简单,利于管理

容易进行横向扩展

风险大,一台宿主机挂了,master和etcd就都少了一套,集群冗余度受到的影响比较大

提示:本实验使用Keepalived+HAProxy架构实现Kubernetes的高可用。

初始准备 [root@master01 ~]# hostnamectl set-hostname master01 #其他节点依次修改 [root@master01 ~]# cat >> /etc/hosts << EOF 172.16.10.11 master01 172.16.10.12 master02 172.16.10.13 master03 172.16.10.21 worker01 172.16.10.22 worker02 172.16.10.23 worker03 EOF [root@master01 ~]# wget

提示:此操作仅需要在master01节点操作。
对于某些特性,可能需要升级内核,内核升级操作见《018.Linux升级内核》。4.19版及以上内核nf_conntrack_ipv4已经改为nf_conntrack。

互信配置

为了更方便远程分发文件和执行命令,本实验配置master01节点到其它节点的 ssh 信任关系。

[root@master01 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master01 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master02 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@master03 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker01 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker02 [root@master01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@worker03

提示:此操作仅需要在master01节点操作。

其他准备

[root@master01 ~]# vi environment.sh

#!/bin/sh #****************************************************************# # ScriptName: environment.sh # Author: xhy # Create Date: 2020-05-30 16:30 # Modify Author: xhy # Modify Date: 2020-05-30 16:30 # Version: #***************************************************************# # 集群 MASTER 机器 IP 数组 export MASTER_IPS=(172.16.10.11 172.16.10.12 172.16.10.13) # 集群 MASTER IP 对应的主机名数组 export MASTER_NAMES=(master01 master02 master03) # 集群 NODE 机器 IP 数组 export NODE_IPS=(172.16.10.21 172.16.10.22 172.16.10.23) # 集群 NODE IP 对应的主机名数组 export NODE_NAMES=(worker01 worker02 worker03) # 集群所有机器 IP 数组 export ALL_IPS=(172.16.10.11 172.16.10.12 172.16.10.13 172.16.10.21 172.16.10.22 172.16.10.23) # 集群所有IP 对应的主机名数组 export ALL_NAMES=(master01 master02 master03 worker01 worker02 worker03) [root@master01 ~]# source environment.sh [root@master01 ~]# chmod +x *.sh [root@master01 ~]# for all_ip in ${ALL_IPS[@]} do echo ">>> ${all_ip}" scp -rp /etc/hosts root@${all_ip}:/etc/hosts scp -rp k8sconinit.sh root@${all_ip}:/root/ ssh root@${all_ip} "bash /root/k8sconinit.sh" done

提示:Kubernetes 1.20.4可兼容的containerd版本最新为1.4.3。

集群部署 相关组件包

需要在每台机器上都安装以下的软件包:

kubeadm: 用来初始化集群的指令;

kubelet: 在集群中的每个节点上用来启动 pod 和 container 等;

kubectl: 用来与集群通信的命令行工具。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxypz.html