Systemd-nspawn 安装 Kubernetes
主机安装 Kubernetes 会弄乱系统,虚拟安装太占系统资源,不利于低配置机器搭建分布式环境。所以在容器里安装 Kubernetes 是比较合测试场景的,低配硬件也能有畅快体验。
参考 Kubernetes 安装,主机的系统准备保持不变。
因为 Kubernetes 是会改动到主机配置的,所以在容器里面运行需要手动为主机配置这些信息:
cat << EOF >> sysctl.conf
kernel.panic_on_oops = 1
kernel.panic = 10
vm.overcommit_memory = 1
net.netfilter.nf_conntrack_max = 524288
EOF
sysctl -p
这个 hashsize 配置后系统还是记不住,如果记不住需要执行:
hashsize_value_in_log=131072
echo $hashsize_value_in_log > /sys/module/nf_conntrack/parameters/hashsize
创建一个全新的系统,以 k8s 为名的节点:
debootstrap --include=systemd,dbus stable k8s http://mirrors.ustc.edu.cn/debian
对系统进行基础配置:
systemd-nspawn -D k8s
passwd
exit
Systemd-nspawn 对网络的支持非常有限,由于需要一个定点 IP,这里可以采用 vlan,运行 Kubernetes 需要启动超级权限的容器:
ip link add vlan0 link enp0s25 type ipvlan
SYSTEMD_SECCOMP=0 systemd-nspawn -D k8s -b --network-ipvlan=vlan0 --capability=all
ip a add 192.168.0.230/24 dev iv-vlan0
ip l set iv-vlan0 up
ip r add default via 192.168.0.1 dev iv-vlan0
现在在容器内安装一些需要的包:
apt install -y apt-transport-https curl gnupg \
ipset ipvsadm conntrack socat
Kubernetes 需要 /dev/kmsg
,在容器内创建一个假链,不要使用主机的:
echo 'L /dev/kmsg - - - - /dev/null' > /etc/tmpfiles.d/kmsg.conf
systemctl start systemd-tmpfiles-setup
安装 kubeadm 的过程跟物理机是一样的。在 kubeadm init
的时候需要忽略一些系统的错误:
kubeadm init --config kube-default.yaml --ignore-preflight-errors=SystemVerification