ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Kubernetes The Hard Way 计算资源篇:机器数据库、SSH 通道与主机名解析的完整落地方法

2026/9/6 18:30:56 拓冰建站 浏览量
Kubernetes The Hard Way 计算资源篇:机器数据库、SSH 通道与主机名解析的完整落地方法 Kubernetes The Hard Way 计算资源篇机器数据库、SSH 通道与主机名解析的完整落地方法【免费下载链接】kubernetes-the-hard-wayBootstrap Kubernetes the hard way. No scripts.项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-the-hard-way本篇基于 docs/03-compute-resources.md 展开讲解在 Kubernetes The Hard Way 实验环境中完成计算资源供给的全部操作设计机器数据库machines.txt并理解POD_SUBNET的集群级含义、为三台集群机器打通 root SSH 免密通道、批量设置主机名、构建并分发 hosts 查找表。读完本篇你将掌握一个单控制面 两工作节点的三机集群从裸机到可被主机名寻址的标准化供给流程以及这些主机名和 Pod 网段在后续控制面、工作节点、Pod 路由实验中的具体消费方式。1. 实验背景需要哪些机器根据 README 的说明本教程要求4 台连接在同一网络上的 ARM64 或 AMD64 虚拟机/物理机一台jumpbox操作跳板后续所有命令均从此机发出一台server承载全部控制面组件以及两台node-0、node-1工作节点容器最终运行其上。集群组件版本为 Kubernetes v1.32.x、containerd v2.1.x、CNI v1.6.x、etcd v3.6.x。本文档Lab 3的任务就是为后三台机器建立统一的主机资产台账并让它们之间以及它们与jumpbox之间可通过主机名互相 SSH 访问。2. 机器数据库 machines.txt整个教程的单一事实来源教程用一个纯文本文件作为machine database逐行记录每台机器的属性后续几乎所有批量脚本SSH 分发、主机名设置、hosts 生成、Pod 路由都通过while read循环解析这个文件。2.1 文件 SchemaIPV4_ADDRESS FQDN HOSTNAME POD_SUBNET四列含义列含义说明IPV4_ADDRESS机器内网 IPv4 地址要求各机器之间、以及机器与jumpbox之间互相可达地址本身可以任意规划FQDN完全限定域名用于127.0.1.1本机解析和 hosts 表HOSTNAME主机名jumpbox上 SSH 的目标名也是 Kubernetes API server 客户端调用时使用的名字以及工作节点向集群注册时上报的节点名POD_SUBNET该机器专属的 Pod IP 网段Kubernetes 为每个 Pod 分配一个 IPPOD_SUBNET就是分配给这台机器的独占地址范围。注意控制面机器server上不跑 Pod所以该行没有第四列2.2 示例内容原文档给出的示例IP 已脱敏实际地址按自己的网络环境填写XXX.XXX.XXX.XXX server.kubernetes.local server XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 10.200.0.0/24 XXX.XXX.XXX.XXX node-1.kubernetes.local node-1 10.200.1.0/24创建自己的machines.txt时请严格保持列与空格分隔的格式因为后续脚本依赖固定列位cut -d -f 4等提取字段。2.3 为什么 POD_SUBNET 如此重要POD_SUBNET不是摆设它是本教程 Pod 网络模型的核心数据。从仓库中两处下游用法可以印证其消费链路CNI 网桥配置configs/10-bridge.conf 中host-localIPAM 的ranges写的是占位符subnet: SUBNET。在 docs/09-bootstrapping-kubernetes-workers.md 中每登录一台 worker 前都会执行SUBNET$(grep ${HOST} machines.txt | cut -d -f 4)再用sed s|SUBNET|$SUBNET|g把网段替换进10-bridge.conf同时也替换进 configs/kubelet-config.yaml。也就是说每个 Pod 的 IP 都从machines.txt里那台机器自己的第四列网段中分配。跨节点路由docs/11-pod-network-routes.md 中server、node-0、node-1三台机器互相ip route add ${NODE_X_SUBNET} via ${NODE_X_IP}而这些SUBNET变量同样来自grep node-0 machines.txt | cut -d -f 4。没有这份网段表跨节点 Pod 通信的路由就无法建立。换句话说machines.txt的第四列在 Lab 3 里被写下的那一刻就已经决定了 Lab 9 和 Lab 11 里 Pod 网络的行为。3. 配置 SSH 访问后续所有配置动作都通过 SSH 下发因此需要先确认jumpbox能以root身份免密登录三台机器。3.1 启用 root SSH 登录默认的 Debian 安装出于安全考虑会禁用root的 SSH 登录。本教程为简化操作步骤选择开启它原文档也明确提示这是安全与便利的权衡Security is a tradeoff——生产环境不要这样做。在每台上以普通用户登录后su - root然后编辑/etc/ssh/sshd_config用sed将PermitRootLogin置为yes^#*同时匹配被注释和未注释的行sed -i \ s/^#*PermitRootLogin.*/PermitRootLogin yes/ \ /etc/ssh/sshd_config重启 SSH 服务使配置生效systemctl restart sshd如果机器本身已允许 root SSH 登录可跳过本小节。3.2 生成并分发 SSH 密钥以下命令均在jumpbox上执行。生成新的密钥对交互式提示中保存路径、passphrase 直接回车生成/root/.ssh/id_rsa与/root/.ssh/id_rsa.pubssh-keygenGenerating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub利用机器数据库把公钥批量拷贝到三台机器——这里while read IP FQDN HOST SUBNET把每行拆成四个 shell 变量SUBNET在本场景用不到但必须占位否则HOST会吞掉整个剩余行while read IP FQDN HOST SUBNET; do ssh-copy-id root${IP} done machines.txt验证免密登录已生效-n防止远程命令意外读取 stdin否则会吃掉machines.txt的后续行while read IP FQDN HOST SUBNET; do ssh -n root${IP} hostname done machines.txt期望输出三台机器各自的主机名server node-0 node-14. 批量设置主机名主机名在本实验中有三个关键作用jumpbox通过它执行远程命令Kubernetes 客户端不再用 IP 而是用server这个主机名访问 API servernode-0、node-1向集群注册时也使用主机名作为节点标识对应 configs/kubelet-config.yaml 中的registerNode: true注册流程。在jumpbox上执行逐台完成三件事改写/etc/hosts中的127.0.1.1本机条目、设置静态主机名、重启 hostnamed 服务while read IP FQDN HOST SUBNET; do CMDsed -i s/^127.0.1.1.*/127.0.1.1\t${FQDN} ${HOST}/ /etc/hosts ssh -n root${IP} $CMD ssh -n root${IP} hostnamectl set-hostname ${HOST} ssh -n root${IP} systemctl restart systemd-hostnamed done machines.txt验证while read IP FQDN HOST SUBNET; do ssh -n root${IP} hostname --fqdn done machines.txt期望输出server.kubernetes.local node-0.kubernetes.local node-1.kubernetes.local5. 生成主机查找表 hosts为了让server、node-0、node-1这些短主机名在所有机器上都能解析先构建一份共享的 hosts 片段。创建文件并写入标识头echo hosts echo # Kubernetes The Hard Way hosts逐行从machines.txt生成条目追加进去while read IP FQDN HOST SUBNET; do ENTRY${IP} ${FQDN} ${HOST} echo $ENTRY hosts done machines.txt检查生成结果cat hosts# Kubernetes The Hard Way XXX.XXX.XXX.XXX server.kubernetes.local server XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 XXX.XXX.XXX.XXX node-1.kubernetes.local node-16. 写入 /etc/hosts本地与远端6.1 追加到 jumpbox 本机cat hosts /etc/hosts验证/etc/hosts末尾出现新条目原有127.0.0.1 localhost、127.0.1.1 jumpbox等保持不变cat /etc/hosts127.0.0.1 localhost 127.0.1.1 jumpbox # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters # Kubernetes The Hard Way XXX.XXX.XXX.XXX server.kubernetes.local server XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 XXX.XXX.XXX.XXX node-1.kubernetes.local node-1此时即可直接以主机名 SSHfor host in server node-0 node-1 do ssh root${host} hostname doneserver node-0 node-16.2 追加到三台集群机器把hosts文件先scp到每台机器的 home 目录再追加进其/etc/hostswhile read IP FQDN HOST SUBNET; do scp hosts root${HOST}:~/ ssh -n \ root${HOST} cat hosts /etc/hosts done machines.txt完成后jumpbox与三台集群机器之间都可以完全用主机名互访后续 Lab 4证书签发起的所有文档都默认这一网络可达性已就绪。7. 完成检查清单在进入下一节CA 与 TLS 证书见 docs/04-certificate-authority.md前逐项确认machines.txt存在且server、node-0、node-1三行字段完整、node-0/node-1的POD_SUBNET网段互不重叠如10.200.0.0/24与10.200.1.0/24jumpbox对三台机器可ssh rootIP免密登录且hostname命令回显正确主机名三台机器hostname --fqdn输出*.kubernetes.local每台机器的/etc/hosts都包含# Kubernetes The Hard Way段落的三行条目用主机名而非 IP在jumpbox与集群机器之间互相 SSH 均能成功。至此集群的物理层供给完成机器可寻址、可登录、网段已规划为接下来的控制面与工作节点部署奠定了网络基础。【免费下载链接】kubernetes-the-hard-wayBootstrap Kubernetes the hard way. No scripts.项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-the-hard-way创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考