【kubernetes-the-hard-way】03-compute-resources 配置计算资源
配置计算资源
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 集群的三台机器的详细信息。 使用上面的示例机器数据库并添加机器的详细信息。
# 例:
cat <<EOF > machines.txt
172.17.0.1 server.kubernetes.local server
172.17.0.2 node-0.kubernetes.local node-0 10.200.0.0/24
172.17.0.3 node-1.kubernetes.local node-1 10.200.1.0/24
EOF
配置 SSH 访问
SSH 将用于配置集群中的计算机。 验证您是否对计算机数据库中列出的每台计算机具有root
SSH 访问权限。 您可能需要通过更新 sshd_config 文件并重新启动 SSH 服务器来在每个节点上启用 root SSH 访问。
启用 root SSH 访问
如果您的每台计算机都启用了root
SSH 访问,您可以跳过此部分。 如前所述,我们将通过 SSH 启用root
访问,以简化本教程中的步骤。 安全性是一种权衡,在这种情况下,我们正在为了方便性而进行优化。 在每台计算机上使用您的用户帐户通过 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 密钥
在本节中,您将生成 SSH 密钥对并将其分发到server
、node-0
和node-1
计算机,在本教程中,它将用于在这些计算机上运行命令。 从jumpbox
机器运行以下命令。
生成新的 SSH 密钥:
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
将 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
aarch64 GNU/Linux
aarch64 GNU/Linux
aarch64 GNU/Linux
主机名
在本节中,您将为server
、node-0
和node-1
机器分配主机名。 从jumpbox
到每台机器执行命令时将使用主机名。 主机名在集群中也发挥着重要作用。 Kubernetes 客户端不再使用 IP 地址向 Kubernetes API 服务器发出命令,而是使用server
主机名。 在向给定 Kubernetes 集群注册时,每台工作机器、node-0
和node-1
也会使用主机名。
要配置每台计算机的主机名,请在jumpbox
上运行以下命令。
设置machines.txt
文件中列出的每台计算机上的主机名:
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}
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
DNS
在本节中,您将生成一个 DNS hosts
文件,该文件将附加到 jumpbox
本地 /etc/hosts
文件以及本教程使用的所有三台计算机的 /etc/hosts
文件。 这将允许使用主机名(例如server
、node-0
或node-1
)访问每台计算机。
创建一个新的hosts
文件并添加标头以标识要添加的计算机:
echo "" > hosts
echo "# Kubernetes The Hard Way" >> hosts
在machines.txt
文件中为每台机器生成一个 DNS 条目,并将其附加到hosts
文件中:
while read IP FQDN HOST SUBNET; do
ENTRY="${IP} ${FQDN} ${HOST}"
echo $ENTRY >> hosts
done < machines.txt
查看hosts
文件中的 DNS 条目:
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
将 DNS 条目添加到本地计算机
在本节中,您将把hosts
文件中的 DNS 条目附加到jumpbox
计算机上的本地/etc/hosts
文件中。
将 DNS 条目从 hosts
附加到 /etc/hosts
:
cat hosts >> /etc/hosts
验证/etc/hosts
文件是否已更新:
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 连接到machines.txt
文件中列出的每台计算机。
for host in server node-0 node-1
do ssh root@${host} uname -o -m -n
done
server aarch64 GNU/Linux
node-0 aarch64 GNU/Linux
node-1 aarch64 GNU/Linux
将 DNS 条目添加到远程计算机
在本节中,您将把 DNS 条目从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 证书