Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

展開先 作成 設定 が利用する 作成 展開 の作成 $ 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 とりあえず全部手動で を作る方法

Slide 16

Slide 16 text

展開先 作成 設定 が利用する 作成 展開 の作成 $ 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 追加 が 化されている もある。

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

【 】 単一のバージョンの を形 成するパッケージ。 ・ を識別するメタ情報 ・ ・リソースなどが記載された では、 として管理される。 展開先 作成 設定 が利用する 作成 展開 の作成 $ 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

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 の情報を記載することで、特定の や ソースコードの情報を提供。

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

新しく入れるクラスタは、 新しいバージョンを導入 最新バージョンに到達するまで、全ての のバー ジョンを更新することは、安全ではない。 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 すでに導入済みのクラス タへの影響を与えないよ うに

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

でインストール対象 情報を伝える メンバー に必要な アクセスを生成するた めの情報を で に提供 env: - name: WATCH_NAMESPACE valueFrom: fieldRef: fieldPath: 'metadata.annotations[''olm.targetNamespaces'']' の名前 の 内にあるターゲットの を介して、 のインスタンスに反映される の配置方法で異なる

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

・ の作成時に が生成され、 のメンバーが になった時に が設 定される。 ・ ・ ・ ・ ・ ・ ・ をリストで指定することで、 に対応した をまとめられる

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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'

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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 …

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

/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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

## 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 の作成は「 」という プロジェクトによって管理されている。 管理者は、 コマンド を利用することで、 を作ることができる。

Slide 71

Slide 71 text

## 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 「 」には、 は、存在しない。

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

参考資料

Slide 86

Slide 86 text

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