集群准备
为了安装高可用集群,这里准备了 6 台 CentOS 7.9 的虚拟机,具体规划如下:
主机 | IP | 系统 | CPU / 内存 / 硬盘 | 说明 |
---|---|---|---|---|
master-01 | 192.168.200.101 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Master 节点 |
master-02 | 192.168.200.102 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Master 节点 |
master-03 | 192.168.200.103 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Master 节点 |
worker-01 | 192.168.200.104 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Worker / Node 节点 |
worker-02 | 192.168.200.105 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Worker / Node 节点 |
worker-03 | 192.168.200.106 | CentOS Linux release 7.9.2009 | 4C/4G/20G | Worker / Node 节点 |
所需安装的各个软件版本:
软件名称 | 版本号 | 说明 | 下载地址 |
---|---|---|---|
docker-ce | 20.10.18 | docker 引擎 | 点击下载 |
docker-ce-cli | 20.10.18 | docker 引擎的命令行 | 点击下载 |
docker-ce-rootless-extras | 20.10.18 | docker-ce 需要的依赖 | 点击下载 |
docker-scan-plugin | 0.17.0 | docker-ce-cli 需要的依赖 | 点击下载 |
containerd.io | 1.6.8 | 守护进程,独立于 docker 工作,管理容器的生命周期 | 点击下载 |
kernel-ml | 5.11.16 | Linux 内核 | 点击下载 |
kernel-ml-devel | 5.11.16 | Linux 内核 | 点击下载 |
以上所有机器都需要执行初始化操作!
关闭防火墙 / Selinux / Swap
为了避免额外的干扰,需要关闭防火墙,对于公有云,内网端口一般全开放,外网端口通过安全组控制:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 Selinux
sed -i "s#^SELINUX=.*#SELINUX=disabled#g" /etc/selinux/config
setenforce 0
# 关闭 swap 分区,Swap 会影响性能
swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
YUM 源配置(云服务器不需要)
本地或者自建服务器都需要配置 YUM 源,如果是云服务器由于本身就有对应云的 YUM 源,不需要配置:
# 备份旧的 yum 源
cd /etc/yum.repos.d/
mkdir backup-$(date +%F)
mv *repo backup-$(date +%F)
# 添加阿里云 yum 源
curl http://mirrors.aliyun.com/repo/Centos-7.repo -o ali.repo
基础依赖安装
由于服务器最小化安装,需要安装一些常用的依赖和工具,否则后面安装可能会报错:
# 安装 epel 源
yum -y install epel-release
yum clean all
yum makecache
# 安装常用依赖
yum -y install gcc glibc gcc-c++ make cmake net-tools screen vim lrzsz tree dos2unix lsof \
tcpdump bash-completion wget ntp setuptool openssl openssl-devel bind-utils traceroute \
bash-completion bash-completion-extras glib2 glib2-devel unzip bzip2 bzip2-devel libevent libevent-devel \
ntp expect pcre pcre-devel zlib zlib-devel jq psmisc tcping yum-utils device-mapper-persistent-data \
lvm2 git device-mapper-persistent-data bridge-utils container-selinux binutils-devel \
ncurses ncurses-devel elfutils-libelf-devel ack
# 升级服务器
yum -y update
配置时间同步(云服务器不需要)
本地或者自建服务器都需要配置时间同步,如果是云服务器由于本身就有对应云的时间同步机制,不需要配置
echo "# 互联网时间同步" >> /var/spool/cron/root
echo "*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com >/dev/null 2>&1" >> /var/spool/cron/root
系统优化
对系统打开文件数进行修改,提升性能:
cat >> /etc/security/limits.conf << EOF
# 打开文件优化配置
* soft nofile 655360
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF
Master 节点互相免密
在三台 Master 节点执行以下操作:
ssh-keygen -t rsa
然后执行:
cd ~
# 定义 master 列表
MASTER_LIST=(
192.168.200.101
192.168.200.102
192.168.200.103
)
# 配置免密登录
for i in ${MASTER_LIST[@]};do
ssh-copy-id -i .ssh/id_rsa.pub root@$i
done
内核升级
在 Kubernetes 的 Github 仓库中:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.25.md
有提到关于内核版本的问题:
Faster mount detection for linux kernel 5.10+ using openat2 speeding up pod churn rates. On Kernel versions less 5.10, it will fallback to using the original way of detecting mount points i.e by parsing /proc/mounts.
这意味着内核 5.10 版本以后会使用 openat2 进行更快的挂载检测,所有可以将内核升级到 5.10 以后,但没必要最新。
这里使用的是 5.11.16
版本,更新于 2021 年 4 月。如果想安装其它版本可以去下面网站下载:
创建用于存放安装包的目录:
mkdir -p /ezops/packages
将下载好的内核安装包上传到所有机器的 /ezops/packages
目录:
执行安装:
cd /ezops/packages
yum localinstall -y kernel-ml*
# 设置内核启动顺序
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
# 查看默认内核
grubby --default-kernel
安装 ipvsadm
节点通信需要用到 LVS,所有需要安装 ipvsadm:
yum -y install ipvsadm ipset sysstat conntrack libseccomp
配置 ipvs 模块(内核 4.19 版本以前使用 nf_conntrack_ipv4
,以后使用 nf_conntrack
):
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
cat > /etc/modules-load.d/ipvs.conf << EOF
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
systemctl enable --now systemd-modules-load
内核调优
添加内核调优参数,某些参数对 Kubernetes 集群很重要:
cat >> /etc/sysctl.d/user.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
完成后就可以重启服务器:
reboot
重启完成查看 ipvs 的配置效果:
lsmod | grep --color=auto -e ip_vs -e nf_conntrack
容器运行时安装
由于 Kubernetes 1.24 版本之后移除了 dockershim,所有无法直接使用 docker 作为容器运行时。但还是需要安装 docker,使用 containerd 作为容器运行时。
-
将下载好的 docker 相关安装包上传到
/ezops/packages
目录:
- 执行安装操作:
cd /ezops/packages
yum -y localinstall docker* containerd*
- 配置 containerd 模块:
cat > /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF
# 加载模块
modprobe -- overlay
modprobe -- br_netfilter
- 配置 containerd 配置文件:
# 生成默认配置
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
# 将 Cgroup 改为 Systemd
sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
低版本可能没有 SystemdCgroup 配置,可以 vim 搜索 containerd.runtimes.runc.options
关键字,然后在下面添加一项:
SystemdCgroup = true
- 修改
sandbox_image
的Pause
镜像地址,原因是国内没法访问到:
sed -i "s#k8s.gcr.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6#g" /etc/containerd/config.toml
- 添加开机启动 containerd:
systemctl daemon-reload
systemctl enable --now containerd
- 配置 crictl 客户端连接的运行时位置:
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
到此,系统初始化完成,如果是本地虚拟机的就可以做个快照保存现在的状态了,因为后面会使用不同方式安装 Kubernetes。
标签:02,初始化,Kubernetes,containerd,devel,etc,yum,内核,docker From: https://www.cnblogs.com/ezops/p/16704533.html