实验 9:引导 Kubernetes 工作节点¶
信息
这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。
在本实验中,您将引导两个 Kubernetes 工作节点。您将安装以下组件:runc、容器网络插件、containerd、kubelet 和 kube-proxy。
先决条件¶
从 jumpbox
将 Kubernetes 二进制文件和 systemd
单元文件复制到每个工作节点实例
for host in node-0 node-1; do
SUBNET=$(grep $host machines.txt | cut -d " " -f 5)
sed "s|SUBNET|$SUBNET|g" \
configs/10-bridge.conf > 10-bridge.conf
sed "s|SUBNET|$SUBNET|g" \
configs/kubelet-config.yaml > kubelet-config.yaml
scp 10-bridge.conf kubelet-config.yaml \
root@$host:~/
done
for host in node-0 node-1; do
scp \
downloads/runc.amd64 \
downloads/crictl-v1.32.0-linux-amd64.tar.gz \
downloads/cni-plugins-linux-amd64-v1.6.2.tgz \
downloads/containerd-2.0.3-linux-amd64.tar.gz \
downloads/kubectl \
downloads/kubelet \
downloads/kube-proxy \
configs/99-loopback.conf \
configs/containerd-config.toml \
configs/kubelet-config.yaml \
configs/kube-proxy-config.yaml \
units/containerd.service \
units/kubelet.service \
units/kube-proxy.service \
root@$host:~/
done
本实验中的命令必须在每个工作节点实例上单独运行:node-0
和 node-1
。仅显示 node-0
的步骤。您必须在 node-1
上重复完全相同的步骤和命令。
使用 ssh
命令登录到工作节点 node-0
实例。
ssh root@node-0
供应 Kubernetes 工作节点¶
安装操作系统依赖项
dnf -y update
dnf -y install socat conntrack ipset tar
socat
二进制文件支持kubectl port-forward
命令。
禁用 Swap¶
如果您启用了 swap,kubelet 将无法启动。建议禁用 swap 以确保 Kubernetes 提供适当的资源分配和服务质量。
验证 swap 是否已启用
swapon --show
如果输出为空,则表示 swap 未启用。如果输出不为空,请运行以下命令立即禁用 swap
swapoff -a
为确保重启后 swap 保持禁用状态,请在 /etc/fstab
文件中注释掉自动挂载 swap 卷的行。输入
sudo sed -i '/swap/s/^/#/' /etc/fstab
创建安装目录
mkdir -p \
/etc/cni/net.d \
/opt/cni/bin \
/var/lib/kubelet \
/var/lib/kube-proxy \
/var/lib/kubernetes \
/var/run/kubernetes
安装工作节点二进制文件
mkdir -p containerd
tar -xvf crictl-v1.32.0-linux-amd64.tar.gz
tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd
tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/
mv runc.amd64 runc
chmod +x crictl kubectl kube-proxy kubelet runc
mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/
mv containerd/bin/* /bin/
配置 CNI 网络¶
创建 bridge
网络配置文件
mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/
配置 containerd
¶
安装 containerd
配置文件
mkdir -p /etc/containerd/
mv containerd-config.toml /etc/containerd/config.toml
mv containerd.service /etc/systemd/system/
配置 Kubelet¶
创建 kubelet-config.yaml
配置文件
mv kubelet-config.yaml /var/lib/kubelet/
mv kubelet.service /etc/systemd/system/
配置 Kubernetes Proxy¶
mv kube-proxy-config.yaml /var/lib/kube-proxy/
mv kube-proxy.service /etc/systemd/system/
注意
尽管这被认为是不安全的做法,但如果您在启动所需的 systemd 服务时遇到任何问题,可能需要暂时或永久禁用 SELinux。正确的解决方法是调查并使用 ausearch、audit2allow 等工具创建所需的策略文件。
解决 SELinux 问题并禁用它的方法是运行以下命令
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
启动工作节点服务¶
systemctl daemon-reload
systemctl enable containerd kubelet kube-proxy
systemctl start containerd kubelet kube-proxy
验证¶
本教程中创建的计算实例没有权限完成此验证部分。请从 jumpbox
计算机运行以下命令。
列出已注册的 Kubernetes 节点
ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig"
NAME STATUS ROLES AGE VERSION
node-0 Ready <none> 1m v1.32.0
在完成此实验中 node-0
和 node-1
上的所有先前步骤后,kubectl get nodes
命令的输出应显示
NAME STATUS ROLES AGE VERSION
node-0 Ready <none> 1m v1.32.0
node-1 Ready <none> 10s v1.32.0
作者:Wale Soyinka
贡献者:Steven Spencer, Ganna Zhyrnova