Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OperatorLifecycleManager 101

Shingo.Kitayama
September 07, 2020

OperatorLifecycleManager 101

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

Shingo.Kitayama

September 07, 2020
Tweet

More Decks by Shingo.Kitayama

Other Decks in Technology

Transcript

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

    View Slide

  2. View Slide

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

    View Slide

  4. View Slide

  5. View Slide

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

    View Slide

  7. View Slide

  8. View Slide

  9. を簡単 統一的に実装 利用するためのフレームワーク
    容易に を作成
    の詳細を知らなくても
    を作成できる。
    のインストール アップデート
    と依存関係を管理
    のリソース
    使用量をレポート

    View Slide

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

    View Slide

  11. View Slide

  12. を利用することで、 を自動的に最新
    の状態に保つための 方式を提供する。
    プラットフォームや他の への依存
    関係を解決し、自動で必要なリソースをインストールす
    る。
    インストールされた とそのサービスを、テナン
    トの に展開する。
    同じ を所有して、競合する がインス
    トールされることを防ぐ。
    を活用し、マネージドサービスプロバイダのように
    管理のインターフェイスを提供する。

    View Slide

  13. View Slide

  14. View Slide

  15. 展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ kubectl create ns
    $ kubectl create -f deploy/service_account.yaml –n

    $ kubectl create -f deploy/crds/operator_crd.yaml
    $ kubectl create -f deploy/operator.yaml -n

    $ kubectl create –f
    deploy/crds/operator_cr.yaml
    とりあえず全部手動で を作る方法

    View Slide

  16. 展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ kubectl create ns
    $ kubectl create -f deploy/service_account.yaml –n

    $ kubectl create -f deploy/crds/operator_crd.yaml
    $ kubectl create -f deploy/operator.yaml -n

    $ 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
    追加
    が 化されている もある。

    View Slide

  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

    View Slide

  18. 【 】
    単一のバージョンの を形
    成するパッケージ。
    ・ を識別するメタ情報

    ・リソースなどが記載された
    では、 として管理される。
    展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ kubectl create ns
    $ kubectl create -f deploy/service_account.yaml –n

    $ kubectl create -f deploy/crds/operator_crd.yaml
    $ kubectl create -f deploy/operator.yaml -n

    $ kubectl create –f
    deploy/crds/operator_cr.yaml

    View Slide

  19. は、 が必要とする 、それが管理した
    り、依存したりするカスタムリソース など、
    実行に必要な技術情報源の
    を展開するための情報が入っている「 」

    View Slide

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

    View Slide

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

    View Slide

  22. Ⅰ Ⅱ Ⅲ Ⅳ
    を監視 の作成 を作成 リソースを作成
    を定義
    判定 の利用

    View Slide



  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

    View Slide

  24. Ⅱ の作成
    には
    と と
    が入っています。
    こちらでいいですか?
    【 】
    の自動インストール、またはアップグレードするため
    に作成されるリソースの計算された一覧。
    おねがいします。
    $ kubectl -n olm get installplan
    NAME CSV APPROVAL APPROVED
    install-gbtsx argocd-operator.v0.0.12 Automatic true

    View Slide

  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
    Ⅲ を作成
    【 】
    のデプロイを支援するリソース。
    を監視

    View Slide

  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

    View Slide

  27. Ⅰ を監視
    Ⅱ の作成
    Ⅳ リソースを作成
    Ⅲ を作成

    View Slide

  28. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. View Slide

  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: [email protected]
    name: John McKenzie
    maturity: alpha
    provider:
    name: Argo CD Community
    replaces: argocd-operator.v0.0.11
    version: 0.0.12
    の情報を記載することで、特定の や
    ソースコードの情報を提供。

    View Slide

  34. などに記載される情報は、 の から生成
    される。
    のリソースを取りまとめるメタデータ
    は の ごとに存在する

    View Slide

  35. の中では、 は と という
    更新ストリームで編成される。
    のリソースを取りまとめるメタデータ
    ごとに存在する
    内のタグ
    リリースされたバージョンを管
    理するディレクトリー
    を構成することによって、同じ でも
    安定性だけでなく、異なる構成の を管理
    できる。 例

    View Slide

  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
    に到達するまで を バージョンずつ更新
    が作成されると、そのパッケージの最新
    がインストールされる。

    View Slide

  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
    すでに導入済みのクラス
    タへの影響を与えないよ
    うに

    View Slide

  38. View Slide

  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:
    を実行するために必要なリソースの
    定義 、 など が直接行われる。

    View Slide

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

    View Slide

  41. で定義された が所属する を特定するこ
    とで、メンバー内の に必要な を生成する。
    ▶ クラスタ管理者が を介して に付与する権限を制
    御することが目的
    kind: OperatorGroup
    apiVersion: operators.coreos.com/v1
    metadata:
    name: og-single
    namespace: argocd
    spec:
    targetNamespaces:
    - argocd
    とみなす条件
    が と同じ にある
    が をサポートしている場合
    でインストール対象
    情報を伝える
    基本は つの に対して、 つの の指定を行う。

    View Slide

  42. でインストール対象
    情報を伝える
    メンバー に必要な アクセスを生成するた
    めの情報を で に提供
    env:
    - name: WATCH_NAMESPACE
    valueFrom:
    fieldRef:
    fieldPath: 'metadata.annotations[''olm.targetNamespaces'']'
    の名前

    内にあるターゲットの
    を介して、 のインスタンスに反映される
    の配置方法で異なる

    View Slide

  43. では、4つの をサポートしている。
    「 」「 」のどちらかをサポートしている が多い。
    管理の
    など に
    をインストールし、ク
    ラスタのすべての
    を監視します。
    がデプロイされてい
    る 以外の複数の指
    定された のイベン
    トを監視します。
    がデプロイされてい
    る 以外の単一の
    のイベントを監視
    します。
    がデプロイされてい
    る のイベントだけ
    を監視します。
    では、すべて が上記の構成をサポートしているわけではない。
    たとえば、クラスターレベルで実行するように設計された に対して、単一の を定義する
    を設定すべきではない。

    View Slide

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

    View Slide

  45. すべての の を監視する。
    kind: OperatorGroup
    apiVersion: operators.coreos.com/v1
    metadata:
    name: og-allnamespaces
    namespace: olm
    リソースの再利用性を促進し、クラスター全体で定義され
    たリソースを管理する 。
    ・クラスター内の全ての に指定される
    を監視する
    ・ および を設定

    View Slide

  46. installModes:
    - supported: true
    type: OwnNamespace
    で指定した にあった を展開できるように を構成しておく
    は の調整はしてくれない。

    View Slide


  47. の作成時に が生成され、 のメンバーが になった時に が設
    定される。







    をリストで指定することで、 に対応した をまとめられる

    View Slide

  48. View Slide

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

    View Slide

  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…
    に必要な のリンク、依存関係の管
    理を設定する。

    View Slide

  51. 自体が所有している の指定
    が使用できる には「 」と
    「 」の つのタイプがある。
    が必要としている、別 が持つ
    の指定
    を持つ は動的に される

    View Slide

  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'

    View Slide

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

    View Slide

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

    View Slide

  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…
    の に新たな を追記
    の提供可能可否
    のメイン提供

    View Slide

  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…
    の に新たな を追記
    の提供可能可否
    のメイン提供
    非推奨バージョン
    で提供

    View Slide

  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…
    側の 利用バージョンを変更する 更新 時点で、
    自身が新規 バージョンに対応 の
    入れ替え する必要がある。
    対応

    View Slide

  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…
    をバージョンアップするには以下を満たす必要がある。
    ・既存 として有効化されたバージョンが、新規 に存在する。
    ・検証が新規 の検証スキーマに対して行われる場合、 の有効にされたバー
    ジョンに関連付けられる既存インスタンスまたはカスタムリソース すべてが有効である。
    提供廃止
    削除可能

    View Slide

  59. の作成 を含む をブラウザ上で作成可能

    View Slide

  60. View Slide

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

    View Slide

  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

    View Slide

  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
    は、「 」「 」ディレクトリ
    で構成され、 拡張が容易になっている

    View Slide

  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"
    利用可能な を指定

    View Slide

  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
    特定の バージョンを指定

    View Slide

  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

    View Slide

  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…>

    View Slide

  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
    を増やしていくことによって、導入でき
    る のパッケージ数 カタログ を増やせる
    同一のカタログが入っている を同じクラスタ上
    に展開すると を起こす。

    View Slide

  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

    View Slide

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

    View Slide

  71. ## Create Index Image
    $ opm index add ¥
    --bundles quay.io//bundle:0.0.1 ¥
    --tag quay.io//my-index:1.0.0
    $ podman push quay.io//my-
    index:1.0.0
    ## Add Index to a current Image
    $ opm index add ¥
    --bundles quay.io//bundle:0.0.2 ¥
    --from-index quay.io//my-
    index:1.0.0 ¥
    --tag quay.io//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
    「 」には、 は、存在しない。

    View Slide

  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

    View Slide

  73. が、 の情報をもとに
    を管理し、 メタデータのストア先
    を指示する。
    を作成すると、
    の が作成される。
    同様に 監視を行う
    を更新することで、新しいパッケージ情
    報 など が更新される。
    利用している の が新しくなると、動的に更
    新される 。

    View Slide

  74. View Slide

  75. 「 」はクラスタ内の
    の管理
    として機能する のプラグイン。
    ・容易に のインストール、アンイ
    ンストール、すでにインストールされた
    の一覧を表示が可能
    ・ を経由した、
    や などの概念を
    なくした 管理が可能

    View Slide

  76. View Slide

  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

    View Slide

  78. は、 を管理してい
    るリソース。 で利用されており、
    によって を管
    理している。

    View Slide

  79. View Slide


  80. の認定を受けた
    が、サポートしてい
    る 群
    コミュニティで提供されて
    いる であり、基本
    はプロダクトのコントリ
    ビューターによってサポート
    されている。
    社がミドルウェア
    プロダクトを 化し
    て提供している。
    がデフォルトで管理している には、以下の 種類がある。
    すべて、 を経由して展開される。

    View Slide

  81. View Slide

  82. まとめ
    も管理を行わなければ、技術負債となる
    を使う際は、 を使おう

    View Slide


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

    View Slide

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

    View Slide

  85. 参考資料

    View Slide

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

    View Slide