news 2026/9/6 18:30:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-0node-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 文件 Schema

IPV4_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 分配一个 IP,POD_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 网络模型的核心数据。从仓库中两处下游用法可以印证其消费链路:

  1. 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里那台机器自己的第四列网段中分配。
  2. 跨节点路由:docs/11-pod-network-routes.md 中,servernode-0node-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,用sedPermitRootLogin置为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.pub):

ssh-keygen
Generating 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-1

4. 批量设置主机名

主机名在本实验中有三个关键作用:jumpbox通过它执行远程命令;Kubernetes 客户端不再用 IP 而是用server这个主机名访问 API server;node-0node-1向集群注册时也使用主机名作为节点标识(对应 configs/kubelet-config.yaml 中的registerNode: true注册流程)。

jumpbox上执行,逐台完成三件事:改写/etc/hosts中的127.0.1.1本机条目、设置静态主机名、重启 hostnamed 服务:

while read IP FQDN HOST SUBNET; do CMD="sed -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.local

5. 生成主机查找表 hosts

为了让servernode-0node-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-1

6. 写入 /etc/hosts:本地与远端

6.1 追加到 jumpbox 本机

cat hosts >> /etc/hosts

验证/etc/hosts末尾出现新条目(原有127.0.0.1 localhost127.0.1.1 jumpbox等保持不变):

cat /etc/hosts
127.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

此时即可直接以主机名 SSH:

for host in server node-0 node-1 do ssh root@${host} hostname done
server node-0 node-1

6.2 追加到三台集群机器

hosts文件先scp到每台机器的 home 目录,再追加进其/etc/hosts

while 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)前,逐项确认:

  1. machines.txt存在,且servernode-0node-1三行字段完整、node-0/node-1POD_SUBNET网段互不重叠(如10.200.0.0/2410.200.1.0/24);
  2. jumpbox对三台机器可ssh root@<IP>免密登录,且hostname命令回显正确主机名;
  3. 三台机器hostname --fqdn输出*.kubernetes.local
  4. 每台机器的/etc/hosts都包含# Kubernetes The Hard Way段落的三行条目;
  5. 用主机名(而非 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 18:28:57

ABS《钢质船舶建造与入级规范》核心逻辑与实操要点详解

简介&#xff1a;美国船级社&#xff08;ABS&#xff09;《钢质船舶建造与分类规则——内河及近海水道运营船舶适用》2023年7月版正式发布&#xff0c;面向船舶设计、建造、检验、航运及海事工程技术人员&#xff0c;为航行于河流和沿海水域的钢质船舶提供了从设计、建造到运营…

作者头像 李华
网站建设 2026/9/6 18:19:50

Wi-SUN FAN1.1深度解析:从协议升级到组网部署与认证测试

简介&#xff1a;面向物联网与智能城市/公用事业领域的工程师&#xff0c;Wi-SUN FAN 1.1中文翻译件完整呈现了该最新版无线网络技术规范&#xff0c;是设计、部署和调试Wi-SUN网络的基础参考。文档覆盖从物理层到传输层的完整协议栈架构&#xff0c;详细阐述可靠性目标、时间同…

作者头像 李华
网站建设 2026/9/6 18:19:49

5 分钟跑通 Qwerty Learner:英语打字练习与肌肉记忆的开源方案

5 分钟跑通 Qwerty Learner&#xff1a;英语打字练习与肌肉记忆的开源方案 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: htt…

作者头像 李华