Helm Chart RBAC#

KubeRay 利用 Kubernetes 基于角色的访问控制(RBAC)资源 来授予监控和管理资源的权限。本文档描述了如何配置 KubeRay Helm 图表以创建适用于 3 种不同用例的 RBAC 资源。

参数#

你可以通过修改 values.yaml 中的以下参数来配置 KubeRay Helm 图表,以创建适用于不同用例的 RBAC 资源。然后,你可以使用修改后的 values.yaml 安装 KubeRay Helm 图表。

# Step 1: Clone the KubeRay repository
# Step 2: Modify the helm-chart/kuberay-operator/values.yaml
# Step 3: Install the KubeRay Helm chart (path: helm-chart/kuberay-operator)
helm install kuberay-operator .
  • rbacEnable

    • 如果为真,Helm 图表会创建 RBAC 资源。如果为假,则不会创建任何 RBAC 资源。默认值:true。

  • singleNamespaceInstall

    • 如果为真,Helm chart 会创建命名空间范围的 RBAC 资源,即 Role 和 RoleBinding。如果为假,则会创建集群范围的 RBAC 资源,即 ClusterRole 和 ClusterRoleBinding。默认值:false。

  • watchNamespace

    • KubeRay 操作符的 informer 监视自定义资源的命名空间列表。

  • crNamespacedRbacEnable

    • 在大多数情况下设置为 true。在使用由 ArgoCD 等 GitOps 工具管理的 Kubernetes 集群的罕见情况下,设置为 false。有关更多详细信息,请参阅 ray-project/kuberay#1162。默认值:true。

The values.yaml 文件包含了参数的详细描述。有关参数的更多上下文,请参阅这些拉取请求:

在Kubernetes集群中监视所有命名空间#

查看Kubernetes集群中的所有命名空间

默认情况下,KubeRay 操作符的通知器会监视 Kubernetes 集群中的所有命名空间。操作符使用 ClusterRole 和 ClusterRoleBinding 具有集群范围的权限来创建和管理资源。

# Create a Kubernetes cluster using Kind.
kind create cluster --image=kindest/node:v1.26.0

# Create namespaces.
kubectl create ns n1
kubectl create ns n2

# Install a KubeRay operator. Use the default `values.yaml` file.
# (path: helm-chart/kuberay-operator)
helm install kuberay-operator .

# Check ClusterRole.
kubectl get clusterrole | grep kuberay
# kuberay-operator                  2023-10-15T04:54:28Z

# Check Role.
kubectl get role
#NAME                               CREATED AT
#kuberay-operator-leader-election   2023-10-15T04:54:28Z

# Install RayCluster in the `default`, `n1`, and `n2` namespaces.
helm install raycluster kuberay/ray-cluster --version 1.0.0
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n1
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n2

# You should create a RayCluster in these 3 namespaces.
kubectl get raycluster -A
# NAMESPACE   NAME                 DESIRED WORKERS   AVAILABLE WORKERS   STATUS   AGE
# default     raycluster-kuberay   1                 1                   ready    73s
# n1          raycluster-kuberay   1                 1                   ready    56s
# n2          raycluster-kuberay   1                 1                   ready    52s

案例 2:观察你部署操作员所在的命名空间#

查看您部署操作员的命名空间

KubeRay 操作符的通知器监视你部署操作符的命名空间。操作符在同一命名空间中具有角色和角色绑定。

  • values.yaml 文件中的 singleNamespaceInstall 参数修改为 true

    singleNamespaceInstall: true
    
# Create a Kubernetes cluster using Kind.
kind create cluster --image=kindest/node:v1.26.0

# Create namespaces.
kubectl create ns n1
kubectl create ns n2

# Install a KubeRay operator.
# Set `singleNamespaceInstall` to true in the `values.yaml` file.
# (path: helm-chart/kuberay-operator)
helm install kuberay-operator .

# Check ClusterRole.
kubectl get clusterrole | grep kuberay
# (nothing found)

# Check Role.
kubectl get role --all-namespaces | grep kuberay
#default       kuberay-operator                                 2023-10-15T05:18:03Z
#default       kuberay-operator-leader-election                 2023-10-15T05:18:03Z

# Install RayCluster in the `default`, `n1`, and `n2` namespaces.
helm install raycluster kuberay/ray-cluster --version 1.0.0
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n1
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n2

# KubeRay only creates a RayCluster in the `default` namespace.
kubectl get raycluster -A
# NAMESPACE   NAME                 DESIRED WORKERS   AVAILABLE WORKERS   STATUS   AGE
# default     raycluster-kuberay   1                 1                   ready    54s
# n1          raycluster-kuberay                                                  50s
# n2          raycluster-kuberay                                                  44s

案例 3:在 Kubernetes 集群中监控多个命名空间#

在Kubernetes集群中观察多个命名空间

在案例2中,只有命名空间访问权限的用户为每个命名空间部署一个单独的KubeRay操作员。这种方法会增加维护开销,特别是在为每个部署的实例升级版本时。案例3为多个命名空间创建角色和角色绑定,允许单个KubeRay操作员监控多个命名空间。

  • 修改 values.yaml 文件中的 singleNamespaceInstallwatchNamespace 参数。

    # Set in the `value.yaml` file.
    singleNamespaceInstall: true
    
    # Set the namespaces list.
    watchNamespace:
      - n1
      - n2
    
# Create a Kubernetes cluster using Kind.
kind create cluster --image=kindest/node:v1.26.0

# Create namespaces.
kubectl create ns n1
kubectl create ns n2

# Install a KubeRay operator.
# Set `singleNamespaceInstall` and `watchNamespace` in the `values.yaml` file.
# (path: helm-chart/kuberay-operator)
helm install kuberay-operator .

# Check ClusterRole
kubectl get clusterrole | grep kuberay
# (nothing found)

# Check Role.
kubectl get role --all-namespaces | grep kuberay
#default       kuberay-operator-leader-election                 2023-10-15T05:34:27Z
#n1            kuberay-operator                                 2023-10-15T05:34:27Z
#n2            kuberay-operator                                 2023-10-15T05:34:27Z

# Install RayCluster in the `default`, `n1`, and `n2` namespaces.
helm install raycluster kuberay/ray-cluster --version 1.0.0
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n1
helm install raycluster kuberay/ray-cluster --version 1.0.0 -n n2

# KubeRay creates a RayCluster only in the `n1` and `n2` namespaces.
kubectl get raycluster -A
# NAMESPACE   NAME                 DESIRED WORKERS   AVAILABLE WORKERS   STATUS   AGE
# default     raycluster-kuberay                                                  74s
# n1          raycluster-kuberay   1                 1                   ready    70s
# n2          raycluster-kuberay   1                 1                   ready    67s