环境检查
操作系统和内核版本
详见安装介质小节。
- 最小安装,只需要最基础的软件包。
UOS 需要手动修改配置文件,开始部署后,修改/cpaas/conf/check_list.json 文件,找到"type": "os" 这一行,在其上增加 "enable": false, 如下图:
2. xfs 碎片
3. kmem 问题链接:
https://access.redhat.com/solutions/532663
https://github.com/opencontainers/runc/issues/1725
https://github.com/kubernetes/kubernetes/issues/61937
https://github.com/kubernetes/kubernetes/issues/61937#issuecomment-567042968
https://github.com/alauda/kube-ovn/wiki/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C
grub 启动参数
- 解决 kmem
编辑/etc/default/grub (centos\Red Hat\tlinux) 或/boot/efi/EFI/kylin/grub.cfg(麒麟)文件,在GRUB_CMDLINE_LINUX= 这一行,在 crashkernel 后增加 cgroup.memory=nokmem 参数并执行grub2-mkconfig -o /boot/grub2/grub.cfg命令并重启后,能在 /proc/cmdline 中找到增加的,即代表更改成功。
- 关闭大页
编辑/etc/default/grub (centos\Red Hat\tlinux) 或/boot/efi/EFI/kylin/grub.cfg(麒麟)文件,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never,并执行grub2-mkconfig -o /boot/grub2/grub.cfg 然后重启服务器。按说明这一列中的图片所述方式检查。
arm 架构下,部署数据服务的 redis 服务,如果不关闭会严重影响性能
内核模块
网络内核模块要求:
- 如果是 Red Hat,且 version<4.18.0,或者不是 readhat,且version<4.19.0,则需要检查 nf_conntrack_ipv4,如果开启了 IPv6,还需要检查 nf_conntrack_ipv6;
- 如果使用kube-ovn,需要检查:“geneve”, “openvswitch”;
- 以下模块都需要检查:“ip_vs”, “ip_vs_rr”, “ip_vs_wrr”, “ip_vs_sh”。
以 centos 7 为例,以 root 权限执行:
cat <<EOF > /etc/modules-load.d/cpaas.conf iptable_nat EOF
然后重启服务器,执行 lsmod | grep iptable_nat 命令发现有 iptables_nat 模块即待办配置成功。
用户权限
root。
可以接受通过非 root 用户 ssh 登录,再 su - 成 root 用户
sshd 配置
- 各个服务器必须允许 global 集群的各个节点通过 ssh 远程登录;
- /etc/ssh/sshd_config 配置文件中 UseDNS 和 UsePAM 参数需为 no。
如果不是 root 用户,需要配置 /etc/sudoers 文件,做到这个用户执行 sudo 命令,不需要输入密码;
如果 dns 没有设置反向解析,有概率因此造成超时失败
swap
关闭。
如果不满足,系统会有一定几率出现 io 飙升,造成 docker 卡死
防火墙
关闭。
Kubernetes 官方要求
selinux
关闭。
Kubernetes 官方要求
时间同步
所有服务器要求时间必须同步,误差不得超过 10 秒。
docker 和 Kubernetes 官方要求
时区
所有服务器时区必须统一。
设置为 Asia/Shanghai
/etc/sysctl.conf 内核参数
- vm.max_map_count=262144
- net.ipv4.ip_forward=1
- vm.drop_caches=3
- net.ipv4.tcp_tw_recycle=0
- net.ipv4.tcp_mtu_probing=1
- ipv4.conf.all.rp_filter=0
- ipv4.conf.eth0.rp_filter=0
- net.ipv4.conf.default.rp_filter=0
- ipv6.disable=0
vm.max_map_count是 es 运行的服务器的要求
net.ipv4.ip_forward是Kubernetes 要求
关闭
https://www.cnblogs.com/wx170119/p/11995533.html
https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
rp_filter 相关配置,是两个不同模式的calico子网内的组件互相通信需要
hostname 格式
获取节点的 hostname,当 hostname 做节点名称时不能重复,最多 36 个字符。并且满足以下要求:
- 只能包含小写字母、数字,以及 '-' 和 '.'
- 不能包含 ".-",".."和"-."
- 须以字母数字开头
- 须以字母数字结尾
/etc/hosts
所有服务器可以通过 hostname 解析成 ip,可以将 localhost 解析成 127.0.0.1
hosts 文件内,不能有重复的 hostname
core 文件
关闭core文件的生成,执行ulimit -c 0 关闭,并且在/etc/profile 文件内增加'ulimit -S -c 0' 这一行
某些情况下,pod 内的进程重启,会在 pod 内创建 core 文件,大量占用磁盘空间,最终 pod 异常退出,甚至拖累宿主机
/etc/resolv.conf 的要求
如果有search 域 ,可能会造成解析 svc 错误,需要删掉这个文件中 search 字段。
/etc/resolv.conf 文件必须存在,并且有 nameserver 的配置项,并且不允许配置 127 开头的地址。
DefaultTasks
执行systemctl show --property=DefaultTasksMax 命令,如果返回的值不是infinity 或18446744073709551615 这样的很大的数字,就需要更改
修改/etc/systemd/system.conf 文件,将DefaultTasksMax 改成DefaultTasksMax=infinity。
影响范围:在单点或标准部署架构下,global 平台也当业务集群使用,这个配置会影响客户业务服务的数量,会在客户起了较多业务服务的时候,部分 pod 异常。
apparmor
systemctl stop apparmor.service && systemctl disable apparmor.service;
修改 /etc/default/grub,在GRUB_CMDLINE_LINUX 中增加 apparmor=0。
如果使用 UOS 操作系统,且 runtime 是 containerd 1.6.4或之后的版本,需要禁用 apparmor ,否则部署平台的时候会报错。
软件包&系统工具
- 主机上必须存在的系统工具有:ip, ss, tar, swapoff, modprobe, sysctl, md5sum,scp 和 sftp 二者中必须包含其中一个;
- 欧拉系统必须安装bc;
- 用户部署 topolvm 和 rook 的时,必须安装 lvm2。
移除软件包
麒麟操作系统 (kylin) 默认安装了runc,和平台部署的runc 冲突,在部署前必须移除runc
访问 tmp 目录
账号必须有权限在 /tmp 目录下执行 ls 和 cat 命令。
GPU 设备
使用 GPU 设备时检查设备是否存在。
CPU 核
CPU 核数必须不小于 2。
内存大小
内存不小于 2G。
检查 kubelet 服务
不能存在 /etc/systemd/system/kubelet.service 文件。
默认路由
服务器有 default 路由或指向 0.0.0.0 这个地址的路由。
端口是否被占用
检查以下监听端口是否被占用:
- 所有须检查的端口:10249, 10250, 10256;
- master节点:2379, 2380, 6443, 10249, 10250, 10251, 10252, 10256;
- kube-ovn端口:6641, 6642;
- calico端口:179。
网卡
集群和节点配置的网卡都存在。
硬件架构
节点的硬件架构(X86、ARM)必须与集群的硬件架构相同。
IP 地址
IP 地址必须存在。如果开启了 IPv6 地址,IPv6 地址也必须存在。
节点ip不可为回环ip
- 127.0.0.1
- 0:0:0:0:0:0:0:0或::节点ip不可为组播地址
- 224.0.0.0到239.255.255.255
- FF开头的IPv6地址,节点ip不可为链路本地地址
- 169.254.0.0/16* 地址块
- fe80::/10*地址块:节点ip不可为全0地址;节点ip不可为广播地址
- 255.255.255.255
IP 段
Docker 所需网段 172.16.x.x - 172.32.x.x 的 IP 未被占用。
如果该网段的 IP 已被占用且无法更改,请修改所有节点上的 Docker 的配置文件,增加 bip 参数,避免 Docker 使用被占用 IP。
节点联通性
节点及其 SSH 端口能够正常访问。
节点是否能访问平台
节点能够通过平台地址访问平台。
节点是否能访问平台镜像仓库
节点能够访问平台的镜像仓库。
节点 IP 是否在已配置的任一网段中
节点 IP 不在已配置的任一网段(默认子网网段、容器网段、Service 网段、Join 网段)中。
检查 CIDR
- 默认子网为 underlay 场景下,对于节点 IP 是否在默认子网、Service 网段、Join 网段内不做校验。
- 对于默认子网为非 underlay 场景下需满足:节点 IP(包括 IPv6) 不在已配置的任一网段(默认子网网段、容器网段、Service 网段、Join 网段)中。
访问 Master 端口
检查机器到所有master的各个端口连通性:[6443, 2379, 2380]。
检查 pki 目录
查看目标机器上,/var/lib/kubelet/pki 目录能为空或者不存在。
检查 cri 目录空间
检查指定目录(/var/lib/containerd或/var/lib)当前可用大小。
检查超时
目前检查默认是 110s 左右。
检查不能存在的目录
/var/log/pods 目录不能存在。
/usr/bin 服务
"docker", "containerd", "runc" 这些服务如果存在,必须是在 /usr/bin 下。