$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
在非裸机代理机器上部署托管控制平面后,您可以通过完成以下任务来管理托管集群。
您可以通过直接从资源获取kubeconfig
文件和kubeadmin
凭据,或使用hcp
命令行界面生成kubeconfig
文件来访问托管集群。
要通过直接从资源获取kubeconfig
文件和凭据来访问托管集群,您必须熟悉托管集群的访问密钥。托管集群(托管)命名空间包含托管集群资源和访问密钥。托管控制平面命名空间是托管控制平面运行的场所。
密钥名称格式如下:
kubeconfig
密钥:<hosted_cluster_namespace>-<name>-admin-kubeconfig
。例如,clusters-hypershift-demo-admin-kubeconfig
。
kubeadmin
密码密钥:<hosted_cluster_namespace>-<name>-kubeadmin-password
。例如,clusters-hypershift-demo-kubeadmin-password
。
kubeconfig
密钥包含一个 Base64 编码的kubeconfig
字段,您可以对其进行解码并保存到文件中,然后使用以下命令:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
kubeadmin
密码密钥也进行了 Base64 编码。您可以对其进行解码,并使用该密码登录到托管集群的 API 服务器或控制台。
要使用hcp
CLI 生成kubeconfig
文件来访问托管集群,请执行以下步骤:
输入以下命令生成kubeconfig
文件:
$ hcp create kubeconfig --namespace <hosted_cluster_namespace> --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
保存kubeconfig
文件后,您可以输入以下示例命令来访问托管集群:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
您可以通过向托管集群添加节点来扩展NodePool
对象。扩展节点池时,请考虑以下信息:
当您按节点池扩展副本时,将创建一个机器。对于每台机器,集群 API 提供程序都会找到并安装满足节点池规范中指定的 requirement 的代理。您可以通过检查其状态和条件来监控代理的安装。
缩减节点池时,代理将与相应的集群取消绑定。在您可以重用代理之前,必须使用发现镜像重新启动它们。
将NodePool
对象扩展到两个节点:
$ oc -n <hosted_cluster_namespace> scale nodepool <nodepool_name> --replicas 2
集群 API 代理提供程序会随机选择两个代理,然后将其分配给托管集群。这些代理会经历不同的状态,最终作为 OpenShift Container Platform 节点加入托管集群。代理按以下顺序经过状态:
绑定
发现
不足
安装
安装中
添加到现有集群
输入以下命令:
$ oc -n <hosted_control_plane_namespace> get agent
NAME CLUSTER APPROVED ROLE STAGE
4dac1ab2-7dd5-4894-a220-6a3473b67ee6 hypercluster1 true auto-assign
d9198891-39f4-4930-a679-65fb142b108b true auto-assign
da503cf1-a347-44f2-875c-4960ddb04091 hypercluster1 true auto-assign
输入以下命令:
$ oc -n <hosted_control_plane_namespace> get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: binding
BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: insufficient
输入提取命令获取新托管集群的 kubeconfig:
$ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-admin-kubeconfig --to=- > kubeconfig-<hosted_cluster_name>
代理达到added-to-existing-cluster
状态后,输入以下命令验证您是否可以在托管集群中看到 OpenShift Container Platform 节点:
$ oc --kubeconfig kubeconfig-<hosted_cluster_name> get nodes
NAME STATUS ROLES AGE VERSION
ocp-worker-1 Ready worker 5m41s v1.24.0+3882f8f
ocp-worker-2 Ready worker 6m3s v1.24.0+3882f8f
集群操作员开始通过向节点添加工作负载进行协调。
输入以下命令以验证在您扩展NodePool
对象时是否创建了两个机器:
$ oc -n <hosted_control_plane_namespace> get machines
NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION
hypercluster1-c96b6f675-m5vch hypercluster1-b2qhl ocp-worker-1 agent://da503cf1-a347-44f2-875c-4960ddb04091 Running 15m 4.x.z
hypercluster1-c96b6f675-tl42p hypercluster1-b2qhl ocp-worker-2 agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6 Running 15m 4.x.z
clusterversion
协调过程最终会达到仅缺少 Ingress 和 Console 集群操作员的点。
输入以下命令:
$ oc --kubeconfig kubeconfig-<hosted_cluster_name> get clusterversion,co
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
clusterversion.config.openshift.io/version False True 40m Unable to apply 4.x.z: the cluster operator console has not yet successfully rolled out
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
clusteroperator.config.openshift.io/console 4.12z False False False 11m RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.hypercluster1.domain.com): Get "https://console-openshift-console.apps.hypercluster1.domain.com": dial tcp 10.19.3.29:443: connect: connection refused
clusteroperator.config.openshift.io/csi-snapshot-controller 4.12z True False False 10m
clusteroperator.config.openshift.io/dns 4.12z True False False 9m16s
您可以通过指定名称、副本数量以及任何其他信息(例如代理标签选择器)来为托管集群创建节点池。
要创建节点池,请输入以下信息:
$ hcp create nodepool agent \
--cluster-name <hosted_cluster_name> \(1)
--name <nodepool_name> \(2)
--node-count <worker_node_count> \(3)
--agentLabelSelector size=medium (4)
1 | 将<hosted_cluster_name> 替换为您的托管集群名称。 |
2 | 将<nodepool_name> 替换为您的节点池名称,例如<hosted_cluster_name>-extra-cpu 。 |
3 | 将<worker_node_count> 替换为工作节点数,例如2 。 |
4 | --agentLabelSelector 标志是可选的。节点池使用带有size=medium 标签的代理。 |
通过列出clusters
命名空间中的nodepool
资源来检查节点池的状态:
$ oc get nodepools --namespace clusters
输入以下命令提取admin-kubeconfig
密钥:
$ oc extract -n <hosted_control_plane_namespace> secret/admin-kubeconfig --to=./hostedcluster-secrets --confirm
hostedcluster-secrets/kubeconfig
一段时间后,您可以输入以下命令检查节点池的状态:
$ oc --kubeconfig ./hostedcluster-secrets get nodes
输入此命令验证可用节点池的数量是否与预期节点池的数量匹配:
$ oc get nodepools --namespace clusters
当您的托管集群需要更多容量并且有备用代理可用时,您可以启用自动扩展以安装新的工作节点。
要启用自动扩展,请输入以下命令:
$ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> --type=json -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'
在此示例中,节点的最小数量为 2,最大数量为 5。您可以添加的节点的最大数量可能受您的平台限制。例如,如果您使用代理平台,则节点的最大数量受可用代理数量的限制。 |
创建一个需要新节点的工作负载。
使用以下示例创建一个包含工作负载配置的 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: reversewords
name: reversewords
namespace: default
spec:
replicas: 40
selector:
matchLabels:
app: reversewords
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: reversewords
spec:
containers:
- image: quay.io/mavazque/reversewords:latest
name: reversewords
resources:
requests:
memory: 2Gi
status: {}
将文件保存为workload-config.yaml
。
输入以下命令应用 YAML:
$ oc apply -f workload-config.yaml
输入以下命令提取admin-kubeconfig
密钥:
$ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-admin-kubeconfig --to=./hostedcluster-secrets --confirm
hostedcluster-secrets/kubeconfig
您可以通过输入以下命令检查新节点是否处于就绪
状态:
$ oc --kubeconfig ./hostedcluster-secrets get nodes
要删除节点,请通过输入以下命令删除工作负载:
$ oc --kubeconfig ./hostedcluster-secrets -n <namespace> delete deployment <deployment_name>
等待几分钟,无需额外的容量。在代理平台上,代理将被退役并可以重复使用。您可以通过输入以下命令确认节点已被删除:
$ oc --kubeconfig ./hostedcluster-secrets get nodes
对于 IBM Z 代理,仅对于带有 KVM 代理的 IBM Z,才会将计算节点与集群分离。对于 z/VM 和 LPAR,您必须手动删除计算节点。 只有对于带有 KVM 的 IBM Z,才能重复使用代理。对于 z/VM 和 LPAR,请重新创建代理以将其用作计算节点。 |
要禁用节点自动伸缩,请完成以下步骤。
输入以下命令以禁用托管集群的节点自动伸缩
$ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> --type=json -p '[\{"op":"remove", "path": "/spec/autoScaling"}, \{"op": "add", "path": "/spec/replicas", "value": <specify_value_to_scale_replicas>]'
此命令会从 YAML 文件中移除"spec.autoScaling"
,添加"spec.replicas"
,并将"spec.replicas"
设置为指定的整数值。
每个 OpenShift Container Platform 集群都有一个默认的应用程序 Ingress Controller,通常与其关联一个外部 DNS 记录。例如,如果您创建了一个名为example
、基础域为krnl.es
的托管集群,则可以预期通配符域*.apps.example.krnl.es
是可路由的。
要在您的访客集群上设置负载均衡器和*.apps
域的通配符 DNS 记录,请执行以下操作
通过创建一个包含 MetalLB 运算符配置的 YAML 文件来部署 MetalLB。
apiVersion: v1
kind: Namespace
metadata:
name: metallb
labels:
openshift.io/cluster-monitoring: "true"
annotations:
workload.openshift.io/allowed: management
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: metallb-operator-operatorgroup
namespace: metallb
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: metallb-operator
namespace: metallb
spec:
channel: "stable"
name: metallb-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
将文件保存为metallb-operator-config.yaml
。
输入以下命令以应用配置
$ oc apply -f metallb-operator-config.yaml
运算符运行后,创建 MetalLB 实例
创建一个包含 MetalLB 实例配置的 YAML 文件
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
name: metallb
namespace: metallb
将文件保存为metallb-instance-config.yaml
。
输入以下命令创建 MetalLB 实例
$ oc apply -f metallb-instance-config.yaml
创建一个具有单个 IP 地址的IPAddressPool
资源。此 IP 地址必须与集群节点使用的网络位于同一子网中。
创建一个文件(例如ipaddresspool.yaml
),内容如下例所示
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
namespace: metallb
name: <ip_address_pool_name> (1)
spec:
addresses:
- <ingress_ip>-<ingress_ip> (2)
autoAssign: false
1 | 指定IPAddressPool 资源名称。 |
2 | 指定您环境的 IP 地址。例如,192.168.122.23 。 |
输入以下命令应用 IP 地址池的配置
$ oc apply -f ipaddresspool.yaml
创建一个 L2 广告。
创建一个文件(例如l2advertisement.yaml
),内容如下例所示
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: <l2_advertisement_name> (1)
namespace: metallb
spec:
ipAddressPools:
- <ip_address_pool_name> (2)
1 | 指定L2Advertisement 资源名称。 |
2 | 指定IPAddressPool 资源名称。 |
输入以下命令应用配置
$ oc apply -f l2advertisement.yaml
创建LoadBalancer
类型的服务后,MetalLB 会为该服务添加一个外部 IP 地址。
通过创建一个名为metallb-loadbalancer-service.yaml
的 YAML 文件,配置一个新的负载均衡器服务,将 Ingress 流量路由到 Ingress 部署。
kind: Service
apiVersion: v1
metadata:
annotations:
metallb.universe.tf/address-pool: ingress-public-ip
name: metallb-ingress
namespace: openshift-ingress
spec:
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
selector:
ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
type: LoadBalancer
保存metallb-loadbalancer-service.yaml
文件。
输入以下命令应用 YAML 配置
$ oc apply -f metallb-loadbalancer-service.yaml
输入以下命令访问 OpenShift Container Platform 控制台
$ curl -kI https://console-openshift-console.apps.example.krnl.es
HTTP/1.1 200 OK
检查clusterversion
和clusteroperator
值以验证一切是否正常运行。输入以下命令
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusterversion,co
NAME VERSION AVAILABLE PROGRESSING SINCE STATUS
clusterversion.config.openshift.io/version 4.x.y True False 3m32s Cluster version is 4.x.y
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
clusteroperator.config.openshift.io/console 4.x.y True False False 3m50s
clusteroperator.config.openshift.io/ingress 4.x.y True False False 53m
将<4.x.y>
替换为您要使用的受支持的 OpenShift Container Platform 版本,例如4.17.0-multi
。
您可以在裸机上启用机器健康检查,以自动修复和替换不健康的托管集群节点。您必须有额外的代理机器已准备好安装在托管集群中。
在启用机器健康检查之前,请考虑以下限制
您无法修改MachineHealthCheck
对象。
只有当至少两个节点在False
或Unknown
状态持续超过 8 分钟时,机器健康检查才会替换节点。
为托管集群节点启用机器健康检查后,会在您的托管集群中创建MachineHealthCheck
对象。
要在您的托管集群中启用机器健康检查,请修改NodePool
资源。完成以下步骤
验证NodePool
资源中的spec.nodeDrainTimeout
值是否大于0s
。将<hosted_cluster_namespace>
替换为您的托管集群命名空间的名称,并将<nodepool_name>
替换为节点池名称。运行以下命令
$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep nodeDrainTimeout
nodeDrainTimeout: 30s
如果spec.nodeDrainTimeout
值不大于0s
,请通过运行以下命令修改该值
$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec":{"nodeDrainTimeout": "30m"}}' --type=merge
通过将NodePool
资源中的spec.management.autoRepair
字段设置为true
来启用机器健康检查。运行以下命令
$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec": {"management": {"autoRepair":true}}}' --type=merge
通过运行以下命令验证NodePool
资源是否已更新为autoRepair: true
的值
$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep autoRepair
要禁用托管集群节点的机器健康检查,请修改NodePool
资源。
通过将NodePool
资源中的spec.management.autoRepair
字段设置为false
来禁用机器健康检查。运行以下命令
$ oc patch nodepool -n <hosted_cluster_namespace> <nodepool_name> -p '{"spec": {"management": {"autoRepair":false}}}' --type=merge
通过运行以下命令验证NodePool
资源是否已更新为autoRepair: false
的值
$ oc get nodepool -n <hosted_cluster_namespace> <nodepool_name> -o yaml | grep autoRepair