Skip to content

启动 Kubernetes 控制平面

在本实验中,您将启动 Kubernetes 控制平面。以下组件将被安装在控制器机器上:Kubernetes API 服务器、调度器和控制器管理器。

先决条件

将 Kubernetes 二进制文件和 systemd 单元文件复制到 server 实例:

bash
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 命令登录到控制器实例。例如:

bash
ssh root@server

配置 Kubernetes 控制平面

创建 Kubernetes 配置目录:

bash
mkdir -p /etc/kubernetes/config

安装 Kubernetes 控制器二进制文件

安装 Kubernetes 二进制文件:

bash
{
  chmod +x kube-apiserver \
    kube-controller-manager \
    kube-scheduler kubectl
    
  mv kube-apiserver \
    kube-controller-manager \
    kube-scheduler kubectl \
    /usr/local/bin/
}

配置 Kubernetes API 服务器

bash
{
  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 单元文件:

bash
mv kube-apiserver.service \
  /etc/systemd/system/kube-apiserver.service

配置 Kubernetes 控制器管理器

移动 kube-controller-manager kubeconfig 文件到指定位置:

bash
mv kube-controller-manager.kubeconfig /var/lib/kubernetes/

创建 kube-controller-manager.service systemd 单元文件:

bash
mv kube-controller-manager.service /etc/systemd/system/

配置 Kubernetes 调度器

移动 kube-scheduler kubeconfig 文件到指定位置:

bash
mv kube-scheduler.kubeconfig /var/lib/kubernetes/

创建 kube-scheduler.yaml 配置文件:

bash
mv kube-scheduler.yaml /etc/kubernetes/config/

创建 kube-scheduler.service systemd 单元文件:

bash
mv kube-scheduler.service /etc/systemd/system/

启动控制器服务

bash
{
  systemctl daemon-reload
  
  systemctl enable kube-apiserver \
    kube-controller-manager kube-scheduler
    
  systemctl start kube-apiserver \
    kube-controller-manager kube-scheduler
}

等待最多10秒钟,Kubernetes API 服务器完全初始化。

验证

bash
kubectl cluster-info \
  --kubeconfig admin.kubeconfig
text
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 来确定授权。

本节中的命令将影响整个集群,只需在控制器节点上运行。

bash
ssh root@server

创建具有访问 Kubelet API 权限并执行与管理 pod 相关的最常见任务的 system:kube-apiserver-to-kubelet ClusterRole

bash
kubectl apply -f kube-apiserver-to-kubelet.yaml \
  --kubeconfig admin.kubeconfig

验证

此时,Kubernetes 控制平面已经启动并运行。在 jumpbox 机器上运行以下命令以验证其工作:

发出 HTTP 请求以获取 Kubernetes 版本信息:

bash
curl -k --cacert ca.crt https://server.kubernetes.local:6443/version
text
{
  "major": "1",
  "minor": "28",
  "gitVersion": "v1.28.3",
  "gitCommit": "a8a1abc25cad87333840cd7d54be2efaf31a3177",
  "gitTreeState": "clean",
  "buildDate": "2023-10-18T11:33:18Z",
  "goVersion": "go1.20.10",
  "compiler": "gc",
  "platform": "linux/arm64"
}