OpenShift 4 - 有关 Operator 相关概念和运维操作(附视频)

89 篇文章 3 订阅
6 篇文章 0 订阅

OpenShift / RHEL / DevSecOps 汇总目录
文本已在 OpenShift 4.8 - OpenShift 4.11 环境中进行验证。

什么是 Operator

Operator 是 RedHat 收购的 CoreOS 公司最早发起的一项有助于 Kubernetes 运维的技术框架体系。它可以将一套复杂系统环境(例如:主备或 HA 数据库、包含多个微服务+数据库的应用环境)所涉及到的所有资源、配置、最佳实践整体打包,并基于 CRD 提供对相关资源提供针对性运维管理操作(创建、备份、恢复、自愈等),从而帮助 Kubernetes 运维管理员简化对这些系统的运维操作、降低运维难度。

OpenShift 提供并运行了大量的 Operator。根据重要程度,我们可以将这些 Operator 分为“集群 Operator ”和“常规 Operator” 两类。

集群 Operator

OpenShift 底层依赖的系统级服务都是以 Opertor 的方式运行的,例如 DNS、 Etcd。这些服务不是直接运行在 OpenShift 依赖的 Linux 操作系统上,而是以 ClusterOpertor (co) 的方式运行在 OpenShift 中。因为这些系统服务对于运行 OpenShift 非常重要,因此在安装 OpenShift 的阶段就会将 ClusterOpertor 安装好。ClusterOpertor 对象在整个集群中都有效,可在所有 NameSpace 中都问到到。

在 OpenShift 控制台的 “集群设置” 中查看集群中所包含的 “集群 Operator” 环境。
在这里插入图片描述
也可执行以下命令查看 OpenShift 中包含的所有集群 Operator。

$ oc get clusteroperator 

注意:在 OpenShift 中 ClusterOperaor 是由 Cluster Version Operator (CVO) 管理的。

常规 Operator

在 OpenShift 运行阶段根据需要安装的 Operator。有些常规 Operator 对象可所有 NameSpace 都有效,而有些则只能在特定 NameSpace 才能访问到,这取决于 Operator 自身特性以及在安装它们的时候选择的 NameSpace 范围。

在 OperatorHub 中找到 “Hello World Operator”,然后按照下图的缺省配置安装。注意:它虽然是安装在 “openshift-operators” 的 NameSpace 中,但是可以在所有 NameSpace 中被访问到。
在这里插入图片描述
可以执行以下命令查看在 default 的 NameSpace 中可以使用的 Operator。注意:其名称中包含了 Operator 安装的 NameSpace。

$ oc get operator -n default
NAME                                              AGE
hello-world-operator.openshift-operators          18m

注意:常规 Operator 是由 Lifecycle Manager (OLM) 管理的。OLM 实际上是由以下 3 个 ClusterOperator 组成的。

$ oc get clusteroperator | grep operator-lifecycle-manager
operator-lifecycle-manager                 4.8.12    True        False         False      372d
operator-lifecycle-manager-catalog         4.8.12    True        False         False      372d
operator-lifecycle-manager-packageserver   4.8.12    True        False         False      2d6h

OpenShift 的 Operator 相关概念和关系

在 OpenShift 中和 Operator 有关的对象比较多,本文主要从以下 2 个领域介绍相关概念和他们之间的关系:

  1. OperatorHub 相关对象:下图中 Catalog Operator 以及 4 类 Catalog Source。
  2. Operator 生命周期的相关对象:下图中 Subscription,InstalllPlan、ClusterServiceVersion 等资源。
    在这里插入图片描述

OperatorHub 应用市场的相关对象

OpenShift 通过 OperatorHub 向用户提供了应用市场功能。OperatorHub 能够集中组织和展现来自 RedHat、社区、红帽官方 Market Place 以及其他第三方 ISV 的 Operator。
在这里插入图片描述

OperatorHub

在 OpenShift 的 openshift-marketplace 项目中使用了名为 marketplace 的 clusteroperator 运行了一个名为 cluster 的 OperatorHub 自定义资源(CR)实例,该 OperatorHub CR 实例提供了 OperatorHub 的界面展现。在 openshift-marketplace 项目中,除了 marketplace-operator-xxx 外,其他 Pod 都是由对应的 CatalogSource CRD 创建的。

$ oc get operatorhub
NAME      AGE
cluster   374d
 
$ oc get co marketplace
NAME          VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
marketplace   4.8.12    True        False         False      374d 
 
$ oc get pod -n openshift-marketplace 
NAME                                    READY   STATUS    RESTARTS   AGE
certified-operators-9fksf               1/1     Running   0          22m
community-operators-fw8wx               1/1     Running   1          19h
marketplace-operator-7c6cb8c7b5-c2wn7   1/1     Running   4          371d
redhat-marketplace-8zhnc                1/1     Running   1          25h
redhat-operators-zjkxd                  1/1     Running   0          150m

CatalogSource 和 PackageManifest

在 OperatorHub 中展现的 Operator 列表是由 OperatorHub 关联的 CatalogSource 对象提供的。CatalogSource CRD 是用来定义一个 Operator 供应源提供的 Operator 列表,而一个 PackageManifest 则是对一个 Operator 的详细描述 。通常会将含有多个 Package Manifest 的 CatalogSource 整体打包成 Image,以方便分发。

OperShift 内置了以下 4 个不同类型的 CatalogSource 供应源,每个 CatalogSource 供应源将 Operator 供应信息打包到各自的 Image 中。
在这里插入图片描述
也可以用以下命令查看到这 4 个 CatalogSource CRD 实例:

$ oc get catalogsource -n openshift-marketplace
NAME                  DISPLAY               TYPE   PUBLISHER   AGE
certified-operators   Certified Operators   grpc   Red Hat     372d
community-operators   Community Operators   grpc   Red Hat     372d
redhat-marketplace    Red Hat Marketplace   grpc   Red Hat     372d
redhat-operators      Red Hat Operators     grpc   Red Hat     372d

这 4 个 CatalogSource 分别是以下 4 种不同供应类型的 Operator 集合:

CatalogSource索引镜像描述
redhat-operatorsregistry.redhat.io/redhat/redhat-operator-index:v4.X已由红帽打包并提供的红帽产品。受红帽支持。
certified-operatorsregistry.redhat.io/redhat/certified-operator-index:4.X来自主要独立软件供应商 (ISV) 的产品。受 ISV 支持。
redhat-marketplaceregistry.redhat.io/redhat/redhat-marketplace-index:v4.X可通过 Red Hat Marketplace 购买认证的软件。
community-operatorsregistry.redhat.io/redhat/community-operator-index:v4.X软件由社区相关方来维护,无官方支持。

这 4 个 CatalogSource CRD 是通过名为 operator-lifecycle-manager-catalog 的 ClusterOperator 运行的。

$ oc get clusteroperator | grep operator-lifecycle-manager
operator-lifecycle-manager-catalog         4.8.12    True        False         False      372d

可以查看每个 CatalogSource 包含的 Operator 列表,其中每个 Operator 的所有详细信息都被打包在 Package Manifest 中。
在这里插入图片描述

OpenShift 缺省自带的 4 个 CatalogSource CRD 实例的配置是只读的,无法进行修改。只能通过 “禁用” 关闭,这样就不会在 OperatorHub 界面中显示了。用户可以创建自己的 CatalogSource 实例,以在 OperatorHub 中显示客户定制的 Operator。

可以进入控制台的“集群设置”菜单,然后在页面中的“全局设置”栏中找到 OperatorHub 后进入,最后在 “源” 栏中可看到 OperatorHub 中包含的 CatalogSource CRD 实例列表 。可以对每一项使用 “禁用” 和 “启动” 功能,“禁用” 后, CatalogSource CRD 实例中包含的 Operator 将不显再示到 OperatorHub 界面中。
在这里插入图片描述
除了以上操作方法外,还在可以直接修改 OperatorHub 的配置实现“禁用”或“启动” CatalogSource。

$ oc edit operatorhub cluster
。。。
spec:
  sources:
  - disabled: false
    name: redhat-operators
。。。

PackageManifest 是描述特定 Operator 的元数据信息(例如图标、功能说明、缺省安装参数、相关的 CSV、CRD 和软件包存储库等),它被打包存放在指定 Image 中。 OpenShift 使用 CatalogSource CDR 来定义如何从 Registry 获取并更新这些 Image。

$ oc get catalogsource redhat-operators -n openshift-marketplace -oyaml
。。。
spec:
  displayName: Red Hat Operators
  image: registry.redhat.io/redhat/redhat-operator-index:v4.8
  publisher: ""
  sourceType: grpc
status:
  connectionState:
    address: redhat-operators.openshift-marketplace.svc:50051
    lastConnect: "2022-10-01T00:29:25Z"
    lastObservedState: READY
  registryService:
    createdAt: "2022-09-30T09:02:23Z"
    port: "50051"
    protocol: grpc
    serviceName: redhat-operators
    serviceNamespace: openshift-marketplace

OpenShift 通过 Pod 运行 CatalogSource CRD 使用到的 Image。

$ oc get pod -n openshift-marketplace 
NAME                                    READY   STATUS    RESTARTS   AGE
certified-operators-9fksf               1/1     Running   0          22m
community-operators-fw8wx               1/1     Running   1          19h
marketplace-operator-7c6cb8c7b5-c2wn7   1/1     Running   4          371d
redhat-marketplace-8zhnc                1/1     Running   1          25h
redhat-operators-zjkxd                  1/1     Running   0          150m

确认上面展示的名为 redhat-operators 的 CatalogSource 实例 YAML 中有 “address: redhat-operators.openshift-marketplace.svc:50051” 的内容,说明 CatalogSource 是通过运行在 50051 端口的服务获取 Package Manifest 数据。

$ oc get svc -n openshift-marketplace
NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
certified-operators            ClusterIP   10.217.5.146   <none>        50051/TCP           372d
community-operators            ClusterIP   10.217.5.144   <none>        50051/TCP           372d
marketplace-operator-metrics   ClusterIP   10.217.4.119   <none>        8383/TCP,8081/TCP   372d
redhat-marketplace             ClusterIP   10.217.5.123   <none>        50051/TCP           372d
redhat-operators               ClusterIP   10.217.4.130   <none>        50051/TCP           17h

OpenShift 更新 CatalogSource 的 Image 并更新 PackageManifest 信息的过程是通过 operator-lifecycle-manager-catalog 和 operator-lifecycle-manager-packageserver 这两个 Cluster 级别的 Operator 定期执行的。这两个 ClusterOperator 都通过对应的 Deployment 在各自的 Pod 中实现上述操作。

执行命令分别查看 operator-lifecycle-manager-catalog 和 operator-lifecycle-manager-packageserver 对应的 Pod 执行日志,确认其中包含 “catalog update required” 和 “updating PackageManifest” 日志。

$ oc get clusteroperator | grep operator-lifecycle-manager
operator-lifecycle-manager                 4.8.12    True        False         False      372d
operator-lifecycle-manager-catalog         4.8.12    True        False         False      372d
operator-lifecycle-manager-packageserver   4.8.12    True        False         False      2d6h
 
$ oc get deployment -n openshift-operator-lifecycle-manager
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
catalog-operator         1/1     1            1           352d
olm-operator             1/1     1            1           352d
package-server-manager   1/1     1            1           352d
packageserver            1/1     1            1           352d
 
$ oc logs deploy/catalog-operator -n openshift-operator-lifecycle-manager | grep "catalog update required"
$ oc logs deploy/catalog-operator -n openshift-operator-lifecycle-manager | grep "level=error" 
 
$ oc logs deploy/packageserver -n openshift-operator-lifecycle-manager | grep "updating PackageManifest"
。。。
I1001 12:46:16.890865       1 reflector.go:381] github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer/queueinformer_operator.go:153: forcing resync
time="2022-10-01T12:46:16Z" level=info msg="updating PackageManifest based on CatalogSource changes: {redhat-operators openshift-marketplace}" action="sync catalogsource" address="redhat-operators.openshift-marketplace.svc:50051" name=redhat-operators namespace=openshift-marketplace
time="2022-10-01T12:46:16Z" level=info msg="updating PackageManifest based on CatalogSource changes: {certified-operators openshift-marketplace}" action="sync catalogsource" address="certified-operators.openshift-marketplace.svc:50051" name=certified-operators namespace=openshift-marketplace
time="2022-10-01T12:46:17Z" level=info msg="updating PackageManifest based on CatalogSource changes: {community-operators openshift-marketplace}" action="sync catalogsource" address="community-operators.openshift-marketplace.svc:50051" name=community-operators namespace=openshift-marketplace
time="2022-10-01T12:46:17Z" level=info msg="updating PackageManifest based on CatalogSource changes: {redhat-marketplace openshift-marketplace}" action="sync catalogsource" address="redhat-marketplace.openshift-marketplace.svc:50051" name=redhat-marketplace namespace=openshift-marketplace
。。。

在获取到 Package Manifest 数据后就可以将与之对应的 Operator 列表展示到 OpenShift 的 OperatorHub 界面中了。由于 Package Manifest 就代表一个可以使用的 Opertor,所以以下命令是列出 OperatorHub 中所有集群可用的 Operator。

$ oc get packagemanifest -n openshift-marketplace
NAME                                                 CATALOG               AGE
cortex-hub-operator                                  Certified Operators   371d
cortex-healthcare-hub-operator                       Certified Operators   371d
orca                                                 Certified Operators   371d
verticadb-operator                                   Community Operators   371d
as400rpc-operator-rhmp                               Red Hat Marketplace   371d
openshiftpipeline-operator                           Certified Operators   371d
netobserv-operator                                   Community Operators   371d
instana-agent-operator-rhmp                          Red Hat Marketplace   371d
bamoe-businessautomation-operator                    Red Hat Operators     371d
skupper-operator                                     Red Hat Operators     371d
falco-certified                                      Certified Operators   371d
varnish-operator                                     Community Operators   371d
cloud-native-postgresql                              Certified Operators   371d
snapscheduler                                        Community Operators   371d
cic-operator-with-crds-rhmp                          Red Hat Marketplace   371d
service-telemetry-operator                           Red Hat Operators     371d
esindex-operator                                     Community Operators   371d
...

也可以在 openshift-operator-lifecycle-manager 项目中进入名为 “Package Server” 的 Operator,在 PackageManifest 栏目中可以看到从不同 CatalogSource 导入的 Operator。
在这里插入图片描述

Operator 生命周期的相关概念

用户在使用 Operator 的时候,OpenShift 是通过集群中 Opertor Lifecycle Manager (OLM) Operator 完成 Operator 的展现、安装、更新、升级、运维等生命周期相关操作的。
在这里插入图片描述

Subscription (sub) 订阅 CRD

管理员通过 Operator 安装或升级一个软件的基础运行环境(不是实例运行环境)是通过 Subscription 实现的。Subscription 用于通过跟踪软件包中的频道来保持 CSV 最新。在 Subscription 中使用了 Channel 定义了该软件可用的安装或升级的版本。Subscription 还定义了是自动化升级软件版本、还是需要审批才可升级。

$ oc get sub -A
NAMESPACE             NAME                          PACKAGE                       SOURCE             CHANNEL
openshift-operators   hello-world-operator          hello-world-operator          certified-operators   stable

$ oc get sub hello-world-operator -n openshift-operators -oyaml
。。。
spec:
  channel: stable
  installPlanApproval: Automatic
  name: hello-world-operator
  source: certified-operators
  sourceNamespace: openshift-marketplace
  startingCSV: hello-world-operator.0.0.1
。。。

InstallPlan (ip) 安装计划 CRD

要安装 Operator,集群管理员或被授予 Operator 安装权限的用户,必须首先创建一个 Subscription 对象。随后 OpenShift 的 OLM 会根据 Subscription 创建一个 InstallPlan 对象来安装 Operator 资源。InstallPlan 被 Subscription 用来执行安装 CVS,并记录安装结果。

$ oc get installplan install-fv9q9 -n openshift-operators
NAME            CSV                          APPROVAL    APPROVED
install-fv9q9   hello-world-operator.0.0.1   Automatic   true

$ oc get installplan install-fv9q9 -n openshift-operators -oyaml
。。。
spec:
  approval: Automatic
  approved: true
  clusterServiceVersionNames:
  - hello-world-operator.0.0.1
  generation: 1
。。。

ClusterServiceVersion (csv) CRD

ClusterServiceVersion (csv) 对象描述一个 Operator 所有 metadata,包括所有在 OperatorHub 页面中看到的 operator 说明信息、安装界面、所包含CRD说明、安装后的操作界面等。csv 对象在整个集群中都有效。

$ oc get csv
NAME                         DISPLAY                VERSION   REPLACES   PHASE
hello-world-operator.0.0.1   Hello World Operator   0.0.1                Succeeded
$ oc get csv hello-world-operator.0.0.1 -oyaml

当 CSV 的状态为 Succeeded 的时候,说明 Operator 已经安装好好了。
在这里插入图片描述

支持离线安装的 Operator 列表

部分 Red Hat 提供的 Operator 支持离线安装,可参见 https://access.redhat.com/articles/4740011 说明。
https://two-oes.medium.com/deploying-a-single-operator-on-openshift-disconnected-22e01b44a5d1

演示视频

用 Operator 部署和管理用户应用
用 Operator 管理 PaaS 软件生命周期

参考

https://olm.operatorframework.io/docs/concepts/olm-architecture/
Operator 相关概念
https://indico.cern.ch/event/829468/attachments/1936132/3208502/005-Operator-Workshop-Operator-Lifeycle-Manager.pdf
Operator troubleshooting
https://medium.com/@imsrv01/how-olm-helps-to-install-and-upgrade-operators-e81704c093fd
https://medium.com/@vbudidarmawan/demystifying-operator-deployment-in-openshift-2ac7f24ad487
https://techbloc.net/archives/4372
https://www.redhat.com/en/technologies/cloud-computing/openshift/what-are-openshift-operators
https://www.redhat.com/rhdc/managed-files/cl-oreilly-kubernetes-operators-ebook-f21452-202001-en_2.pdf
https://www.youtube.com/watch?v=5PorcMTYZTo

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值