k8s

OLM简介

OLM

Operator Lifecycle Manager (OLM)它旨在简化 Operator 的安装、更新和管理。OLM 为 Operator 提供了一个标准化的部署和生命周期管理机制。Operator SDK 既支持为 OLM 部署创建清单,也支持在启用了 OLM 的 Kubernetes 集群上测试 Operator。

官方文档:https://olm.operatorframework.io/docs/

功能

  • Operator 部署和安装:
    • OLM 提供了一个 Operator 注册中心,开发者可以将自己的 Operator 上传到这个中心。
    • 用户可以通过 OLM 轻松地从注册中心安装和部署所需的 Operator。
  • 版本管理和升级:
    • OLM 能够管理 Operator 的版本信息,并提供自动升级功能。
    • 当有新版本的 Operator 可用时,OLM 会自动将现有的 Operator 升级到新版本。
  • 依赖管理:
    • OLM 可以管理 Operator 之间的依赖关系,确保在部署 Operator 时,所有必需的依赖都能够被正确安装。
  • 权限管理:
    • OLM 提供了一个基于角色的访问控制系统(RBAC),可以控制 Operator 对 Kubernetes 资源的访问权限。
  • 监控和日志:
    • OLM 可以收集和展示 Operator 的运行状态和指标数据,帮助用户监控 Operator 的健康状况。
    • OLM 还能够收集和管理 Operator 的日志信息。

概念

ClusterServiceVersion

ClusterServiceVersion (CSV) 表示集群上正在运行的 Operator 的特定版本。它包括元数据,例如名称、描述、版本、存储库链接、标签、图标等。它声明 owned 了 / required CRD、集群要求和安装策略,告诉 OLM 如何创建所需的资源并将 Operator 设置为 Deployment。

Deployment 就像可以从模板中注销 Pod 一样, ClusterServiceVersion 描述了 Operator Deployment 的模板并可以将它们注销。

OLM 要求您提供有关 Operator 的元数据,以确保它可以在集群上安全运行,并提供有关在发布 Operator 的新版本时应如何应用更新的信息。这与rpm,deb等打包软件类似。

示例

apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
  annotations:
  name: memcached-operator.v0.10.0
spec:
  # 元数据
  description: This is an operator for memcached.
  displayName: Memcached Operator
  keywords:
  - memcached
  - app
  maintainers:
  - email: corp@example.com
    name: Some Corp
  maturity: alpha
  provider:
    name: Example
    url: www.example.com
  version: 0.10.0
  minKubeVersion: 1.16.0

  # operator 作用域
  installModes:
  - supported: true
    type: OwnNamespace
  - supported: true
    type: SingleNamespace
  - supported: false
    type: MultiNamespace
  - supported: true
    type: AllNamespaces

  # 安装
  install:
    # 策略指示使用哪种类型部署项目
    strategy: deployment
    # 部署策略的spec是部署规范和所需权限的列表——类似于部署中使用的pod模板
    spec:
      permissions:
      - serviceAccountName: memcached-operator
        rules:
        - apiGroups:
          - ""
          resources:
          - pods
          verbs:
          - '*'
          # the rest of the rules
      # 集群范围所需的权限
      clusterPermissions:
      - serviceAccountName: memcached-operator
        rules:
        - apiGroups:
          - ""
          resources:
          - serviceaccounts
          verbs:
          - '*'
          # the rest of the rules
      deployments:
      - name: memcached-operator
        spec:
          replicas: 1
          # the rest of a deployment spec

  # operator提供的apis
  customresourcedefinitions:
    owned:
    # operator拥有的crd列表
    # name is the metadata.name of the CRD (which is of the form <plural>.<group>)
    - name: memcacheds.cache.example.com
      # version is the spec.versions[].name value defined in the CRD
      version: v1alpha1
      # kind is the CamelCased singular value defined in spec.names.kind of the CRD.
      kind: Memcached
    required:
    # operator所需的crd列表
    # see field descriptions above
    - name: others.example.com
      version: v1alpha1
      kind: Other

CatalogSource

CatalogSource 表示 OLM 可以查询的元数据,以发现和安装 Operator 及其依赖项。
CatalogSource主要有三种类型 spec.sourceType

  • 带有 image 引用的 grpc :OLM 将拉取镜像并运行具有 api endpoint 的 pod,该 endpoint 可以查询存储中的元数据。
  • 带有 address 字段的grpc:OLM 将尝试联系给定地址的 grpc api。在大多数情况下,不应使用此方法。
  • internal 或者 configmap :OLM 将解析 configmap 的数据并启动一个 pod,该 pod 可以在其上提供 grpc api。

示例

apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: operatorhubio-catalog
  namespace: olm
spec:
  sourceType: grpc
  image: quay.io/operatorhubio/catalog:latest
  displayName: Community Operators
  publisher: OperatorHub.io

上面的代码为 OperatorHub.io 定义了一个 CatalogSource。它的名字用作 Subscription 的输入,它告诉 OLM 在哪里查找请求的操作符。

Subscription

订阅表示安装 Operator 的意图。它是将 Operator 与 CatalogSource 相关联的自定义资源。订阅描述要订阅的 Operator 包的哪个频道,以及是自动更新还是手动更新。如果设置为自动,则订阅将确保 OLM 将管理和升级 Operator,以确保在集群中运行的始终是最新版本。

示例

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: my-operator
  namespace: olm
spec:
  channel: stable
  name: my-operator
  source: operatorhubio-catalog

Subscription 定义了 Operator 的名称和命名空间,以及可从中找到 Operator 数据的目录。通道(如 alpha、beta 或 stable)有助于确定应从 CatalogSource 安装 Operator 的哪个流。

手动升级

默认情况下,当新版本通过 CatalogSource 可用时,OLM 将自动批准对 Operator 的更新。创建订阅时,可以通过将 installPlanApproval 字段设置为 Manual 如下所示来禁用自动更新。InstallPlan 定义了要创建的一组资源,以便安装或升级到 CSV 定义的 ClusterService 的特定版本。

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: my-operator
  namespace: operators
spec:
  channel: stable
  name: my-operator
  source: my-catalog
  sourceNamespace: operators
  installPlanApproval: Manual

手动审批

使用patch命令。

kubectl -n operators get installplans
NAME            CSV                                APPROVAL   APPROVED
install-bfmxd   my-operator.v0.1.0                 Manual     false

$ kubectl -n operators patch installplan install-bfmxd -p '{"spec":{"approved":true}}' --type merge
installplan.operators.coreos.com/install-bfmxd patched

$ kubectl -n operators get installplans
NAME            CSV                                APPROVAL   APPROVED
install-bfmxd   my-operator.v0.1.0                 Manual     true

当有新版本时,将在对应的namespace中创建一个新的installplans

$ kubectl -n operators get installplans
NAME            CSV                                APPROVAL   APPROVED
install-bfmxd   my-operator.v0.1.0                 Manual     true
install-svojy   my-operator.v0.2.0                 Manual     false

当新的 installPlan 处于批准状态时, my-operator.v0.2.0 CSV 将部署到集群,如果 CSV 达到 Succeeded 状态,则将删除旧的 CSV。如果新的 CSV 无法达到 Succeeded 状态,则两个 CSV 将继续存在,由用户来解决故障。无论哪种情况,OLM 都不会删除旧的 installPlans,因为它们作为集群上安装 CSV 的记录。

通过检查 Operator 的订阅状态,可以确定何时有较新版本的 Operator 可用。与 currentCSV 字段关联的值是 OLM 已知的最新版本,并且是 installedCSV 集群上安装的版本。

OperatorCondition

OperatorCondition 是一个 CRD,用于在 OLM 和它管理的 Operator 之间创建通信。Operator 可以写入 Status.Conditions 数组去修改 Operator 的OLM管理。

示例

apiVersion: operators.coreos.com/v1
kind: OperatorCondition
metadata:
  name: foo-operator
  namespace: operators
spec:
  overrides:
  - type: Upgradeable # 允许集群管理员将Operator的升级准备更改为True
    status: "True"
    reason: "upgradeIsSafe" # 可选
    message: "The cluster admin wants to make the operator eligible for an upgrade." # 可选
status:
  conditions:
  - type: Upgradeable
    status: "False"
    reason: "migration"
    message: "The operator is performing a migration."
    lastTransitionTime: "2020-08-24T23:15:55Z"

OperatorGroup

OperatorGroup 是一种 OLM 资源,它为已安装 OLM 的 Operator 提供基本的多租户配置。
详情参见:https://olm.operatorframework.io/docs/concepts/crds/operatorgroup/

架构

Operator Lifecycle Manager 由两个 Operator 组成:OLM Operator 和 Catalog Operator。这两个 Operator 都负责管理 OLM 框架基础的 CRD:

资源 简称 所有者 描述
ClusterServiceVersion csv OLM 应用程序元数据:名称、版本、图标、所需资源、安装等。
InstallPlan ip Catalog 自动安装或升级 CSV 所需创建的资源的计算列表。
CatalogSource catsrc catsrc Catalog 用于定义应用程序的 CSV、CRD 和包的存储库。
Subscription sub Catalog 用于定义应用程序的 CSV、CRD 和包的存储库。
OperatorGroup og OLM 用于对多个命名空间进行分组供 Operator 使用
分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x