首页 > 其他分享 >02. Kubernetes - 集群初始化

02. Kubernetes - 集群初始化

时间:2022-09-18 11:57:17浏览次数:96  
标签:02 初始化 Kubernetes containerd devel etc yum 内核 docker

集群准备

为了安装高可用集群,这里准备了 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 月。如果想安装其它版本可以去下面网站下载:

http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/

创建用于存放安装包的目录:

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 作为容器运行时。

  1. 将下载好的 docker 相关安装包上传到 /ezops/packages 目录:


  1. 执行安装操作:
cd /ezops/packages
yum -y localinstall docker* containerd*

  1. 配置 containerd 模块:
cat > /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF

# 加载模块
modprobe -- overlay
modprobe -- br_netfilter

  1. 配置 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

  1. 修改 sandbox_imagePause 镜像地址,原因是国内没法访问到:
sed -i "s#k8s.gcr.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6#g" /etc/containerd/config.toml

  1. 添加开机启动 containerd:
systemctl daemon-reload
systemctl enable --now containerd

  1. 配置 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

相关文章

  • 报告分享|中国音数协游戏工委:2022中国移动游戏市场广告营销报告
    全文链接:http://tecdat.cn/?p=28490中国音数协游戏工委、中国游戏产业研究院、京师游戏研究实验室、CC-Smart新传智库、腾讯广告共同发布《2022中国移动游戏市场广告营销......
  • 报告分享|益普索Ipsos:2022医疗行业数字化营销蓝皮书
    全文链接:http://tecdat.cn/?p=28492 01 、走到哪:医疗企业进行数字化营销转型的前提条件和发展环境日臻完善,但医疗行业数字化营销目前的能力和现处的阶段尚不足以完全支......
  • 报告分享|2022年企业直播发展与应用研究报告
    全文链接:http://tecdat.cn/?p=28513疫情以来,企业直播在市场中掀起应用热潮,各行业企业积极拥抱直播业态,将直播作为企业数字化转型的基础设施,与业务经营各环节深入融合。于......
  • CCPC2022 网络赛 Substring Match
    SubstringMatch给定长为\(n\)的文本串\(S\)和长为\(m\)的模式串\(T\),求\(T\)在\(S\)中能匹配的最长的子串的长度。\(T\)中有不超过200个大写字母。大写字母能匹配任意数......
  • 总结一周(2022.9.18)
    1.使用Springsecurity的时候,会默认跳到Springsecurity的界面,并且通过账户名为user,自动生成的密码来进行登录 2.在Springboot进行测试运行的时候为什么SYSUserMapper为......
  • 2022.9.11———HZOI【CSP-S模拟3】游寄
    \(Write\In\Front\)“没啥事就写博客呗”\(Rank36/43\)得分\(0+15+0+5=20pts\)我草了开局直接冲\(T1\),想了个差不多的贪心就开始莽,莽了一会发现假了,然后......
  • 20201320第三周学习笔记
    sh编程sh脚本sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。创建mysh:1#!/bin/bash2#commentline3echohello 使用chmod-xm......
  • # HEOI-2022联合省选游记(寄)
    HEOI-2022联合省选游记(寄)Day0突然得知明天就省选,总之就是非常慌。晚上想找一下吃的,结果只找出来了两块德芙Day17:40,吃完饭,光速跑到了桥下。得知要从宿舍楼那边走,于是......
  • 2022-09-17 期货市场总结,总结三买的形成与失败
    沪铜主连9-15-20221.日线级别向上,但是有回踩(趋势)2.30分钟一笔下跌,开始出现阳线反抽,阴线假突破(结构)3.出现5分钟开始向上。但是开盘第一根和第二根,只看k线是不太确定,但......
  • Photoshop2020_ps2020中英版
    Photoshop2020可以创建和增强照片、插图和3D图稿,设计网站和移动应用程序,编辑视频,模拟真实生活画作等等。ps里有让您的想法变成真所需的一切,是您的创意百宝箱!Photoshop2......