$ oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
使用托管控制平面和 OpenShift Virtualization,您可以创建具有由 KubeVirt 虚拟机托管的工作节点的 OpenShift Container Platform 集群。OpenShift Virtualization 上的托管控制平面提供了一些好处
通过将托管控制平面和托管集群打包在相同的基础裸机基础架构中来增强资源使用率
分离托管控制平面和托管集群以提供强大的隔离
通过消除裸机节点引导过程来减少集群配置时间
管理相同基础 OpenShift Container Platform 集群下的许多发行版
托管控制平面功能默认启用。
您可以使用托管控制平面命令行界面hcp
创建 OpenShift Container Platform 托管集群。托管集群会自动导入为托管集群。如果您想禁用此自动导入功能,请参阅“禁用将托管集群自动导入到多集群引擎 Operator”。
在准备在 OpenShift Virtualization 上部署托管控制平面时,请考虑以下信息
在裸机上运行管理集群。
每个托管集群必须具有集群范围唯一的名称。
不要使用clusters
作为托管集群名称。
无法在多集群引擎 Operator 托管集群的命名空间中创建托管集群。
配置托管控制平面的存储时,请考虑推荐的 etcd 实践。为确保满足延迟要求,请将快速存储设备专用于在每个控制平面节点上运行的所有托管控制平面 etcd 实例。您可以使用 LVM 存储为托管 etcd pod 配置本地存储类。更多信息,请参阅“推荐的 etcd 实践”和“使用逻辑卷管理器存储的持久性存储”。
您必须满足以下先决条件才能在 OpenShift Virtualization 上创建 OpenShift Container Platform 集群
您对 KUBECONFIG
环境变量中指定的 OpenShift Container Platform 集群(版本 4.14 或更高版本)具有管理员访问权限。
OpenShift Container Platform 管理集群启用了通配符 DNS 路由,如下所示的 DNS
$ oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
OpenShift Container Platform 管理集群已安装 OpenShift Virtualization(版本 4.14 或更高版本)。更多信息,请参阅“使用 Web 控制台安装 OpenShift Virtualization”。
OpenShift Container Platform 管理集群位于内部裸机。
OpenShift Container Platform 管理集群配置了 OVNKubernetes 作为默认 Pod 网络 CNI。
OpenShift Container Platform 管理集群具有默认存储类。更多信息,请参阅“安装后存储配置”。以下示例显示了如何设置默认存储类
$ oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
您有 quay.io/openshift-release-dev
存储库的有效拉取密钥文件。更多信息,请参阅“在任何 x86_64 平台上使用用户预配的基础架构安装 OpenShift”。
您已安装托管控制平面命令行界面。
您已配置负载均衡器。更多信息,请参阅“配置 MetalLB”。
为获得最佳网络性能,您在托管 KubeVirt 虚拟机的 OpenShift Container Platform 集群上使用的网络最大传输单元 (MTU) 应为 9000 或更大。如果使用较低的 MTU 设置,则托管 Pod 的网络延迟和吞吐量会受到影响。仅当 MTU 为 9000 或更大时,才启用节点池上的多队列。
多集群引擎 Operator 至少拥有一个受管 OpenShift Container Platform 集群。local-cluster
会自动导入。有关 local-cluster
的更多信息,请参阅多集群引擎 Operator 文档中的“高级配置”。您可以运行以下命令来检查您的 hub 集群的状态
$ oc get managedclusters local-cluster
在托管 OpenShift Virtualization 虚拟机的 OpenShift Container Platform 集群上,您正在使用 ReadWriteMany
(RWX) 存储类,以便可以启用实时迁移。
确保您满足防火墙和端口要求,以便端口可以在管理集群、控制平面和托管集群之间进行通信。
kube-apiserver
服务默认运行在 6443 端口,并且需要入口访问才能在控制平面组件之间进行通信。
如果您使用 NodePort
发布策略,请确保为 kube-apiserver
服务分配的节点端口已公开。
如果您使用 MetalLB 负载均衡,请允许对用于负载均衡器 IP 地址的 IP 范围进行入口访问。
如果您使用 NodePort
发布策略,请为 ignition-server
和 Oauth-server
设置使用防火墙规则。
konnectivity
代理建立反向隧道以允许在托管集群上进行双向通信,需要对 6443 端口上的集群 API 服务器地址进行出口访问。通过此出口访问,代理可以访问 kube-apiserver
服务。
如果集群 API 服务器地址是内部 IP 地址,请允许从工作负载子网访问 6443 端口上的 IP 地址。
如果地址是外部 IP 地址,请允许节点在 6443 端口上向该外部 IP 地址发出出口流量。
如果您更改了默认端口 6443,请调整规则以反映此更改。
确保您打开了集群中运行的工作负载所需的任何端口。
使用防火墙规则、安全组或其他访问控制来限制仅允许访问必需的源。除非必要,否则避免公开端口。
对于生产部署,请使用负载均衡器来简化通过单个 IP 地址的访问。
在托管集群虚拟机 (VM) 的管理集群进行更新或维护期间,可以自动将托管集群 VM 实时迁移以防止中断托管集群工作负载。因此,可以在不影响 KubeVirt 平台托管集群的可用性和运行的情况下更新管理集群。
如果虚拟机对根卷和映射到 |
您可以通过检查 NodePool
对象的 status
部分中的 KubeVirtNodesLiveMigratable
条件来验证节点池中的 VM 是否能够进行实时迁移。
在以下示例中,由于未使用 RWX 存储,因此无法实时迁移 VM。
- lastTransitionTime: "2024-10-08T15:38:19Z"
message: |
3 of 3 machines are not live migratable
Machine user-np-ngst4-gw2hz: DisksNotLiveMigratable: user-np-ngst4-gw2hz is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-gw2hz-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
Machine user-np-ngst4-npq7x: DisksNotLiveMigratable: user-np-ngst4-npq7x is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-npq7x-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
Machine user-np-ngst4-q5nkb: DisksNotLiveMigratable: user-np-ngst4-q5nkb is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-q5nkb-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
observedGeneration: 1
reason: DisksNotLiveMigratable
status: "False"
type: KubeVirtNodesLiveMigratable
在下一个示例中,VM 满足实时迁移的要求。
- lastTransitionTime: "2024-10-08T15:38:19Z"
message: "All is well"
observedGeneration: 1
reason: AsExpected
status: "True"
type: KubeVirtNodesLiveMigratable
虽然实时迁移可以在正常情况下保护 VM 免受中断,但基础设施节点故障等事件可能会导致托管在故障节点上的任何 VM 重新启动。为了使实时迁移成功,托管 VM 的源节点必须正常工作。
当节点池中的 VM 无法实时迁移时,在管理集群维护期间,托管集群可能会发生工作负载中断。默认情况下,托管控制平面控制器会在停止 VM 之前尝试驱逐托管在无法实时迁移的 KubeVirt VM 上的工作负载。在停止 VM 之前驱逐托管集群节点允许 Pod 中断预算保护托管集群内工作负载的可用性。
使用 OpenShift Container Platform 4.14 及更高版本,您可以创建一个包含 KubeVirt 的集群,包括使用外部基础设施创建。
要创建托管集群,您可以使用托管控制平面命令行界面 hcp
。
输入以下命令
$ hcp create cluster kubevirt \
--name <hosted-cluster-name> \ (1)
--node-pool-replicas <worker-count> \ (2)
--pull-secret <path-to-pull-secret> \ (3)
--memory <value-for-memory> \ (4)
--cores <value-for-cpu> \ (5)
--etcd-storage-class=<etcd-storage-class> (6)
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定工作程序数量,例如 2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如 6Gi 。 |
5 | 指定 CPU 值,例如 2 。 |
6 | 指定 etcd 存储类名称,例如 lvm-storageclass 。 |
您可以使用 |
根据 --node-pool-replicas
标志,将为集群创建一个默认节点池,其中包含两个虚拟机工作程序副本。
片刻之后,通过输入以下命令验证托管控制平面 Pod 是否正在运行
$ oc -n clusters-<hosted-cluster-name> get pods
NAME READY STATUS RESTARTS AGE
capi-provider-5cc7b74f47-n5gkr 1/1 Running 0 3m
catalog-operator-5f799567b7-fd6jw 2/2 Running 0 69s
certified-operators-catalog-784b9899f9-mrp6p 1/1 Running 0 66s
cluster-api-6bbc867966-l4dwl 1/1 Running 0 66s
.
.
.
redhat-operators-catalog-9d5fd4d44-z8qqk 1/1 Running 0 66s
具有由 KubeVirt 虚拟机支持的工作节点的托管集群通常需要 10-15 分钟才能完全预配。
要检查托管集群的状态,请通过输入以下命令查看相应的 HostedCluster
资源
$ oc get --namespace clusters hostedclusters
请参见以下示例输出,其中说明了一个完全预配的 HostedCluster
对象
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE clusters example 4.x.0 example-admin-kubeconfig Completed True False The hosted control plane is available
将 4.x.0
替换为您要使用的受支持的 OpenShift Container Platform 版本。
默认情况下,HyperShift Operator 在同一集群中托管托管集群的控制平面 Pod 和 KubeVirt 工作程序 VM。使用外部基础设施功能,您可以将工作程序节点 VM 置于与控制平面 Pod 分开的集群中。
管理集群是运行 HyperShift Operator 并承载托管集群控制平面 Pod 的 OpenShift Container Platform 集群。
基础设施集群是运行托管集群 KubeVirt 工作器 VM 的 OpenShift Container Platform 集群。
默认情况下,管理集群也充当承载 VM 的基础设施集群。但是,对于外部基础设施,管理集群和基础设施集群是不同的。
您必须在外部基础设施集群上拥有一个命名空间,以便在其中托管 KubeVirt 节点。
您必须拥有外部基础设施集群的kubeconfig
文件。
您可以使用hcp
命令行界面创建托管集群。
要将 KubeVirt 工作器 VM 放置在基础设施集群上,请使用--infra-kubeconfig-file
和--infra-namespace
参数,如下例所示
$ hcp create cluster kubevirt \
--name <hosted-cluster-name> \ (1)
--node-pool-replicas <worker-count> \ (2)
--pull-secret <path-to-pull-secret> \ (3)
--memory <value-for-memory> \ (4)
--cores <value-for-cpu> \ (5)
--infra-namespace=<hosted-cluster-namespace>-<hosted-cluster-name> \ (6)
--infra-kubeconfig-file=<path-to-external-infra-kubeconfig> (7)
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定工作程序数量,例如 2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如 6Gi 。 |
5 | 指定 CPU 值,例如 2 。 |
6 | 指定基础设施命名空间,例如clusters-example 。 |
7 | 指定基础设施集群的kubeconfig 文件路径,例如/user/name/external-infra-kubeconfig 。 |
输入该命令后,控制平面 Pod 将托管在运行 HyperShift Operator 的管理集群上,而 KubeVirt VM 将托管在单独的基础设施集群上。
要使用控制台创建具有 KubeVirt 平台的托管集群,请完成以下步骤。
打开 OpenShift Container Platform Web 控制台,并输入您的管理员凭据登录。
在控制台标题中,确保已选择所有集群。
单击基础设施 > 集群。
单击创建集群 > Red Hat OpenShift Virtualization > 托管。
在创建集群页面上,按照提示输入有关集群和节点池的详细信息。
|
查看您的输入,然后单击创建。
将显示托管集群视图。
在托管集群视图中监控托管集群的部署。如果您没有看到有关托管集群的信息,请确保已选择所有集群,然后单击集群名称。
等待控制平面组件准备就绪。此过程可能需要几分钟。
要查看节点池状态,请滚动到节点池部分。安装节点的过程大约需要 10 分钟。您也可以单击节点以确认节点是否已加入托管集群。
每个 OpenShift Container Platform 集群都包含一个默认应用程序 Ingress 控制器,它必须具有与其关联的通配符 DNS 记录。默认情况下,使用 HyperShift KubeVirt 提供程序创建的托管集群会自动成为运行 KubeVirt 虚拟机的 OpenShift Container Platform 集群的子域。
例如,您的 OpenShift Container Platform 集群可能具有以下默认入口 DNS 条目
*.apps.mgmt-cluster.example.com
因此,名为guest
并在该底层 OpenShift Container Platform 集群上运行的 KubeVirt 托管集群具有以下默认入口
*.apps.guest.apps.mgmt-cluster.example.com
为了使默认入口 DNS 正确工作,托管 KubeVirt 虚拟机的集群必须允许通配符 DNS 路由。
您可以通过输入以下命令来配置此行为
$ oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
当您使用默认托管集群入口时,连接仅限于 443 端口上的 HTTPS 流量。将拒绝 80 端口上的普通 HTTP 流量。此限制仅适用于默认入口行为。 |
如果您不想使用默认入口和 DNS 行为,则可以在创建时使用唯一的基域配置 KubeVirt 托管集群。此选项需要在创建过程中进行手动配置步骤,并涉及三个主要步骤:集群创建、负载均衡器创建和通配符 DNS 配置。
要创建指定基域的托管集群,请完成以下步骤。
输入以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <value_for_memory> \ (4)
--cores <value_for_cpu> \ (5)
--base-domain <basedomain> (6)
1 | 指定托管集群的名称。 |
2 | 指定工作程序数量,例如 2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如 6Gi 。 |
5 | 指定 CPU 值,例如 2 。 |
6 | 指定基域,例如hypershift.lab 。 |
因此,托管集群具有为集群名称和基域配置的入口通配符,例如.apps.example.hypershift.lab
。托管集群保持部分
状态,因为在您使用唯一的基域创建托管集群后,必须配置所需的 DNS 记录和负载均衡器。
通过输入以下命令查看托管集群的状态
$ oc get --namespace clusters hostedclusters
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE
example example-admin-kubeconfig Partial True False The hosted control plane is available
通过输入以下命令访问集群
$ hcp create kubeconfig --name <hosted_cluster_name> > <hosted_cluster_name>-kubeconfig
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
console 4.x.0 False False False 30m RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.example.hypershift.lab): Get "https://console-openshift-console.apps.example.hypershift.lab": dial tcp: lookup console-openshift-console.apps.example.hypershift.lab on 172.31.0.10:53: no such host
ingress 4.x.0 True False True 28m The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
将 4.x.0
替换为您要使用的受支持的 OpenShift Container Platform 版本。
要修复输出中的错误,请完成“设置负载均衡器”和“设置通配符 DNS”中的步骤。
如果您的托管集群位于裸机上,您可能需要 MetalLB 来设置负载均衡器服务。有关更多信息,请参见“配置 MetalLB”。 |
设置负载均衡器服务,该服务将入口流量路由到 KubeVirt VM 并将通配符 DNS 条目分配给负载均衡器 IP 地址。
公开托管集群入口的NodePort
服务已存在。您可以导出节点端口并创建以这些端口为目标的负载均衡器服务。
通过输入以下命令获取 HTTP 节点端口
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services -n openshift-ingress router-nodeport-default -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}'
记下要在下一步中使用的 HTTP 节点端口值。
通过输入以下命令获取 HTTPS 节点端口
$ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services -n openshift-ingress router-nodeport-default -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
记下要在下一步中使用的 HTTPS 节点端口值。
通过输入以下命令创建负载均衡器服务
oc apply -f -
apiVersion: v1
kind: Service
metadata:
labels:
app: <hosted_cluster_name>
name: <hosted_cluster_name>-apps
namespace: clusters-<hosted_cluster_name>
spec:
ports:
- name: https-443
port: 443
protocol: TCP
targetPort: <https_node_port> (1)
- name: http-80
port: 80
protocol: TCP
targetPort: <http-node-port> (2)
selector:
kubevirt.io: virt-launcher
type: LoadBalancer
1 | 指定您在上一步中记下的 HTTPS 节点端口值。 |
2 | 指定您在上一步中记下的 HTTP 节点端口值。 |
设置引用负载均衡器服务的外部 IP 地址的通配符 DNS 记录或 CNAME。
通过输入以下命令获取外部 IP 地址
$ oc -n clusters-<hosted_cluster_name> get service <hosted-cluster-name>-apps -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
192.168.20.30
配置引用外部 IP 地址的通配符 DNS 条目。查看以下示例 DNS 条目
*.apps.<hosted_cluster_name\>.<base_domain\>.
DNS 条目必须能够在集群内部和外部进行路由。
dig +short test.apps.example.hypershift.lab
192.168.20.30
通过输入以下命令检查托管集群状态是否已从部分
更改为已完成
$ oc get --namespace clusters hostedclusters
NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE
example 4.x.0 example-admin-kubeconfig Completed True False The hosted control plane is available
将 4.x.0
替换为您要使用的受支持的 OpenShift Container Platform 版本。
您必须在配置 MetalLB 之前安装 MetalLB Operator。
完成以下步骤以在托管集群上配置 MetalLB
通过将以下示例 YAML 内容保存到configure-metallb.yaml
文件中来创建MetalLB
资源
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
name: metallb
namespace: metallb-system
通过输入以下命令应用 YAML 内容
$ oc apply -f configure-metallb.yaml
metallb.metallb.io/metallb created
通过将以下示例 YAML 内容保存到create-ip-address-pool.yaml
文件中来创建IPAddressPool
资源。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: metallb
namespace: metallb-system
spec:
addresses:
- 192.168.216.32-192.168.216.122 (1)
1 | 创建一个地址池,其中包含节点网络内可用的 IP 地址范围。请将 IP 地址范围替换为网络中未使用的可用 IP 地址池。 |
通过输入以下命令应用 YAML 内容
$ oc apply -f create-ip-address-pool.yaml
ipaddresspool.metallb.io/metallb created
通过将以下示例 YAML 内容保存到l2advertisement.yaml
文件中来创建L2Advertisement
资源。
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2advertisement
namespace: metallb-system
spec:
ipAddressPools:
- metallb
通过输入以下命令应用 YAML 内容
$ oc apply -f l2advertisement.yaml
l2advertisement.metallb.io/metallb created
有关 MetalLB 的更多信息,请参阅安装 MetalLB 运算符。
如果您需要为节点池配置附加网络、请求虚拟机 (VM) 的保证 CPU 访问权限或管理 KubeVirt 虚拟机的调度,请参阅以下步骤。
默认情况下,节点池生成的节点连接到 Pod 网络。您可以使用 Multus 和 NetworkAttachmentDefinitions 将其他网络连接到节点。
要向节点添加多个网络,请使用--additional-network
参数运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--additional-network name:<namespace/name> \ (6)
–-additional-network name:<namespace/name>
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定您的工作节点数量,例如2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如8Gi 。 |
5 | 指定 CPU 值,例如2 。 |
6 | 将–additional-network 参数的值设置为name:<namespace/name> 。将<namespace/name> 替换为您的 NetworkAttachmentDefinitions 的命名空间和名称。 |
您可以通过禁用默认 Pod 网络将附加网络添加为节点的默认网络。
要将附加网络添加为节点的默认网络,请运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--attach-default-network false \ (6)
--additional-network name:<namespace>/<network_name> (7)
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定您的工作节点数量,例如2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如8Gi 。 |
5 | 指定 CPU 值,例如2 。 |
6 | --attach-default-network false 参数禁用默认 Pod 网络。 |
7 | 指定要添加到节点的附加网络,例如name:my-namespace/my-network 。 |
默认情况下,KubeVirt 虚拟机可能会与节点上的其他工作负载共享其 CPU。这可能会影响虚拟机的性能。为了避免性能影响,您可以请求虚拟机的保证 CPU 访问权限。
要请求保证的 CPU 资源,请通过运行以下命令将--qos-class
参数设置为Guaranteed
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--qos-class Guaranteed (6)
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定您的工作节点数量,例如2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如8Gi 。 |
5 | 指定 CPU 值,例如2 。 |
6 | --qos-class Guaranteed 参数保证将指定的 CPU 资源数量分配给虚拟机。 |
默认情况下,节点池创建的 KubeVirt 虚拟机将调度到任何可用的节点。您可以将 KubeVirt 虚拟机调度到具有足够容量运行虚拟机的特定节点集。
要在一组特定节点上的节点池内调度 KubeVirt 虚拟机,请使用--vm-node-selector
参数运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--vm-node-selector <label_key>=<label_value>,<label_key>=<label_value> (6)
1 | 指定托管集群的名称,例如 example 。 |
2 | 指定您的工作节点数量,例如2 。 |
3 | 指定拉取密钥的路径,例如 /user/name/pullsecret 。 |
4 | 指定内存值,例如8Gi 。 |
5 | 指定 CPU 值,例如2 。 |
6 | --vm-node-selector 标志定义包含键值对的特定节点集。请将<label_key> 和<label_value> 分别替换为标签的键和值。 |
您可以使用oc scale
命令手动扩展节点池。
运行以下命令
NODEPOOL_NAME=${CLUSTER_NAME}-work
NODEPOOL_REPLICAS=5
$ oc scale nodepool/$NODEPOOL_NAME --namespace clusters --replicas=$NODEPOOL_REPLICAS
片刻之后,输入以下命令查看节点池的状态
$ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
example-9jvnf Ready worker 97s v1.27.4+18eadca
example-n6prw Ready worker 116m v1.27.4+18eadca
example-nc6g4 Ready worker 117m v1.27.4+18eadca
example-thp29 Ready worker 4m17s v1.27.4+18eadca
example-twxns Ready worker 88s v1.27.4+18eadca
您可以通过指定名称、副本数以及任何其他信息(例如内存和 CPU 需求)来为托管集群创建节点池。
要创建节点池,请输入以下信息。在此示例中,节点池为虚拟机分配了更多 CPU
export NODEPOOL_NAME=${CLUSTER_NAME}-extra-cpu
export WORKER_COUNT="2"
export MEM="6Gi"
export CPU="4"
export DISK="16"
$ hcp create nodepool kubevirt \
--cluster-name $CLUSTER_NAME \
--name $NODEPOOL_NAME \
--node-count $WORKER_COUNT \
--memory $MEM \
--cores $CPU \
--root-volume-size $DISK
通过列出clusters
命名空间中的nodepool
资源来检查节点池的状态
$ oc get nodepools --namespace clusters
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE
example example 5 5 False False 4.x.0
example-extra-cpu example 2 False False True True Minimum availability requires 2 replicas, current 0 available
将 4.x.0
替换为您要使用的受支持的 OpenShift Container Platform 版本。
一段时间后,您可以输入以下命令来检查节点池的状态
$ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
example-9jvnf Ready worker 97s v1.27.4+18eadca
example-n6prw Ready worker 116m v1.27.4+18eadca
example-nc6g4 Ready worker 117m v1.27.4+18eadca
example-thp29 Ready worker 4m17s v1.27.4+18eadca
example-twxns Ready worker 88s v1.27.4+18eadca
example-extra-cpu-zh9l5 Ready worker 2m6s v1.27.4+18eadca
example-extra-cpu-zr8mj Ready worker 102s v1.27.4+18eadca
通过输入此命令来验证节点池是否处于您预期的状态
$ oc get nodepools --namespace clusters
NAME CLUSTER DESIRED NODES CURRENT NODES AUTOSCALING AUTOREPAIR VERSION UPDATINGVERSION UPDATINGCONFIG MESSAGE
example example 5 5 False False 4.x.0
example-extra-cpu example 2 2 False False 4.x.0
将 4.x.0
替换为您要使用的受支持的 OpenShift Container Platform 版本。
要将数据平面缩减到零,请参阅将数据平面缩减到零。
要验证您的托管集群是否已成功创建,请完成以下步骤。
通过输入以下命令来验证HostedCluster
资源是否已转换为completed
状态
$ oc get --namespace clusters hostedclusters <hosted_cluster_name>
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE
clusters example 4.12.2 example-admin-kubeconfig Completed True False The hosted control plane is available
通过输入以下命令来验证托管集群中的所有集群运算符是否联机
$ hcp create kubeconfig --name <hosted_cluster_name> > <hosted_cluster_name>-kubeconfig
$ oc get co --kubeconfig=<hosted_cluster_name>-kubeconfig
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
console 4.12.2 True False False 2m38s
csi-snapshot-controller 4.12.2 True False False 4m3s
dns 4.12.2 True False False 2m52s
image-registry 4.12.2 True False False 2m8s
ingress 4.12.2 True False False 22m
kube-apiserver 4.12.2 True False False 23m
kube-controller-manager 4.12.2 True False False 23m
kube-scheduler 4.12.2 True False False 23m
kube-storage-version-migrator 4.12.2 True False False 4m52s
monitoring 4.12.2 True False False 69s
network 4.12.2 True False False 4m3s
node-tuning 4.12.2 True False False 2m22s
openshift-apiserver 4.12.2 True False False 23m
openshift-controller-manager 4.12.2 True False False 23m
openshift-samples 4.12.2 True False False 2m15s
operator-lifecycle-manager 4.12.2 True False False 22m
operator-lifecycle-manager-catalog 4.12.2 True False False 23m
operator-lifecycle-manager-packageserver 4.12.2 True False False 23m
service-ca 4.12.2 True False False 4m41s
storage 4.12.2 True False False 4m43s