更新时间:2024-03-18 GMT+08:00
分享

环境检查

操作系统和内核版本

详见安装介质小节。

  1. 最小安装,只需要最基础的软件包。

    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 启动参数

  1. 解决 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 中找到增加的,即代表更改成功。

  2. 关闭大页

    编辑/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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4396e46187ca5070219b81773c4e65088dac50cc

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 下。

分享:

    相关文档

    相关产品