实验 3:配置计算资源¶
信息
这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。
Kubernetes 需要一组机器来托管 Kubernetes 控制平面和最终运行容器的工作节点。在本实验中,您将提供设置 Kubernetes 集群所需的机器。
机器数据库¶
本教程将利用一个文本文件作为机器数据库,用于存储设置 Kubernetes 控制平面和工作节点时将使用的各种机器属性。以下模式代表机器数据库中的条目,每行一个条目。
IPV4_ADDRESS FQDN HOSTNAME POD_SUBNET
每一列对应一个机器 IP 地址 IPV4_ADDRESS
、完全限定域名 FQDN
、主机名 HOSTNAME
以及 IP 子网 POD_SUBNET
。Kubernetes 为每个 pod
分配一个 IP 地址,POD_SUBNET
代表集群中每台机器用于此目的的唯一 IP 地址范围。
下面是一个机器数据库示例,与创建本教程所用的数据库类似。请查看隐藏的 IP 地址。您可以为您的机器分配任何 IP 地址,只要它们彼此之间以及与 jumpbox
可达即可。
cat machines.txt
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
文件,其中包含您将用于创建 Kubernetes 集群的三台机器的详细信息。您可以参考上面的示例机器数据库来添加您的机器的详细信息。
配置 SSH 访问¶
您将使用 SSH 来配置集群中的机器。验证您是否对机器数据库中列出的每台机器都具有 root
SSH 访问权限。您可能需要通过更新 sshd_config
文件并重新启动 SSH 服务器来为每台节点启用 root SSH 访问。
启用 root SSH 访问¶
如果您对每台机器都具有 root
SSH 访问权限,则可以跳过此部分。
新安装的 Rocky Linux
默认禁用 root
用户的 SSH 访问。出于安全原因,root
用户对类 Unix 系统拥有完全的管理控制权。弱密码对于联网的机器来说非常糟糕。如前所述,您将启用 root
通过 SSH 访问,以简化本教程的步骤。安全是一种权衡;在这种情况下,您正在优化便利性。
使用 SSH 和您的用户帐户登录到每台机器,然后使用 su
命令切换到 root
用户。
su - root
编辑 /etc/ssh/sshd_config
SSH 守护程序配置文件,并将 PermitRootLogin
选项设置为 yes
。
sed -i \
's/^#PermitRootLogin.*/PermitRootLogin yes/' \
/etc/ssh/sshd_config
重新启动 sshd
SSH 服务器以加载更新的配置文件。
systemctl restart sshd
生成并分发 SSH 密钥¶
在这里,您将为 server
、node-0
和 node-1
机器生成并分发 SSH 密钥对,您将使用这些密钥对在此教程中对这些机器执行命令。请从 jumpbox
机器运行以下命令。
生成新的 SSH 密钥
ssh-keygen
按 Enter 接受此处所有提示的默认值。
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
将 SSH 公钥复制到每台机器
while read IP FQDN HOST SUBNET; do
ssh-copy-id root@${IP}
done < machines.txt
添加每个密钥后,验证 SSH 公钥访问是否正常工作。
while read IP FQDN HOST SUBNET; do
ssh -n root@${IP} uname -o -m
done < machines.txt
x86_64 GNU/Linux
x86_64 GNU/Linux
x86_64 GNU/Linux
主机名¶
在本节中,您将为主机 server
、node-0
和 node-1
分配主机名。当您从 jumpbox
向每台机器执行命令时,将使用主机名。主机名在集群中也起着重要作用。Kubernetes 客户端将使用 server
主机名而不是 IP 地址来向 Kubernetes API 服务器发出命令。在将每台工作节点机器(node-0
和 node-1
)注册到给定的 Kubernetes 集群时,也会使用主机名。
要为主每台机器配置主机名,请在 jumpbox
上运行以下命令。
在 machines.txt
文件中列出的每台机器上设置主机名
while read IP FQDN HOST SUBNET; do
ssh -n root@${IP} cp /etc/hosts /etc/hosts.bak
CMD="sed -i 's/^127.0.0.1.*/127.0.0.1\t${FQDN} ${HOST}/' /etc/hosts"
ssh -n root@${IP} "$CMD"
ssh -n root@${IP} hostnamectl hostname ${HOST}
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
主机查找表¶
在本节中,您将生成一个 hosts
文件,并将其追加到 jumpbox
上的 /etc/hosts
文件以及本教程使用的所有三个集群成员上的 /etc/hosts
文件中。这将允许每台机器都可以通过主机名(如 server
、node-0
或 node-1
)进行访问。
创建一个新的 hosts
文件,并添加一个标题以标识要添加的机器。
echo "" > hosts
echo "# Kubernetes The Hard Way" >> hosts
为 machines.txt
文件中的每台机器生成一个主机条目,并将其追加到 hosts
文件中。
while read IP FQDN HOST SUBNET; do
ENTRY="${IP} ${FQDN} ${HOST}"
echo $ENTRY >> hosts
done < machines.txt
查看 hosts
文件中的主机条目。
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
将 /etc/hosts 条目添加到本地计算机¶
在本节中,您将把 hosts
文件中的 DNS 条目追加到您的 jumpbox
机器上的本地 /etc/hosts
文件。
将 hosts
中的 DNS 条目追加到 /etc/hosts
。
cat hosts >> /etc/hosts
验证 /etc/hosts
文件的更新。
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 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 到 machines.txt
文件中列出的每台机器。
for host in server node-0 node-1
do ssh root@${host} uname -o -m -n
done
server x86_64 GNU/Linux
node-0 x86_64 GNU/Linux
node-1 x86_64 GNU/Linux
将 /etc/hosts 条目添加到远程计算机¶
在本节中,您将把 hosts
中的主机条目追加到 machines.txt
文本文件中列出的每台机器上的 /etc/hosts
文件中。
将 hosts
文件复制到每台机器,并将其内容追加到 /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
机器或 Kubernetes 集群中的任何一台机器连接到其他机器时使用主机名。现在,您可以使用主机名(如 server
、node-0
或 node-1
)连接到机器,而无需使用 IP 地址。
下一步:配置 CA 并生成 TLS 证书
作者:Wale Soyinka
贡献者:Steven Spencer