$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
在裸机上部署托管控制平面后,您可以通过完成以下任务来管理托管集群。
您可以通过直接从资源获取kubeconfig
文件和kubeadmin
凭据,或使用hcp
命令行界面生成kubeconfig
文件来访问托管集群。
要通过直接从资源获取kubeconfig
文件和凭据来访问托管集群,您必须熟悉托管集群的访问密钥。托管集群(托管)命名空间包含托管集群资源和访问密钥。托管控制平面命名空间是托管控制平面运行的位置。
密钥名称格式如下:
kubeconfig
密钥:<托管集群命名空间>-<名称>-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 提供程序都会找到并安装一个满足节点池规范中指定要求的代理。您可以通过检查其状态和条件来监控代理的安装。
缩减节点池时,代理会与相应的集群解除绑定。在您可以重用代理之前,必须使用 Discovery 镜像重新启动它们。
将 NodePool
对象扩展到两个节点
$ oc -n <hosted_cluster_namespace> scale nodepool <nodepool_name> --replicas 2
集群 API 代理提供程序会随机选择两个代理,然后将其分配给托管集群。这些代理会经历不同的状态,最终作为 OpenShift Container Platform 节点加入托管集群。代理按以下顺序经过各个状态:
绑定 (binding)
发现 (discovering)
不足 (insufficient)
安装 (installing)
安装中 (installing-in-progress)
已添加到现有集群 (added-to-existing-cluster)
输入以下命令
$ 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。您可以添加的节点最大数量可能受您的平台限制。例如,如果您使用 Agent 平台,则节点最大数量受可用代理数量的限制。 |
创建一个需要新节点的工作负载。
使用以下示例创建一个包含工作负载配置的 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
您可以输入以下命令检查新的节点是否处于 Ready
状态
$ oc --kubeconfig ./hostedcluster-secrets get nodes
要删除节点,请通过输入以下命令删除工作负载
$ oc --kubeconfig ./hostedcluster-secrets -n <namespace> delete deployment <deployment_name>
等待几分钟,期间不需要额外的容量。在 Agent 平台上,代理将退役并可重复使用。您可以通过输入以下命令确认节点已删除
$ oc --kubeconfig ./hostedcluster-secrets get nodes
对于 IBM Z 代理,只有在使用 KVM 代理的 IBM Z 上,计算节点才会与集群分离。对于 z/VM 和 LPAR,您必须手动删除计算节点。 只有在 IBM Z with KVM 上才能重用代理。对于 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 集群都有一个默认的应用程序入口控制器,通常与其关联一个外部 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文件,配置一个新的负载均衡器服务,将入口流量路由到入口部署。
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