《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在 OpenShift 4.12 + OpenShift Virtualization 4.12 + ACM 2.8 的环境中验证
文章目录
- 技术架构
- 安装配置环境
- 环境要求
- 安装配置 OpenShift Virtualization
- 安装配置 Red Hat ACM
- 安装配置 MetalLB
- 在 OpenShift Virtualization 中创建 OpenShift Hosted Cluster 托管集群
- 删除托管集群
- 演示视频
- 参考
技术架构
利用 OpenShift Virtualization 运行 OpenShift Hosted Cluster 即托管集群的架构如下图,该模式就是在 OpenShift 管理集群中的由 OpenShift Virtualization 提供的 VM 中运行托管集群的 Worker 节点。
安装配置环境
环境要求
- 如果是生产环境,建议在 Baremetal 环境中运行 OpenShift 管理集群。
- OpenShift 管理集群需要使用 Kubernetes-OVN 类型的 CNI。如果使用的是 OpenShiftSDN,可参考《Migrating to the OVN-Kubernetes network plugin》将其转换成 Kubernetes-OVN。
安装配置 OpenShift Virtualization
- 使用缺省配置安装 OpenShift Virtualization Operator。
- 然后在其内部使用缺省配置创建一个 OpenShift Virtualization Deployment。
安装配置 Red Hat ACM
- 使用缺省配置安装 Red Hat ACM Operator。
- 使用缺省配置创建一个 MultiClusterHub 对象。
- 执行命令允,许 multiclusterengine 使用 hypershift-preview。说明:这是由于该功能目前还是 Preview 阶段,预计正式 GA 后可省略此步。
$ oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled":true}]}}}'
- 基于以下 YAML 创建一个 ManagedClusterAddOn 对象。
apiVersion: addon.open-cluster-management.io/v1alpha1
kind: ManagedClusterAddOn
metadata:
name: hypershift-addon
namespace: local-cluster
spec:
installNamespace: open-cluster-management-agent-addon
- 执行以下命令,确认在 hypershift 项目中有运行的 Pod。
$ oc get pod -n hypershift
NAME READY STATUS RESTARTS AGE
operator-7fdc8d998b-8s7pl 1/1 Running 0 9h
operator-7fdc8d998b-l9xpd 1/1 Running 0 9h
安装配置 MetalLB
- 使用缺省配置安装 MetalLB Operator。
- 基于以下缺省配置创建一个 MetalLB 对象。
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
name: metallb
namespace: metallb-system
- 基于以下 YAML 创建一个 IPAddressPool 对象。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: ip-addresspool
namespace: metallb-system
spec:
addresses:
- 10.39.127.20-10.39.127.26
autoAssign: true
avoidBuggyIPs: false
- 基于以下 YAML 创建一个 L2Advertisement 对象。
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-adv
namespace: metallb-system
spec:
ipAddressPools:
- ip-addresspool
- 执行命令,允许 OpenShift 的 ingresscontroller 使用 wildcard DNS routes。
$ oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
在 OpenShift Virtualization 中创建 OpenShift Hosted Cluster 托管集群
- 创建名为 clusters 的新项目。
$ oc new-project clusters
-
在 RHACM 控制台的集群页面中点击“创建集群”,然后进入 Red Hat OpenShift Virtualization,再点击 “托管”就可看到以下创建集群的提示界面。
-
根据上图的提示执行以下命令,即可创建托管集群,其 Worker 节点将运行在有 kubevirt 供应的 VM 环境中。另外,其中的 pull-secret 文件是从 Red Hat 官方下载镜像的 secret。
$ export PULL_SECRET="$HOME/pull-secret"
$ export MEM="6Gi"
$ export CPU="2"
$ export WORKER_COUNT="2"
$ export CLUSTER_NAME=my-cluster-1
$ export OCP_VERSION=4.13.2
$ hypershift create cluster kubevirt \
--name $CLUSTER_NAME \
--release-image quay.io/openshift-release-dev/ocp-release:$OCP_VERSION-x86_64 \
--node-pool-replicas $WORKER_COUNT \
--pull-secret $PULL_SECRET \
--memory $MEM \
--cores $CPU
- 托管集群成功创建后,可在 RHACM 中看到该集群。
删除托管集群
- 可执行以下命令删除托管集群。
$ hypershift destroy cluster kubevirt --name my-cluster-1
2023-09-06T11:59:18Z INFO Found hosted cluster {"namespace": "clusters", "name": "my-cluster-1"}
2023-09-06T11:59:19Z INFO Updated finalizer for hosted cluster {"namespace": "clusters", "name": "my-cluster-1"}
2023-09-06T11:59:19Z INFO Deleting hosted cluster {"namespace": "clusters", "name": "my-cluster-1"}
2023-09-06T12:01:41Z INFO Deleting Secrets {"namespace": "clusters"}
2023-09-06T12:01:41Z INFO Deleted CLI generated secrets
2023-09-06T12:01:41Z INFO Finalized hosted cluster {"namespace": "clusters", "name": "my-cluster-1"}
2023-09-06T12:01:41Z INFO Successfully destroyed cluster and infrastructure {"namespace": "clusters", "name": "my-cluster-1d", "infraID": "my-cluster-1-zkrvf"}
演示视频
视频
参考
https://medium.com/@ben.swinney_ce/hypershift-with-kubevirt-564bd1f850ce