Kubeadm - K8S1.20 - 高可用集群部署
注意:
master节点cpu核心数要求大于2
- 最新的版本不一定好,但相对于旧版本,核心功能稳定,但新增功能、接口相对不稳
- 学会一个版本的 高可用部署,其他版本操作都差不多
- 宿主机尽量升级到CentOS 7.9
- 内核kernel升级到 4.19+ 这种稳定的内核
- 部署k8s版本时,尽量找 1.xx.5 这种大于5的小版本(这种一般是比较稳定的版本)
Kubernetes 环境准备
1. 基础配置
- 关闭防火墙:
systemctl stop firewalld systemctl disable firewalld
- 关闭 SELinux:
setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config
- 清空 iptables 规则:
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
- 关闭 swap 交换:
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
2. 修改主机名
- 主机名设置:
# 在 master01 上 hostnamectl set-hostname master01 # 在 master02 上 hostnamectl set-hostname master02 # 在 master03 上 hostnamectl set-hostname master03 # 在 node01 上 hostnamectl set-hostname node01 # 在 node02 上 hostnamectl set-hostname node02
3. 修改 hosts 文件
- 添加 IP 映射:
vim /etc/hosts # 添加以下内容 192.168.80.10 master01 192.168.80.11 master02 192.168.80.12 master03 192.168.80.20 node01 192.168.80.30 node02
4. 时间同步
- 安装 ntpdate:
yum -y install ntpdate
- 设置时区:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo 'Asia/Shanghai' >/etc/timezone
- 同步时间:
ntpdate time2.aliyun.com
- 设置定时任务:
systemctl enable --now crond crontab -e # 添加以下内容 */30 * * * * /usr/sbin/ntpdate time2.aliyun.com
5. Linux 资源限制
- 修改 limits.conf:
vim /etc/security/limits.conf # 添加以下内容 * soft nofile 65536 * hard nofile 131072 * soft nproc 65535 * hard nproc 655350 * soft memlock unlimited * hard memlock unlimited
6. 升级内核
- 下载内核 RPM 包:
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm -O /opt/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
- 安装内核:
cd /opt/ yum localinstall -y kernel-ml*
- 设置默认内核并重启:
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)" grubby --default-kernel reboot
7. 调整内核参数
- 创建 k8s.conf:
cat > /etc/sysctl.d/k8s.conf <<EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 fs.may_detach_mounts = 1 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 fs.file-max=52706963 fs.nr_open=52706963 net.netfilter.nf_conntrack_max=2310720 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl =15 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_orphans = 327680 net.ipv4.tcp_orphan_retries = 3 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.ip_conntrack_max = 65536 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_timestamps = 0 net.core.somaxconn = 16384 EOF
- 生效参数:
sysctl --system
8. 加载 ip_vs 模块
- 加载模块:
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
Kubernetes 集群部署
在所有节点上安装 Docker
- 安装必要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker 仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
- 配置 Docker
- 创建 Docker 配置文件目录:
mkdir /etc/docker
- 编辑
daemon.json
文件以配置
- 创建 Docker 配置文件目录: