OpenShift 4 - 在 OpenShift Virtualization 上自动部署 OpenShift 托管集群(演示视频)

《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在 OpenShift 4.12 + OpenShift Virtualization 4.12 + ACM 2.8 或 MCE 2.3 的环境中验证

文章目录

  • 技术架构
  • 安装配置环境
  • 环境要求
    • 安装配置 OpenShift Virtualization
    • 安装配置 Red Hat ACM 或 MCE
    • 安装配置 MetalLB
    • 在 OpenShift Virtualization 中创建 OpenShift Hosted Cluster 托管集群
    • 删除托管集群
  • 演示视频
  • 参考

技术架构

利用 OpenShift Virtualization 运行 OpenShift Hosted Cluster 即托管集群的架构如下图,该模式就是在 OpenShift 管理集群中的由 OpenShift Virtualization 提供的 VM 中运行托管集群的 Worker 节点。
OpenShift 4 - 在 OpenShift Virtualization 上自动部署 OpenShift 托管集群(演示视频)_第1张图片

安装配置环境

环境要求

  • 如果是生产环境,建议在 Baremetal 环境中运行 OpenShift 管理集群。
  • OpenShift 管理集群需要使用 Kubernetes-OVN 类型的 CNI。如果使用的是 OpenShiftSDN,可参考《Migrating to the OVN-Kubernetes network plugin》将其转换成 Kubernetes-OVN。

安装配置 OpenShift Virtualization

  1. 使用缺省配置安装 OpenShift Virtualization Operator。
  2. 然后在其内部使用缺省配置创建一个 OpenShift Virtualization Deployment。

安装配置 Red Hat ACM 或 MCE

  1. 使用缺省配置安装 Red Hat ACM Operator 或 MCE Operator。
  2. 使用缺省配置创建一个 MultiClusterHub 或 MultiClusterEngine (名称为 multiclusterengine) 对象。
  3. 执行命令允许 multiclusterengine 使用 hypershift-preview。说明:这是由于该功能目前还是 Preview 阶段,预计正式 GA 后可省略此步。
$ oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled":true}]}}}'
  1. 上一步操作会基于以下 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
  1. 确认会自动创建 hypershift 项目和 Deployment 。
$ oc get deployment -n hypershift
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
operator   2/2     2            2           6m6s
$ 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

  1. 使用缺省配置安装 MetalLB Operator。
  2. 基于以下缺省配置创建一个 MetalLB 对象。
apiVersion: metallb.io/v1beta1
kind: MetalLB
metadata:
  name: metallb
  namespace: metallb-system
  1. 基于以下 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
  1. 基于以下 YAML 创建一个 L2Advertisement 对象。
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2-adv
  namespace: metallb-system
spec:
  ipAddressPools:
    - ip-addresspool
  1. 执行命令,允许 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 托管集群

  1. 创建名为 clusters 的项目。
$ oc new-project clusters
  1. 下载 hypershift 客户端。
$ curl -LOk https://hypershift-cli-download-multicluster-engine.$(
oc get ingresscontroller default -n openshift-ingress-operator -o json | jq -r '.status.domain'
)/linux/amd64/hypershift.tar.gz
$ tar -xvf hypershift.tar.gz
  1. 在 RHACM 控制台的集群页面中点击“创建集群”,然后进入 Red Hat OpenShift Virtualization,再点击 “托管”就可看到以下创建集群的提示界面。
    OpenShift 4 - 在 OpenShift Virtualization 上自动部署 OpenShift 托管集群(演示视频)_第2张图片

  2. 根据上图的提示执行以下命令,即可创建托管集群,其 Worker 节点将运行在有 kubevirt 供应的 VM 环境中。另外,其中的 pull-secret 文件是从 Red Hat 官方下载。

$ 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
  1. 托管集群成功创建后,可在 RHACM 中看到该集群。
    OpenShift 4 - 在 OpenShift Virtualization 上自动部署 OpenShift 托管集群(演示视频)_第3张图片

删除托管集群

  1. 可执行以下命令删除托管集群。
$ 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
https://cloud.redhat.com/blog/effortlessly-and-efficiently-provision-openshift-clusters-with-openshift-virtualization

你可能感兴趣的:(openshift)