为了部署 Kubernetes,RKE 在节点上的 Docker 容器中部署了几个核心组件或服务。根据节点的角色,部署的容器可能不同。

所有服务都支持额外的自定义参数、Docker 挂载绑定和额外的环境变量

组件cluster.yml 中的服务名
etcdetcd
kube-apiserverkube-api
kube-controller-managerkube-controller
kubeletkubelet
kube-schedulerscheduler
kube-proxykubeproxy

etcd

Kubernetes 使用etcd作为集群状态和数据的存储。etcd 是一个可靠的、一致的、分布式的键值存储。

RKE 支持在单节点模式或 HA 集群模式下运行 etcd。它还支持向集群中添加和移除 etcd 节点。

您可以启用 etcd 来拍摄循环快照

默认情况下,RKE 会部署一个新的 etcd 服务,但您也可以使用外部 etcd 服务来运行 Kubernetes。

Kubernetes API Server

Rancher 2 用户注意如果您在创建Rancher Launched Kubernetes配置集群选项时,创建Rancher Launched Kubernetes时,服务名称应只包含下划线:kube_api。这只适用于 Rancher v2.0.5 和 v2.0.6。

Kubernetes API REST 服务,处理所有 Kubernetes 对象的请求和数据,并为所有其他 Kubernetes 组件提供共享状态。

  1. services:
  2. kube-api:
  3. # 在Kubernetes上创建的服务的IP范围。
  4. # 必须与kube-controller中的service_cluster_ip_range匹配
  5. service_cluster_ip_range: 10.43.0.0/16
  6. # 为NodePort服务提供不同的端口范围
  7. service_node_port_range: 30000-32767
  8. pod_security_policy: false
  9. # 启用AlwaysPullImagesAdmission controller插件
  10. # v0.2.0或更新版本可用
  11. always_pull_images: false
  12. secrets_encryption_config:
  13. enabled: true

Kubernetes API Server 选项

RKE 支持kube-api服务的以下选项。

  • 服务集群 IP 范围 (service_cluster_ip_range) - 这是将分配给 Kubernetes 上创建的服务的虚拟 IP 地址。默认情况下,服务集群 IP 范围是10.43.0.0/16。如果您改变了这个值,那么也必须在 Kubernetes 控制器管理器(kube-controller)上设置相同的值。
  • 节点端口范围 (service_node_port_range) - 使用type NodePort创建的 Kubernetes 服务的端口范围。默认情况下,端口范围是30000-32767
  • Pod 安全策略 (pod_security_policy) - 启用Kubernetes Pod 安全策略的选项。默认情况下,我们不会启用 pod 安全策略,因为它被设置为false

    **注意:**如果您将pod_security_policy值设置为true,RKE 将配置一个开放的策略,允许任何 pod 在集群上工作。您需要配置您自己的策略来充分利用 PSP。

  • 拉取镜像 (always_pull_images) - 启用AlwaysPullImages Admission 控制器插件。启用AlwaysPullImages是一个安全的最佳实践。它强制 Kubernetes 与远程图像注册表验证图像和拉动凭证。本地图像层缓存仍将被使用,但它确实会在启动容器拉取和比较图像哈希时增加一点开销。注:从 v0.2.0 开始提供

  • Secrets Encryption Config (secrets_encryption_config) - 管理 Kubernetes 静态数据加密。文档化这里

Kubernetes Controller Manager

Rancher 2 用户注意如果您在创建Rancher Launched Kubernetes时,在创建Rancher Launched Kubernetes时,服务名称应只包含下划线:kube_controller。这只适用于 Rancher v2.0.5 和 v2.0.6。

Kubernetes 控制器管理器服务是负责运行 Kubernetes 主控制循环的组件。控制器管理器通过 Kubernetes API 服务器监控集群所需的状态,并对当前状态进行必要的修改,以达到所需的状态。

  1. services:
  2. kube-controller:
  3. # CIDR pool used to assign IP addresses to pods in the cluster
  4. cluster_cidr: 10.42.0.0/16
  5. # IP range for any services created on Kubernetes
  6. # This must match the service_cluster_ip_range in kube-api
  7. service_cluster_ip_range: 10.43.0.0/16

Kubernetes Controller Manager 选项

RKE 支持kube-controller服务的以下选项。

  • 集群 CIDR (cluster_cidr) - 用于为集群中的 pod 分配 IP 地址的 CIDR 池。默认情况下,集群中的每个节点都会从该池中分配一个/24网络,用于分配 pod IP。该选项的默认值是10.42.0.0/16
  • 服务集群 IP 范围 (service_cluster_ip_range) - 这是将分配给 Kubernetes 上创建的服务的虚拟 IP 地址。默认情况下,服务集群 IP 范围是10.43.0.0/16。如果您改变了这个值,那么也必须在 Kubernetes API 服务器(kube-api)上设置相同的值。

Kubelet

kubelet服务作为 Kubernetes 的 “节点代理”。它运行在 RKE 部署的所有节点上,并让 Kubernetes 有能力管理节点上的容器运行时。

  1. services:
  2. kubelet:
  3. # Base domain for the cluster
  4. cluster_domain: cluster.local
  5. # IP address for the DNS service endpoint
  6. cluster_dns_server: 10.43.0.10
  7. # Fail if swap is on
  8. fail_swap_on: false
  9. # Generate per node serving certificate
  10. generate_serving_certificate: false

Kubelet 选项

RKE 支持 “kubelet “服务的以下选项。

  • 集群域 (cluster_domain) - 集群的基本域。集群上创建的所有服务和 DNS 记录。默认情况下,域被设置为cluster.local
  • 集群 DNS 服务器 (cluster_dns_server) - 分配给集群内 DNS 服务端点的 IP 地址。DNS 查询将被发送到这个 IP 地址,该地址被 KubeDNS 使用。这个选项的默认值是10.43.0.10
  • Fail if Swap is On (fail_swap_on) - 在 Kubernetes 中,如果节点上启用了 swap,kubelet 的默认行为是失败。RKE 不会遵循这个默认值,而是允许在启用 swap 的节点上进行部署。默认情况下,这个值是false。如果您想恢复到默认的 kubelet 行为,请将此选项设置为 “true”。
  • Generate Serving Certificate (generate_serving_certificate) - 为 kubelet 生成一个由kube-ca证书颁发机构签署的证书作为服务器证书。这个选项的默认值是false。在启用这个选项之前,请参考下文的 Kubelet Serving Certificate 需求。

Kubelet Serving Certificate 需求

如果在cluster.yml中为一个或多个节点配置了hostname_override,请确保在address中配置了正确的 IP 地址(以及internal_address中的内部地址),以确保生成的证书包含正确的 IP 地址。

一个错误的例子是,在 EC2 实例中,如果在address中配置了公共 IP 地址,并且使用了hostname_override,那么kube-apiserverkubelet之间的连接将失败,因为kubelet将在私有 IP 地址上被联系,生成的证书将无效(将看到错误x509:证书对 value_in_address 有效,而不是 private_ip)。解决方法是在internal_address中提供内部 IP 地址。

关于主机覆盖的更多信息,请参考节点配置页

Kubernetes Scheduler

Kubernetes Scheduler服务负责根据各种配置、指标、资源需求和工作负载的特定要求来调度集群工作负载。

目前,RKE 并不支持scheduler服务的任何特定选项。

Kubernetes Network Proxy

Kubernetes 网络代理服务运行在所有节点上,管理 Kubernetes 创建的 TCP/UDP 端口的端点。

目前,RKE 不支持 “kubeproxy “服务的任何特定选项。