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

OperatorLifecycleManager 101

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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. 展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ 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 full-size slide

  8. 展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ 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 full-size slide

  9. $ 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 full-size slide

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

    ・リソースなどが記載された
    では、 として管理される。
    展開先 作成
    設定
    が利用する 作成
    展開
    の作成
    $ 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide



  15. 届けてください。
    【 】
    と の更新元を定義し、パッケージ内の
    とバインドして の更新を維持するもの。
    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 full-size slide

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

    View full-size slide

  17. $ 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 full-size slide

  18. Ⅳ リソースを作成
    【 】
    と同じ にデプロイされた
    のデプロイ制限を行う。
    が届けられる。
    を確認
    あのぉ 。
    届いたんだけど
    $ 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  26. 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 full-size slide

  27. 新しく入れるクラスタは、
    新しいバージョンを導入
    最新バージョンに到達するまで、全ての のバー
    ジョンを更新することは、安全ではない。
    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 full-size slide

  28. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide


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







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

    View full-size slide

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

    View full-size slide

  38. 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 full-size slide

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

    View full-size slide

  40. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  43. 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 full-size slide

  44. 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 full-size slide

  45. 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 full-size slide

  46. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  49. 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 full-size slide

  50. /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 full-size slide

  51. /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 full-size slide

  52. /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 full-size slide

  53. /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 full-size slide

  54. すべてのバージョンの 情
    報が含まれるデータベースイメージ。
    へのポインター 参照先 が記載さ
    れたデータベースが含まれている。
    の実態ではない
    $ 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 full-size slide

  55. $ 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 full-size slide

  56. 「 」 を管理しているプロセス。
    が追加されると、情報
    を取りに行き、特定の 名と
    のリストを作る。
    $ 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 full-size slide

  57. ## 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 full-size slide

  58. ## 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 full-size slide

  59. が、 の情報をもとに
    を管理し、 メタデータのストア先
    を指示する。
    を作成すると、
    の が作成される。
    同様に 監視を行う
    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 full-size slide

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

    View full-size slide

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

    View full-size slide

  62. には、 つの がある。
    を提供する をポーリングし、
    を管理する。
    所定アドレスに対する へのアクセスを試し、
    そこから 情報 を取得する。
    データを解析して、 を提供でき
    る を管理する。
    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 full-size slide

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

    View full-size slide


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

    View full-size slide

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

    View full-size slide


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

    View full-size slide

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

    View full-size slide

  68. 参考資料

    View full-size slide

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

    View full-size slide