LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

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