1 - 节点


nodes参数是cluster.yml文件中唯一必需的部分,它为RKE指定集群节点ip地址、ssh凭证以及这些节点将在Kubernetes集群中的角色。

  1. nodes:
  2. nodes:
  3. - address: 1.1.1.1
  4. user: ubuntu
  5. role:
  6. - controlplane
  7. - etcd
  8. ssh_key_path: /home/user/.ssh/id_rsa
  9. port: 2222
  10. - address: 2.2.2.2
  11. user: ubuntu
  12. role:
  13. - worker
  14. ssh_key: |-
  15. -----BEGIN RSA PRIVATE KEY-----
  16. -----END RSA PRIVATE KEY-----
  17. - address: 3.3.3.3
  18. user: ubuntu
  19. role:
  20. - worker
  21. ssh_key_path: /home/user/.ssh/id_rsa
  22. ssh_cert_path: /home/user/.ssh/id_rsa-cert.pub
  23. - address: 4.4.4.4
  24. user: ubuntu
  25. role:
  26. - worker
  27. ssh_key_path: /home/user/.ssh/id_rsa
  28. ssh_cert: |-
  29. ssh-rsa-cert-v01@openssh.com AAAAHHNza...
  30. - address: example.com
  31. user: ubuntu
  32. role:
  33. - worker
  34. hostname_override: node3
  35. internal_address: 192.168.1.6
  36. labels:
  37. app: ingress

一、地址

address参数设置节点的主机名或IP地址,RKE必须能够连接到此地址。

二、内部地址

在具有多IP的主机上,通过internal_address参数指定集群内部通讯地址,如果没有设置internal_address,则使用address进行主机间通信。

比如同一区域的云主机,拥有互通的vpc网络地址和公网地址,在通过rke创建集群的时候,address地址需要填写公网地址,因为rke需要与节点通信,而vpc网络是无法直接访问的。这种场景下,设置internal_address为vpc网络地址,这样K8S集群运行在vpc网络上,保证了集群内部的网络性能。如果不设置internal_address,将会使用address地址组件集群,这样网络性能会很差。

三、覆盖主机名

hostname_override用于为RKE提供一个友好的名称,以便在Kubernetes中注册节点时使用。这个主机名不需要是一个可路由的地址,但是它必须是一个有效的Kubernetes资源名。如果没有设置hostname_override,则在Kubernetes中注册节点时使用address指令。

注意: 当配置云提供商时, 可能需要使用覆盖主机名才能正确使用云提供商。 AWS云提供商是个例外,hostname_override 字段将被明确忽略。

四、SSH Port

指定连接到节点时要使用的节点port。默认端口是22

五、SSH Users

指定连接到节点时要使用的节点user,该用户必须是Docker组成员,或者允许写入节点的Docker套接字。

六、SSH Key Path

ssh_key_path,指定连接到节点时要使用的SSH私钥路径,每个节点的默认密钥路径是~/.ssh/id_rsa

注意: 如果您具有可在所有节点上使用的私钥,则可以在集群级别设置SSH密钥路径,每个节点中设置的SSH密钥路径优先使用。

七、SSH Key

相对ssh_key_pathssh_key可以设置实际密钥内容,而不是设置SSH密钥文件的路径。

八、SSH Certificate Path

连接到节点时要使用的已签名SSH证书,可以通过ssh_cert_path指定ssh_cert路径。

九、SSH Certificate

相对ssh_cert_pathssh_cert可以指定实际证书内容,而不是设置签名SSH证书的路径。

十、Kubernetes Roles

RKE中,支持三种角色设置: controlplane,etcd和worker

  • controlplane: 运行Kubernetes master相关组件(kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、kubelet);
  • etcd: 运行etcd服务(etcd);
  • worker: 作为Kubernetes woker节点运行(kube-proxy、kubelet、)节点角色不是互斥的,可以将角色组合分配给节点,也可以通过升级对已有的节点进行角色修改。

Note:v0.1.8之前,工作负载/pod可能在具有worker或controlplane角色的节点上运行,但从v0.1.8开始,它们将仅部署到worker节点上。

1、etcd角色

节点设置etcd角色,etcd容器将在这些节点上运行。Etcd是一个分布式可靠的键值存储,存储所有Kubernetes状态,是集群中最重要的组件,是集群的唯一数据来源,通常需要3个、5个或更多节点来创建HA配置。

具有etcd角色的节点上设置的污点如下所示:

Taint KeyTaint ValueTaint Effect
node-role.kubernetes.io/etcdtrueNoExecute

2、controlplane角色

节点配置controlplane角色,Kubernetes的无状态组件将在这些节点上运行。

具有controlplane角色的节点上设置的污点如下所示:

Taint KeyTaint ValueTaint Effect
node-role.kubernetes.io/controlplanetrueNoSchedule

3、worker角色

worker节点也可以理解为计算节点,部署的应用(workloads或者pods)都将在worker节点运行。

十一、Docker Socket

Docker套接字默认路径为/var/run/docker.sock,如果安装的非标准安装docker,则可以通过docker_socket设置Docker套接字地址。

十二、Labels

可以通过node_selector为节点设置标签,标签可用于应用部署调度节点选择。