kubernetes环境设置

半兽人 发表于: 2022-08-16   最后更新时间: 2023-02-01 10:37:23  
{{totalSubscript}} 订阅, 3,093 游览

系统初始化

主机名

设置永久主机名称,然后重新登录:

sudo hostnamectl set-hostname m1
  • 设置的主机名保存在 /etc/hostname 文件中;

修改每台机器的 /etc/hosts 文件,添加主机名和 IP 的对应关系:

$ cat /etc/hosts
172.27.129.111 m1
172.27.129.112 m2
172.27.129.113 m3
172.27.129.114 n1
172.27.129.115 n2

设置系统时区

# 调整系统 TimeZone
sudo timedatectl set-timezone Asia/Shanghai

# 将当前的 UTC 时间写入硬件时钟
sudo timedatectl set-local-rtc 0

# 重启依赖于系统时间的服务
sudo systemctl restart rsyslog 
sudo systemctl restart crond

安装依赖包

在每台机器上安装依赖包:

CentOS:

sudo yum install -y epel-release
sudo yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

Ubuntu:

sudo apt-get install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
  • ipvs 依赖 ipset;

关闭防火墙

在每台机器上关闭防火墙:

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
sudo iptables -P FORWARD ACCEPT

关闭 swap 分区

如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为 false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:

$ sudo swapoff -a

为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:

$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

关闭 SELinux

关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied

$ sudo setenforce 0
$ grep SELINUX /etc/selinux/config 
SELINUX=disabled
  • 修改配置文件,永久生效;

关闭 dnsmasq

linux 系统开启了 dnsmasq 后(如 GUI 环境),将系统 DNS Server 设置为 127.0.0.1,这会导致 docker 容器无法解析域名,需要关闭它:

$ sudo service dnsmasq stop
$ sudo systemctl disable dnsmasq

设置系统参数

$ cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
$ sudo cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
$ sudo sysctl -p /etc/sysctl.d/kubernetes.conf
$ sudo mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct

加载内核模块

$ sudo modprobe br_netfilter
$ sudo modprobe ip_vs

无密码 ssh 登录其它节点

如果没有特殊指明,本文档的所有操作均在 m1 节点上执行,然后远程分发文件和执行命令。

设置 m1 可以无密码登录所有节点的 root 账户:

ssh-keygen -t rsa
ssh-copy-id root@m1
ssh-copy-id root@m2
ssh-copy-id root@m3
ssh-copy-id root@n1
ssh-copy-id root@n2

这样,当你有多台节点的时候,你需要批量操作,就可以这样了。

export NODE_IPS=(m1 m2 m3 n1 n2)
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp /k8s/cri/containerd-1.6.8-linux-amd64.tar.gz root@${node_ip}:/k8s/cri
    ssh root@${node_ip} "tar Cxzvf /usr/local /k8s/cri/containerd-1.6.8-linux-amd64.tar.gz"
  done
更新于 2023-02-01

a烫烫烫烫烫 14天前

依赖包中的libseccomp在ubuntu和centos中分别是libseccomp-dev和libseccomp-devel

TANG 2年前
sudo sudo iptables -P FORWARD ACCEPT
半兽人 -> TANG 2年前

感谢,已优化。

查看kubernetes更多相关的文章或提一个关于kubernetes的问题,也可以与我们一起分享文章