跳至内容

实验 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 标志设置为 WebhookWebhook 模式使用 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"
}

下一步:引导 Kubernetes 工作节点

作者:Wale Soyinka

贡献者:Steven Spencer, Ganna Zhyrnova