1、架构及服务
Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失效状态自动在其他Node拉起Pod,实现了应用层的高可用性。
针对Kubernetes集群,高可用性还应包含以下两个层面的考虑:Etcd数据库的高可用性和Kubernetes Master组件的高可用性。
Master节点扮演着总控中心的角色,通过不断与工作节点上的Kubelet进行通信来维护整个集群的健康工作状态。如果Master节点故障,将无法使用kubectl工具或者API做任何集群管理。
Master节点主要有三个服务kube-apiserver、kube-controller-mansger和kube-scheduler,其中kube-controller-mansger和kube-scheduler组件自身通过选择机制已经实现了高可用,所以Master高可用主要针对kube-apiserver组件,而该组件是以HTTP API提供服务,因此对他高可用与Web服务器类似,增加负载均衡器对其负载均衡即可,并且可水平扩容。
2、组件说明
APIserver:所有服务访问统一入口
controllerManager:维护副本的期望数目
scheduler:负责介绍任务,选择合适节点接受任务
ETCD:键值对数据库,存储K8S集群重要信息(持久化)
Kubectl :实现容器生命周期管理
Kubectl proxy:写入规则至ipvs
Coredns:可以为集群中的SVC创建一个A记录
Dashboard:B/S结构的访问体系
Ingress:官方实现的是4层代理,ingress实现的是7层代理(域名,主机名)
Federation:跨K8S集群调用
3、IP地址规划
高可用K8S集群为避免脑裂一般采用如三、五、七等奇数个mater节点,首先要有一个 master 节点,可以先将单一节点集群构建完毕,然后再让其他服务器加入组成三个master 节点高可用,然后再以工作节点 Node 加入。此文档为全新构建。
地址 | 主机名 | 内存&CPU | 角色 |
---|---|---|---|
10.208.1.190 | —— | —— | vip |
10.208.1.191 | k8s-master-01 | 2C & 4G | Master01 |
10.208.1.192 | k8s-master-02 | 2C & 4G | Master02 |
10.208.1.195 | k8s-master-03 | 2C & 4G | Master03 |
10.208.1.196 | k8s-node-01 | 2c & 4G | Node01 |
10.208.1.198 | k8s-node-02 | 2c & 4G | Node02 |
# 都开通直通上网,方便拉去镜像。
4、操作系统内核版本
#cat /etc/redhat-release
CentOS Stream release 8
5、修改hosts【所有节点】
必须配置,否则结点与master无法通讯
#cat >> /etc/hosts << EOF
10.208.1.190 master.k8s.io k8s-vip
EOF
6、修改hostname【各节点依次操作】
修改 10.208.1.191 服务器
#hostnamectl set-hostname k8s-master-01
修改 10.208.1.192 服务器
#hostnamectl set-hostname k8s-master-02
修改 10.208.1.195 服务器
#hostnamectl set-hostname k8s-master-03
修改 10.208.1.196 服务器
#hostnamectl set-hostname k8s-node-01
修改 10.208.1.198 服务器
#hostnamectl set-hostname k8s-node-02
7、关闭防火墙和selinux【所有节点】
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0
#注意以上语句的空格,复制到记事本粘贴,/etc前面有空格
8、关闭swap【所有节点】【必须】
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
9、设置系统【所有节点】
(1)针对于linux7以上,设置允许路由转发,不对bridge的数据进行处理
创建 /etc/sysctl.d/k8s.conf 文件
vim /etc/sysctl.d/k8s.conf
加入下面内容:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
(2)挂载br_nebrtfilter
modprobe br_netfilter
持久化:
echo "br_netfilter" >> /etc/modules-load.d/modules.conf
(3)生效配置文件
sysctl -p /etc/sysctl.d/k8s.conf
sysctl命令:用于运行时配置内核参数
查看是否生成相关文件
ls /proc/sys/net/bridge
(4)资源配置文件
/etc/security/limits.conf 是 Linux 资源使用配置文件,用来限制用户对系统资源的使用,末尾加入
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "* soft nproc 65536" >> /etc/security/limits.conf
echo "* hard nproc 65536" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf