OpenShift 4 - 多云管理(2) - 向多云的集群部署应用(附视频)

OpenShift / RHEL / DevSecOps 汇总目录
本文在 OpenShift 4.15 + RHACM 2.10 环境中进行验证。

RHACM 是如何部署应用的

RHACM 使用如下一些概念来统一管理应用生命周期。

  1. Application:组成一个应用的所有 Kubernetes 资源。
  2. Channel:获取应用部署资源的渠道,RHACM 支持 Git,Helm 和对象存储。
  3. PlacementRule:定义应用部署的目标集群。
  4. Subscription:绑定 Channel 和 PlacementRule。

在这里插入图片描述

向被管集群部署应用

我们可以使用 RHACM 中的 Applications 在多云环境统一部署应用。RHACM 除了本身支持应用生命周期管理外,还支持通过集成 ArgoCD 和 Ansible 部署应用和管理应用生命周期。

  1. 先在 RHACM 控制台中为一个被管 OpenShift 集群(例如 ocp-cluster-1)添加 “environment=dev” 的标签。
    在这里插入图片描述
  2. 执行命令,创建 Channel 指向应用 Git 源。注意:上游 Git Repo 中的 04.Application-Lifecycle/exercise-application/application-resources/configmap.yaml 中对象名称和 deployment.yaml 中使用的名称不同,导致错误。
$ oc new-project webserver-acm
$ cat << EOF | oc apply -f -
---
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
  name: webserver-app
  namespace: webserver-acm
spec:
  type: Git
  pathname: https://github.com/liuxiaoyu-git/rhacm-workshop-1
EOF
  1. 创建 PlacementRule,它基于 environment=dev 的标签选择部部署的目标集群。
$ cat << EOF | oc apply -f -
---
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
  name: dev-clusters
  namespace: webserver-acm
spec:
  clusterConditions:
    - type: ManagedClusterConditionAvailable
      status: "True"
  clusterSelector:
    matchLabels:
      environment: dev
EOF
  1. 创建 Subscription,它绑定 PlacementRule 和 Channel。
$ cat << EOF | oc apply -f -
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: webserver-app-dev
  namespace: webserver-acm
  labels:
    app: webserver-app
  annotations:
    apps.open-cluster-management.io/github-path: 04.Application-Lifecycle/exercise-application/application-resources
    apps.open-cluster-management.io/git-branch: dev
spec:
  channel: webserver-acm/webserver-app
  placement:
    placementRef:
      kind: PlacementRule
      name: dev-clusters
EOF
  1. 创建 Application,并通过 “app: webserver-app” 标签和 Subscription 关联起来。
$ cat << EOF | oc apply -f -
apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
  name: webserver-app
  namespace: webserver-acm
spec:
  componentKinds:
  - group: apps.open-cluster-management.io
    kind: Subscription
  descriptor: {}
  selector:
    matchExpressions:
    - key: app
      operator: In
      values:
      - webserver-app
EOF

在创建完可以在 RHACS 控制台的 “应用程序” 中通过过滤器看到 webserver-app 应用。
在这里插入图片描述

  1. (可选)以上 Application、Channel、Subscription 等对象也可在 RHACM 界面上进行配置。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 进入名为 webserver-app 的应用,可以在 “拓扑” 中看到 Application、Subscription、Placement 和 OpenShift 集群的关系。由于在 Placement 中使用 environment: dev 的标签,并且由于 ocp-cluster-1 集群有 environment: dev 的标签,因此可以看到应用运行在 ocp-cluster-1 集群上。
    在这里插入图片描述
  3. 在 ocp-cluster-1 被管集群中可以看到部署的应用资源。
$ oc get all -n webserver-acm
NAME                             READY   STATUS    RESTARTS   AGE
pod/webserver-86447cb946-d4kg7   1/1     Running   0          15m
 
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/webserver   ClusterIP   172.30.162.216   <none>        8080/TCP   15m
 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/webserver   1/1     1            1           15m
 
NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/webserver-86447cb946   1         1         1       15m
 
NAME                                 HOST/PORT                                                                  PATH                SERVICES    PORT       TERMINATION   WILDCARD
route.route.openshift.io/webserver   webserver-webserver-acm.apps.cluster-jh4rb.jh4rb.sandbox1343.opentlc.com   /application.html   webserver   8080-tcp   edge          None
  1. 执行以下命令创建新的 PlacementRule 和 Subscription。新的 PlacementRule 部署集群目标是 “environment: production” 标签。
$ cat << EOF | oc apply -f -
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
  name: prod-clusters
  namespace: webserver-acm
spec:
  clusterConditions:
    - type: ManagedClusterConditionAvailable
      status: "True"
  clusterSelector:
    matchLabels:
      environment: production
EOF
 
$ cat << EOF | oc apply -f -
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
  name: webserver-app-prod
  namespace: webserver-acm
  labels:
    app: webserver-app
  annotations:
    apps.open-cluster-management.io/github-path: 04.Application-Lifecycle/exercise-application/application-resources
spec:
  channel: webserver-acm/webserver-app
  placement:
    placementRef:
      kind: PlacementRule
      name: prod-clusters
EOF
  1. 再次查看这个应用的部署拓扑,可以看到 Placements 图标有错误,提示没有找到带有 environment=production 标签的集群。
    在这里插入图片描述
  2. 导入一个新的集群,例如名为 ocp-cluster-2 的被管集群,并为止添加 environment=production 标签。
    在这里插入图片描述
  3. 在 Application 的 Resource topology 中确认应用已经通过 PlacementRule 找到并部署到名为 ocp-cluster-2 的集群了。
    在这里插入图片描述
  4. 最后确认在名为 ocp-cluster-2 的集群中 webserver-acm 的项目中已经有部署好的应用了。
$ oc get all -n webserver-acm
NAME                             READY   STATUS    RESTARTS   AGE
pod/webserver-5b94b86d86-t65kg   1/1     Running   0          3m40s
 
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/webserver   ClusterIP   172.30.189.119   <none>        8080/TCP   3m40s
 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/webserver   1/1     1            1           3m40s
 
NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/webserver-5b94b86d86   1         1         1       3m40s
 
NAME                                 HOST/PORT                                                                 PATH                SERVICES    PORT       TERMINATION   WILDCARD
route.route.openshift.io/webserver   webserver-webserver-acm.apps.cluster-gwdv8.gwdv8.sandbox518.opentlc.com   /application.html   webserver   8080-tcp   edge          None
 
NAME                                   TYPE   VERSION   OWNER   READY   AGE
application.app.k8s.io/webserver-app                                    72m

演示视频

视频

参考

https://access.redhat.com/documentation/zh-cn/red_hat_advanced_cluster_management_for_kubernetes/2.10/html-single/applications/index

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值