实验 8:引导 Kubernetes 控制平面¶
信息
这是由 Kelsey Hightower(GitHub:kelseyhightower)最初编写的 “Kubernetes the hard way” 的一个分支。与原始版本不同的是,原始版本基于 ARM64 架构的类 Debian 发行版,而此分支则针对 Rocky Linux 等企业级 Linux 发行版,这些发行版运行在 x86_64 架构上。
在本实验中,您将引导 Kubernetes 控制平面。您将在控制器机器上安装以下组件:Kubernetes API 服务器、调度器和控制器管理器。
先决条件¶
连接到 jumpbox
并将 Kubernetes 二进制文件和 systemd
单元文件复制到 server
实例
scp \
downloads/kube-apiserver \
downloads/kube-controller-manager \
downloads/kube-scheduler \
downloads/kubectl \
units/kube-apiserver.service \
units/kube-controller-manager.service \
units/kube-scheduler.service \
configs/kube-scheduler.yaml \
configs/kube-apiserver-to-kubelet.yaml \
root@server:~/
您必须在 server
机器上运行本实验后续部分中的命令。使用 ssh
命令登录到控制器实例。示例
ssh root@server
配置 Kubernetes 控制平面¶
创建 Kubernetes 配置目录
mkdir -p /etc/kubernetes/config
安装 Kubernetes 控制器二进制文件¶
安装 Kubernetes 二进制文件
chmod +x kube-apiserver \
kube-controller-manager \
kube-scheduler kubectl
mv kube-apiserver \
kube-controller-manager \
kube-scheduler kubectl \
/usr/local/bin/
配置 Kubernetes API 服务器¶
mkdir -p /var/lib/kubernetes/
mv ca.crt ca.key \
kube-api-server.key kube-api-server.crt \
service-accounts.key service-accounts.crt \
encryption-config.yaml \
/var/lib/kubernetes/
创建 kube-apiserver.service
systemd
单元文件
mv kube-apiserver.service /etc/systemd/system/kube-apiserver.service
配置 Kubernetes 控制器管理器¶
将 kube-controller-manager
kubeconfig 移到正确位置
mv kube-controller-manager.kubeconfig /var/lib/kubernetes/
创建 kube-controller-manager.service
systemd
单元文件
mv kube-controller-manager.service /etc/systemd/system/
配置 Kubernetes 调度器¶
将 kube-scheduler
kubeconfig 移到正确位置
mv kube-scheduler.kubeconfig /var/lib/kubernetes/
创建 kube-scheduler.yaml
配置文件
mv kube-scheduler.yaml /etc/kubernetes/config/
创建 kube-scheduler.service
systemd 单元文件
mv kube-scheduler.service /etc/systemd/system/
启动控制器服务¶
systemctl daemon-reload
systemctl enable kube-apiserver \
kube-controller-manager kube-scheduler
systemctl start kube-apiserver \
kube-controller-manager kube-scheduler
请等待最多 10 秒钟,让 Kubernetes API 服务器完全初始化。
验证¶
kubectl cluster-info --kubeconfig admin.kubeconfig
Kubernetes control plane is running at https://127.0.0.1:6443
用于 Kubelet 授权的 RBAC¶
在本节中,您将配置 RBAC 权限,允许 Kubernetes API 服务器访问每个工作节点上的 Kubelet API。访问 Kubelet API 是检索指标和日志以及在 Pod 中执行命令所必需的。
本教程将 Kubelet
--authorization-mode
标志设置为Webhook
。Webhook
模式使用 SubjectAccessReview API 来确定授权。
在本节中,请在控制器节点上运行命令,这些命令将影响整个集群。
ssh root@server
创建 system:kube-apiserver-to-kubelet
ClusterRole,该角色具有访问 Kubelet API 的权限,并执行与管理 Pod 最相关的常见任务。
kubectl apply -f kube-apiserver-to-kubelet.yaml \
--kubeconfig admin.kubeconfig
RBAC 验证¶
此时,Kubernetes 控制平面已启动并正在运行。请从 jumpbox
机器运行以下命令以验证其是否正常工作:
发出 HTTP 请求以获取 Kubernetes 版本信息
curl -k --cacert ca.crt https://server.kubernetes.local:6443/version
{
"major": "1",
"minor": "32",
"gitVersion": "v1.32.0",
"gitCommit": "70d3cc986aa8221cd1dfb1121852688902d3bf53",
"gitTreeState": "clean",
"buildDate": "2024-12-11T17:59:15Z",
"goVersion": "go1.23.3",
"compiler": "gc",
"platform": "linux/amd64"
}
作者:Wale Soyinka
贡献者:Steven Spencer, Ganna Zhyrnova