OperatorLifecycleManager 101

OperatorLifecycleManager 101

CloudNative Days Tokyo 2020 (2020/09/08-09)
「そーいうことね。Operator Lifecycle Manager完全に理解した。」
で発表した資料です。
https://event.cloudnativedays.jp/cndt2020/talks/23

269258447d4284b5cb2ce0f048d143b2?s=128

Shingo.Kitayama

September 07, 2020
Tweet

Transcript

  1. そ~いうことね。 完全に理解した

  2. None
  3. 運用の知見をコード化し、ステートフルアプリケーションの運用を自動化する アプリ運用における運用の知見をコード化し、 パッケージ化したもの。 アプリケーション運用に必要な以下のような作業 を自動的に行う。 ・インストール ・リソーススケーリング ・バックアップ ・アップデート 運用の知見をコード化

  4. None
  5. None
  6. 『 』 ではあるものの。話の流れ上、 「 」 と言う意味で使っているところがあり ます。 適宜、解釈お願いします。 を解説するために、本資料内で 未実装機能を実装済みのように取り

    上げている箇所があります。 あくまで例の場合は、注釈をつけて います。 本資料では を例 としてあげています
  7. None
  8. None
  9. を簡単 統一的に実装 利用するためのフレームワーク 容易に を作成 の詳細を知らなくても を作成できる。 のインストール アップデート と依存関係を管理

    のリソース 使用量をレポート
  10. も管理を行わなければ、技術負債となる 自体のマニフェストを管理してくれる仕組み が

  11. None
  12. を利用することで、 を自動的に最新 の状態に保つための 方式を提供する。 プラットフォームや他の への依存 関係を解決し、自動で必要なリソースをインストールす る。 インストールされた とそのサービスを、テナン

    トの に展開する。 同じ を所有して、競合する がインス トールされることを防ぐ。 を活用し、マネージドサービスプロバイダのように 管理のインターフェイスを提供する。
  13. None
  14. None
  15. 展開先 作成 設定 が利用する 作成 展開 の作成 $ kubectl create

    ns <namespace> $ kubectl create -f deploy/service_account.yaml –n <namespace> $ kubectl create -f deploy/crds/operator_crd.yaml $ kubectl create -f deploy/operator.yaml -n <namespace> $ kubectl create –f deploy/crds/operator_cr.yaml とりあえず全部手動で を作る方法
  16. 展開先 作成 設定 が利用する 作成 展開 の作成 $ kubectl create

    ns <namespace> $ kubectl create -f deploy/service_account.yaml –n <namespace> $ kubectl create -f deploy/crds/operator_crd.yaml $ kubectl create -f deploy/operator.yaml -n <namespace> $ kubectl create –f deploy/crds/operator_cr.yaml $ helm repo add jenkins https://raw.githubusercontent.com/jenkinsci/kubernetes- operator/master/chart $ helm install jenkins/jenkins-operator 追加 が 化されている もある。
  17. $ export olm_release=0.15.1 $ kubectl apply -f https://github.com/operator-framework/operator- lifecycle-manager/releases/download/${olm_release}/crds.yaml $

    kubectl apply -f https://github.com/operator-framework/operator- lifecycle-manager/releases/download/${olm_release}/olm.yaml $ kubectl get crd NAME catalogsources.operators.coreos.com clusterserviceversions.operators.coreos.com installplans.operators.coreos.com operatorgroups.operators.coreos.com subscriptions.operators.coreos.com $ kubectl get deploy -n olm NAME READY UP-TO-DATE AVAILABLE AGE catalog-operator 1/1 1 1 88s olm-operator 1/1 1 1 88s packageserver 2/2 2 2 73s $ kubectl get packagemanifest NAME CATALOG AGE federatorai Community Operators 23m mariadb-operator-app Community Operators 23m nuodb-operator-bundle Community Operators 23m cluster-manager Community Operators 23m tidb-operator Community Operators 23m kubemq-operator Community Operators 23m jaeger Community Operators 23m …
  18. 【 】 単一のバージョンの を形 成するパッケージ。 ・ を識別するメタ情報 ・ ・リソースなどが記載された では、

    として管理される。 展開先 作成 設定 が利用する 作成 展開 の作成 $ kubectl create ns <namespace> $ kubectl create -f deploy/service_account.yaml –n <namespace> $ kubectl create -f deploy/crds/operator_crd.yaml $ kubectl create -f deploy/operator.yaml -n <namespace> $ kubectl create –f deploy/crds/operator_cr.yaml
  19. は、 が必要とする 、それが管理した り、依存したりするカスタムリソース など、 実行に必要な技術情報源の を展開するための情報が入っている「 」

  20. ターゲット 内の を監視し、 で指 定されたリソース要件が満たされていることを確認し、 にしたがって、 をデプロ イする。 クラスタのアプリケーション定義と を維持し、

    の を監視し、それに基づいて を作成する。
  21. ターゲット 内の を監視し、 で指 定されたリソース要件が満たされていることを確認し、 にしたがって、 をデプロ イする。 クラスタのアプリケーション定義と を維持し、

    の を監視し、それに基づいて を作成する。 商品を紹介する販売員 購入商品を届ける配達員
  22. Ⅰ Ⅱ Ⅲ Ⅳ を監視 の作成 を作成 リソースを作成 を定義 判定

    の利用
  23. を に 届けてください。 【 】 と の更新元を定義し、パッケージ内の とバインドして の更新を維持するもの。 Operator

    Ⅰ を監視 apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: argocd-operator namespace: olm spec: channel: alpha installPlanApproval: Automatic name: argocd-operator source: operatorhubio-catalog sourceNamespace: olm startingCSV: argocd-operator.v0.0.12
  24. Ⅱ の作成 には と と が入っています。 こちらでいいですか? 【 】 の自動インストール、またはアップグレードするため

    に作成されるリソースの計算された一覧。 おねがいします。 $ kubectl -n olm get installplan NAME CSV APPROVAL APPROVED install-gbtsx argocd-operator.v0.0.12 Automatic true
  25. $ kubectl -n olm get csv NAME DISPLAY VERSION REPLACES

    PHASE argocd-operator.v0.0.12 Argo CD 0.0.12 Succeeded $ kubectl get crd |grep argo applications.argoproj.io appprojects.argoproj.io argocdexports.argoproj.io argocds.argoproj.io Ⅲ を作成 【 】 のデプロイを支援するリソース。 を監視
  26. Ⅳ リソースを作成 【 】 と同じ にデプロイされた のデプロイ制限を行う。 が届けられる。 を確認 あのぉ

    。 届いたんだけど $ kubectl -n olm get deployment,pod,sa NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/argocd-operator 1/1 1 1 11m NAME READY STATUS RESTARTS AGE pod/argocd-operator-5d59c9c447 1/1 Running 0 11m NAME SECRETS AGE serviceaccount/argocd-application-controller 2 11m serviceaccount/argocd-dex-server 2 11m serviceaccount/argocd-operator 2 11m serviceaccount/argocd-redis-ha 2 11m serviceaccount/argocd-server 2 11m $ kubectl -n openshift-operator-lifecycle-manager logs pod/olm- operator-7d9844479b-wlcx5 --tail=10 time="2020-08-16T09:17:30Z" level=info msg="csv in operatorgroup" csv=argocd-operator.v0.0.12 id=GP0ZJ namespace=olm opgroup=olm- wxgq8 phase=Succeeded
  27. Ⅰ を監視 Ⅱ の作成 Ⅳ リソースを作成 Ⅲ を作成

  28. None
  29. このあたりの仕組みについて 再掲

  30. Ⅰ を監視 Ⅱ の作成 Ⅳ リソースを作成 Ⅲ を作成 再掲

  31. は、 が必要とする 、それが管理した り、依存したりするカスタムリソース など、 実行に必要な技術情報源の 名前、説明、 、 、 、

    などの定義 配置に必要なリソースの定 義 、 、 、 など が管理または依存する の定義
  32. None
  33. apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: <…ellipsis…> description: | ##

    Overview The Argo CD Operator manages the full lifecycle… displayName: Argo CD icon: - base64data: PD94bWwgdmVyc2lvbj0iMS4w… mediatype: image/svg+xml links: - name: Argo CD Project url: https://argoproj.github.io/argo-cd/ - name: Operator Documentation url: https://argocd-operator.readthedocs.io - name: Operator Source Code url: https://github.com/argoproj-labs/argocd-operator maintainers: - email: john.mckenzie@redhat.com name: John McKenzie maturity: alpha provider: name: Argo CD Community replaces: argocd-operator.v0.0.11 version: 0.0.12 の情報を記載することで、特定の や ソースコードの情報を提供。
  34. などに記載される情報は、 の から生成 される。 のリソースを取りまとめるメタデータ は の ごとに存在する

  35. の中では、 は と という 更新ストリームで編成される。 のリソースを取りまとめるメタデータ ごとに存在する 内のタグ リリースされたバージョンを管 理するディレクトリー

    を構成することによって、同じ でも 安定性だけでなく、異なる構成の を管理 できる。 例
  36. apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: argocd-operator namespace: olm spec:

    channel: alpha installPlanApproval: Automatic name: argocd-operator source: operatorhubio-catalog sourceNamespace: olm startingCSV: argocd-operator.v0.0.12 status: installedCSV: argocd-operator.v0.0.13 currentCSV: argocd-operator.v0.0.13 に到達するまで を バージョンずつ更新 が作成されると、そのパッケージの最新 がインストールされる。
  37. 新しく入れるクラスタは、 新しいバージョンを導入 最新バージョンに到達するまで、全ての のバー ジョンを更新することは、安全ではない。 apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…>

    spec: <…ellipsis…> description: | ## Overview The Argo CD Operator manages the full lifecycle… displayName: Argo CD icon: - base64data: PD94bWwgdmVyc2lvbj0iMS4w… replaces: argocd-operator.v0.0.11 skips: - argocd-operator.v0.0.12 version: 0.0.13 すでに導入済みのクラス タへの影響を与えないよ うに
  38. None
  39. apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: <…ellipsis…> install: spec: clusterPermissions:

    - rules: - apiGroups: - '*' resources: - ‘*’ … verbs: - get - list serviceAccountName: argocd-application-controller deployments: - name: argocd-operator spec: replicas: 1 selector: matchLabels: name: argocd-operator strategy: {} template: を実行するために必要なリソースの 定義 、 など が直接行われる。
  40. Ⅰ を監視 Ⅱ の作成 Ⅳ リソースを作成 Ⅲ を作成 再掲

  41. で定義された が所属する を特定するこ とで、メンバー内の に必要な を生成する。 ▶ クラスタ管理者が を介して に付与する権限を制

    御することが目的 kind: OperatorGroup apiVersion: operators.coreos.com/v1 metadata: name: og-single namespace: argocd spec: targetNamespaces: - argocd とみなす条件 が と同じ にある が をサポートしている場合 でインストール対象 情報を伝える 基本は つの に対して、 つの の指定を行う。
  42. でインストール対象 情報を伝える メンバー に必要な アクセスを生成するた めの情報を で に提供 env: -

    name: WATCH_NAMESPACE valueFrom: fieldRef: fieldPath: 'metadata.annotations[''olm.targetNamespaces'']' の名前 の 内にあるターゲットの を介して、 のインスタンスに反映される の配置方法で異なる
  43. では、4つの をサポートしている。 「 」「 」のどちらかをサポートしている が多い。 管理の など に をインストールし、ク

    ラスタのすべての を監視します。 がデプロイされてい る 以外の複数の指 定された のイベン トを監視します。 がデプロイされてい る 以外の単一の のイベントを監視 します。 がデプロイされてい る のイベントだけ を監視します。 では、すべて が上記の構成をサポートしているわけではない。 たとえば、クラスターレベルで実行するように設計された に対して、単一の を定義する を設定すべきではない。
  44. を設定した と同じ の のみを監視する。 kind: OperatorGroup apiVersion: operators.coreos.com/v1 metadata: name:

    og-ownnamespace namespace: argocd spec: targetNamespaces: - argocd 他のユーザーに影響を与えることなく のアップグ レードなどを処理できる。 ・ 内に指定される のみを監視する ・リソースにアクセスする および を設定
  45. すべての の を監視する。 kind: OperatorGroup apiVersion: operators.coreos.com/v1 metadata: name: og-allnamespaces

    namespace: olm リソースの再利用性を促進し、クラスター全体で定義され たリソースを管理する 。 ・クラスター内の全ての に指定される を監視する ・ および を設定
  46. installModes: - supported: true type: OwnNamespace で指定した にあった を展開できるように を構成しておく

    は の調整はしてくれない。
  47. ・ の作成時に が生成され、 のメンバーが になった時に が設 定される。 ・ ・ ・

    ・ ・ ・ ・ をリストで指定することで、 に対応した をまとめられる
  48. None
  49. Ⅰ を監視 Ⅱ の作成 Ⅳ リソースを作成 Ⅲ を作成 再掲

  50. apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: customresourcedefinitions: owned: - kind:

    Application name: applications.argoproj.io version: v1alpha1 displayName: Application description: An Application is a group… - kind: AppProject name: appprojects.argoproj.io version: v1alpha1 displayName: AppProject description: An AppProject is a logical… - kind: ArgoCDExport name: argocdexports.argoproj.io version: v1alpha1 displayName: ArgoCDExport description: ArgoCDExport describes… - kind: ArgoCD name: argocds.argoproj.io version: v1alpha1 displayName: ArgoCD description: ArgoCD is the representation… に必要な のリンク、依存関係の管 理を設定する。
  51. 自体が所有している の指定 が使用できる には「 」と 「 」の つのタイプがある。 が必要としている、別 が持つ

    の指定 を持つ は動的に される
  52. apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: <…ellipsis…> spec: customresourcedefinitions: owned: -

    kind: ArgoCD name: argocds.argoproj.io version: v1alpha1 displayName: ArgoCD description: ArgoCD is the representation… <…ellipsis…> specDescriptors: - description: 'The container image tag (version) … displayName: Version path: version x-descriptors: - 'urn:alm:descriptor:com.tectonic.ui:fieldGroup:ArgoCD' - 'urn:alm:descriptor:com.tectonic.ui:text’ - description: 'The container image … displayName: Image path: image x-descriptors: - 'urn:alm:descriptor:com.tectonic.ui:fieldGroup:ArgoCD' - 'urn:alm:descriptor:com.tectonic.ui:text’ - description: 'The number of operation processors… displayName: 'Operation Processor Count' path: controller.processors.operation x-descriptors: - 'urn:alm:descriptor:com.tectonic.ui:fieldGroup… - 'urn:alm:descriptor:com.tectonic.ui:number'
  53. は、相互に機能しない の共存を防 止する。 ・提供できない を必要とする の インストール ・依存関係のある に対して、障害を発生さ せる方法での

    の更新 が複数の によって所有される場合、 は、後方互換性の条件を全て満たす場合にアップ グレードされる。 希望 に更新 えっ まぢで 新しいの
  54. は、相互に機能しない の共存を防 止する。 ・提供できない を必要とする の インストール ・依存関係のある に対して、障害を発生さ せる方法での

    の更新 が複数の によって所有される場合、 は、後方互換性の条件を全て満たす場合にアップ グレードされる。 希望 に更新 えっ まぢで 新しいの バージョンの依存関係とは
  55. kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 spec: names: kind: GitRepo <…ellipsis…> versions:

    - name: v1alpha1 served: true storage: true apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: customresourcedefinitions: required: - kind: GitRepo name: gitrepos.gitproj.io version: v1alpha1 displayName: GitRepo description: GitRepo is the representation… の に新たな を追記 の提供可能可否 のメイン提供
  56. kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 spec: names: kind: GitRepo <…ellipsis…> versions:

    - name: v1alpha1 served: true storage: false - name: v1beta1 served: true storage: true apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: customresourcedefinitions: required: - kind: GitRepo name: gitrepos.gitproj.io version: v1alpha1 displayName: GitRepo description: GitRepo is the representation… の に新たな を追記 の提供可能可否 のメイン提供 非推奨バージョン で提供
  57. kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 spec: names: kind: GitRepo <…ellipsis…> versions:

    - name: v1alpha1 served: true storage: false - name: v1beta1 served: true storage: true apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: customresourcedefinitions: required: - kind: GitRepo name: gitrepos.gitproj.io version: v1beta1 displayName: GitRepo description: GitRepo is the representation… 側の 利用バージョンを変更する 更新 時点で、 自身が新規 バージョンに対応 の 入れ替え する必要がある。 対応
  58. kind: CustomResourceDefinition apiVersion: apiextensions.k8s.io/v1beta1 spec: names: kind: GitRepo <…ellipsis…> versions:

    - name: v1alpha1 served: false storage: false - name: v1beta1 served: true storage: true apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion <…ellipsis…> spec: customresourcedefinitions: required: - kind: GitRepo name: gitrepos.gitproj.io version: v1beta1 displayName: GitRepo description: GitRepo is the representation… をバージョンアップするには以下を満たす必要がある。 ・既存 として有効化されたバージョンが、新規 に存在する。 ・検証が新規 の検証スキーマに対して行われる場合、 の有効にされたバー ジョンに関連付けられる既存インスタンスまたはカスタムリソース すべてが有効である。 提供廃止 削除可能
  59. の作成 を含む をブラウザ上で作成可能

  60. None
  61. このあたりの仕組みについて 再掲

  62. Operator によって が並べられている? $ kubectl get packagemanifests NAME CATALOG AGE

    federatorai Community Operators 23m mariadb-operator-app Community Operators 23m nuodb-operator-bundle Community Operators 23m cluster-manager Community Operators 23m tidb-operator Community Operators 23m kubemq-operator Community Operators 23m jaeger Community Operators 23m …
  63. /argocd-operator ├── 0.0.12 │ ├── Dockerfile │ ├── manifests │

    │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ │ ├── argoproj.io_applications_crd.yaml │ │ ├── argoproj.io_appprojects_crd.yaml │ │ ├── argoproj.io_argocdexports_crd.yaml │ │ └── argoproj.io_argocds_crd.yaml │ └── metadata │ ├── annotations.yaml │ └── dependencies.yaml └── 0.0.11 ├── Dockerfile ├── manifests │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml └── metadata ├── annotations.yaml └── dependencies.yaml /argocd-operator ├── 0.0.12 │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml ├── 0.0.11 │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml ├── 0.0.9 ├── 0.0.8 ├── … └── argocd-operator.package.yaml は、「 」「 」ディレクトリ で構成され、 拡張が容易になっている
  64. /argocd-operator ├── 0.0.12 │ ├── Dockerfile │ ├── manifests │

    │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ │ ├── argoproj.io_applications_crd.yaml │ │ ├── argoproj.io_appprojects_crd.yaml │ │ ├── argoproj.io_argocdexports_crd.yaml │ │ └── argoproj.io_argocds_crd.yaml │ └── metadata │ ├── annotations.yaml │ └── dependencies.yaml └── 0.0.11 ├── Dockerfile ├── manifests │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml └── metadata ├── annotations.yaml └── dependencies.yaml に追加する方法についての形式や、 から選択できる などを定義する annotations: mediatype.v1: "registry+v1" manifests.v1: "manifests/" metadata.v1: "metadata/" package.v1: “argocd-operator" channels.v1: “alpha, beta" channel.default.v1: “alpha" 利用可能な を指定
  65. /argocd-operator ├── 0.0.12 │ ├── Dockerfile │ ├── manifests │

    │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ │ ├── argoproj.io_applications_crd.yaml │ │ ├── argoproj.io_appprojects_crd.yaml │ │ ├── argoproj.io_argocdexports_crd.yaml │ │ └── argoproj.io_argocds_crd.yaml │ └── metadata │ ├── annotations.yaml │ └── dependencies.yaml └── 0.0.11 ├── Dockerfile ├── manifests │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml └── metadata ├── annotations.yaml └── dependencies.yaml 明示的に バージョンの依存関係を指定するこ とで、 利用時に によって検出される。 dependencies: - type: olm.package packageName: git-operator version: >0.21.0 - type: olm.gvk group: gitproj.io kind: GitRepo version: v1alpha1 特定の バージョンを指定
  66. /argocd-operator ├── 0.0.12 │ ├── Dockerfile │ ├── manifests │

    │ ├── argocd-operator.v.0.0.12.clusterserviceversion.yaml │ │ ├── argoproj.io_applications_crd.yaml │ │ ├── argoproj.io_appprojects_crd.yaml │ │ ├── argoproj.io_argocdexports_crd.yaml │ │ └── argoproj.io_argocds_crd.yaml │ └── metadata │ ├── annotations.yaml │ └── dependencies.yaml └── 0.0.11 ├── Dockerfile ├── manifests │ ├── argocd-operator.v.0.0.11.clusterserviceversion.yaml │ ├── argoproj.io_applications_crd.yaml │ ├── argoproj.io_appprojects_crd.yaml │ ├── argoproj.io_argocdexports_crd.yaml │ └── argoproj.io_argocds_crd.yaml └── metadata ├── annotations.yaml └── dependencies.yaml は、 と に関連付けられたメタデータを格納するコンテ ナイメージ。 は、 の特定のバー ジョンを提示する。 FROM scratch # We are pushing an operator-registry bundle # that has both metadata and manifests. LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ LABEL operators.operatorframework.io.bundle.package.v1=test-operator LABEL operators.operatorframework.io.bundle.channels.v1=beta,stable LABEL operators.operatorframework.io.bundle.channel.default.v1=stable ADD test/*.yaml /manifests ADD test/metadata/annotations.yaml /metadata/annotations.yaml
  67. すべてのバージョンの 情 報が含まれるデータベースイメージ。 へのポインター 参照先 が記載さ れたデータベースが含まれている。 の実態ではない $ grpcurl

    -plaintext localhost:50051 ¥ api.Registry/ListPackages { "name": "3scale-community-operator" } <…ellipsis…> { "name": "argocd-operator" } { "name": "argocd-operator-helm" } $ grpcurl -plaintext -d '{"pkgName":"argocd- operator","channelName":"alpha"}’ ¥ localhost:50051 ¥ api.Registry/GetBundleForChannel "providedApis": [ { "group": "argoproj.io", "version": "v1alpha1", "kind": "Application", "plural": "applications" } <…ellipsis…>
  68. $ kubectl -n olm get pod NAME READY STATUS catalog-operator-c8bc7f97c-2fxds

    1/1 Running olm-operator-84cfcdbdb8-qdzwd 1/1 Running operatorhubio-catalog-7bg4v 1/1 Running packageserver-7bc5d956c5-pxtz2 1/1 Running packageserver-7bc5d956c5-rffbv 1/1 Running を増やしていくことによって、導入でき る のパッケージ数 カタログ を増やせる 同一のカタログが入っている を同じクラスタ上 に展開すると を起こす。
  69. 「 」 を管理しているプロセス。 が追加されると、情報 を取りに行き、特定の 名と のリストを作る。 $ kubectl -n

    olm get pod NAME READY STATUS catalog-operator-c8bc7f97c-2fxds 1/1 Running olm-operator-84cfcdbdb8-qdzwd 1/1 Running operatorhubio-catalog-7bg4v 1/1 Running packageserver-7bc5d956c5-pxtz2 1/1 Running packageserver-7bc5d956c5-rffbv 1/1 Running $ kubectl get packagemanifests NAME CATALOG AGE federatorai Community Operators 23m mariadb-operator-app Community Operators 23m nuodb-operator-bundle Community Operators 23m cluster-manager Community Operators 23m tidb-operator Community Operators 23m kubemq-operator Community Operators 23m jaeger Community Operators 23m …
  70. ## Create Index Image $ opm index add ¥ --bundles

    quay.io/<registry-namespace>/bundle:0.0.1 ¥ --tag quay.io/<registry-namespace>/my-index:1.0.0 $ podman push quay.io/<registry-namespace>/my- index:1.0.0 ## Add Index to a current Image $ opm index add ¥ --bundles quay.io/<registry-namespace>/bundle:0.0.2 ¥ --from-index quay.io/<registry-namespace>/my- index:1.0.0 ¥ --tag quay.io/<registry-namespace>/my-index:1.0.1 の作成は「 」という プロジェクトによって管理されている。 管理者は、 コマンド を利用することで、 を作ることができる。
  71. ## Create Index Image $ opm index add ¥ --bundles

    quay.io/<registry-namespace>/bundle:0.0.1 ¥ --tag quay.io/<registry-namespace>/my-index:1.0.0 $ podman push quay.io/<registry-namespace>/my- index:1.0.0 ## Add Index to a current Image $ opm index add ¥ --bundles quay.io/<registry-namespace>/bundle:0.0.2 ¥ --from-index quay.io/<registry-namespace>/my- index:1.0.0 ¥ --tag quay.io/<registry-namespace>/my-index:1.0.1 の作成は「 」という プロジェクトによって管理されている。 管理者は、 コマンド を利用することで、 を作ることができる。 誰が を管理しているのか $ kubectl -n olm get pod NAME READY STATUS catalog-operator-c8bc7f97c-2fxds 1/1 Running olm-operator-84cfcdbdb8-qdzwd 1/1 Running operatorhubio-catalog-7bg4v 1/1 Running packageserver-7bc5d956c5-pxtz2 1/1 Running packageserver-7bc5d956c5-rffbv 1/1 Running $ kubectl -n olm get deploy NAME READY UP-TO-DATE AVAILABLE catalog-operator 1/1 1 olm-operator 1/1 1 packageserver 2/2 2 「 」には、 は、存在しない。
  72. が、 の情報をもとに を管理し、 メタデータのストア先 を指示する。 を作成すると、 の が作成される。 同様に 監視を行う

    apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: operatorhubio-catalog namespace: olm spec: sourceType: grpc image: quay.io/operator-framework/upstream- community-operators:latest displayName: Community Operators publisher: OperatorHub.io
  73. が、 の情報をもとに を管理し、 メタデータのストア先 を指示する。 を作成すると、 の が作成される。 同様に 監視を行う

    を更新することで、新しいパッケージ情 報 など が更新される。 利用している の が新しくなると、動的に更 新される 。
  74. None
  75. 「 」はクラスタ内の の管理 として機能する のプラグイン。 ・容易に のインストール、アンイ ンストール、すでにインストールされた の一覧を表示が可能 ・

    を経由した、 や などの概念を なくした 管理が可能
  76. None
  77. には、 つの がある。 を提供する をポーリングし、 を管理する。 所定アドレスに対する へのアクセスを試し、 そこから 情報

    を取得する。 データを解析して、 を提供でき る を管理する。 apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource <…ellipsis…> spec: address: community-operators.openshift- marketplace.svc:50051 displayName: Community Operators インターネット上の を通じて 情報を取得する community-operators.openshift- marketplace.svc:50051
  78. は、 を管理してい るリソース。 で利用されており、 によって を管 理している。

  79. None
  80. の の認定を受けた が、サポートしてい る 群 コミュニティで提供されて いる であり、基本 はプロダクトのコントリ ビューターによってサポート

    されている。 社がミドルウェア プロダクトを 化し て提供している。 がデフォルトで管理している には、以下の 種類がある。 すべて、 を経由して展開される。
  81. None
  82. まとめ も管理を行わなければ、技術負債となる を使う際は、 を使おう

  83. 著 特別マテリアルダウンロード

  84. 創る側なのか。活用する側なのか。

  85. 参考資料

  86. 徹底解説 「 徹底解説」 抜粋版 無料 プレゼント 以下 より ダウンロードください。