Helm Chart RBAC#
KubeRay 利用 Kubernetes 基于角色的访问控制 (RBAC) 资源 来授予监控和管理资源的权限。本文档描述了如何配置 KubeRay Helm chart 以便为 3 种不同的用例创建 RBAC 资源。
参数#
您可以通过修改 values.yaml 中的以下参数来配置 KubeRay Helm chart,以为不同用例创建 RBAC 资源。然后,您可以使用修改后的 values.yaml 来安装 KubeRay Helm chart。
# 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如果为 true,Helm chart 将创建 RBAC 资源。如果为 false,则不创建任何 RBAC 资源。默认值:true。
singleNamespaceInstall如果为 true,Helm chart 将创建命名空间范围的 RBAC 资源,即 Role 和 RoleBinding。如果为 false,则创建集群范围的 RBAC 资源,即 ClusterRole 和 ClusterRoleBinding。默认值:false。
watchNamespaceKubeRay Operator 的 informer 监控自定义资源的命名空间列表。
crNamespacedRbacEnable在大多数情况下,设置为
true。在极少数情况下,例如使用 ArgoCD 等 GitOps 工具管理的 Kubernetes 集群时,设置为false。有关更多详细信息,请参阅 ray-project/kuberay#1162。默认值:true。
values.yaml 文件包含参数的详细描述。请参阅这些 pull 请求以获取有关参数的更多背景信息
用例 1:监控 Kubernetes 集群中的所有命名空间#
默认情况下,KubeRay Operator 的 informer 会监控 Kubernetes 集群中的所有命名空间。Operator 拥有集群范围的权限来创建和管理资源,使用 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.5.1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -n n1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -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:监控 Operator 部署所在的命名空间#
KubeRay Operator 的 informer 会监控 Operator 部署所在的命名空间。Operator 在同一命名空间中拥有 Role 和 RoleBinding。
将
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.5.1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -n n1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -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 集群中的多个命名空间#
在用例 2 中,只有命名空间访问权限的用户为每个命名空间部署一个单独的 KubeRay Operator。这种方法会增加维护开销,尤其是在升级每个已部署实例的版本时。用例 3 为多个命名空间创建 Role 和 RoleBinding,允许单个 KubeRay Operator 监控多个命名空间。
修改
values.yaml文件中的singleNamespaceInstall和watchNamespace参数。# 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.5.1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -n n1
helm install raycluster kuberay/ray-cluster --version 1.5.1 -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