This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.12.2.3. Operator SDK を使用した Ansible ベースの Operator のビルド
以下の手順では、Operator SDK が提供するツールおよびライブラリーを使用した Ansible Playbook がサポートする単純な Memcached Operator のビルドの例について説明します。
前提条件
- 開発ワークステーションにインストールされる Operator SDK CLI
-
cluster-adminパーミッションを持つアカウントを使用した Kubernetes ベースのクラスター r v1.11.3+ (OpenShift Container Platform 4.4 など) へのアクセス -
OpenShift CLI (
oc) v4.1+ (インストール済み) -
ansiblev2.6.0+ -
ansible-runnerv1.1.0+ -
ansible-runner-httpv1.0.0+
手順
新規 Operator プロジェクトを作成します。namespace スコープの Operator は単一 namespace でリソースを監視し、管理します。namespace スコープの Operator は柔軟性があるために優先して使用されます。これらの Operator は切り離されたアップグレード、障害対応およびモニタリングのための namespace の分離、および API 定義の差異化を可能にします。
新規の Ansible ベース、namespace スコープの
memcached-operatorプロジェクトを作成し、そのディレクトリーに切り換えるには、以下のコマンドを使用します。operator-sdk new memcached-operator \ --api-version=cache.example.com/v1alpha1 \ --kind=Memcached \ --type=ansible cd memcached-operator$ operator-sdk new memcached-operator \ --api-version=cache.example.com/v1alpha1 \ --kind=Memcached \ --type=ansible $ cd memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、APIVersion
example.com/v1apha1および KindMemcachedの Memcached リソースを監視するためのmemcached-operatorプロジェクトが作成されます。Operator ロジックをカスタマイズします。
この例では、
memcached-operatorはそれぞれのMemcachedカスタムリソース (CR) について以下の調整 (reconciliation) ロジックを実行します。-
memcachedDeployment を作成します (ない場合)。 -
Deployment のサイズが
MemcachedCR で指定されるのと同じであることを確認します。
デフォルトで、
memcached-operatorはwatches.yamlファイルに示されるようにMemcachedリソースイベントを監視し、Ansible ロールMemcachedを実行します。- version: v1alpha1 group: cache.example.com kind: Memcached
- version: v1alpha1 group: cache.example.com kind: MemcachedCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプションで、以下のロジックを
watches.yamlファイルでカスタマイズできます。roleオプションを指定して、ansible-runnerを Ansible ロールを使って起動する際に Operator がこの特定のパスを使用するように設定します。デフォルトでは、新規コマンドでロールが置かれる場所への絶対パスが入力されます。- version: v1alpha1 group: cache.example.com kind: Memcached role: /opt/ansible/roles/memcached
- version: v1alpha1 group: cache.example.com kind: Memcached role: /opt/ansible/roles/memcachedCopy to Clipboard Copied! Toggle word wrap Toggle overflow playbookオプションをwatches.yamlファイルに指定して、ansible-runnerを Ansible Playbook で起動する際に Operator がこの指定されたパスを使用するように設定します。- version: v1alpha1 group: cache.example.com kind: Memcached playbook: /opt/ansible/playbook.yaml
- version: v1alpha1 group: cache.example.com kind: Memcached playbook: /opt/ansible/playbook.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Memcached Ansible ロールをビルドします。
生成された Ansible ロールを
roles/memcached/ディレクトリーの下で変更します。この Ansible ロールは、リソースの変更時に実行されるロジックを制御します。Memcached仕様を定義します。Ansible ベースの Operator の定義は Ansible 内ですべて実行できます。Ansible Operator は CR 仕様フィールドのすべてのキー/値ペアを 変数 として Ansible に渡します。仕様フィールドのすべての変数の名前は、Ansible の実行前に Operator によってスネークケース (小文字 + アンダースコア) に変換されます。たとえば、仕様の
serviceAccountは Ansible ではservice_accountになります。ヒントAnsible で変数についてのタイプの検証を実行し、アプリケーションが予想される入力を受信できることを確認する必要があります。
ユーザーが
specフィールドを設定しない場合、roles/memcached/defaults/main.ymlファイルを変更してデフォルトを設定します。size: 1
size: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Memcachedデプロイメントを定義します。Memcached仕様が定義された状態で、リソースの変更に対する Ansible の実行内容を定義できます。これは Ansible ロールであるため、デフォルトの動作はroles/memcached/tasks/main.ymlファイルでタスクを実行します。ここでの目的は、Ansible で
memcached:1.4.36-alpineイメージを実行する Deployement を作成することにあります (Deployment がない場合)。Ansible 2.7+ は k8s Ansible モジュール をサポートします。 この例では、このモジュールを活用し、Deployment 定義を制御します。roles/memcached/tasks/main.ymlを以下に一致するように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この例では、
size変数を使用し、MemcachedDeployment のレプリカ数を制御しています。この例では、デフォルトを1に設定しますが、任意のユーザーがこのデフォルトを上書きする CR を作成することができます。
CRD をデプロイします。
Operator の実行前に、Kubernetes は Operator が監視する新規カスタムリソース定義 (CRD) について把握している必要があります。
MemcachedCRD をデプロイします。oc create -f deploy/crds/cache.example.com_memcacheds_crd.yaml
$ oc create -f deploy/crds/cache.example.com_memcacheds_crd.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator をビルドし、実行します 。
Operator をビルドし、実行する方法として 2 つの方法を使用できます。
- Kubernetes クラスター内の Pod を使用
-
operator-sdk upコマンドを使用してクラスター外で Go プログラムを使用
以下の方法のいずれかを選択します。
Kubernetes クラスター内で Pod として実行 します。これは実稼働環境での優先される方法です。
memcached-operatorイメージをビルドし、これをレジストリーにプッシュします。operator-sdk build quay.io/example/memcached-operator:v0.0.1 podman push quay.io/example/memcached-operator:v0.0.1
$ operator-sdk build quay.io/example/memcached-operator:v0.0.1 $ podman push quay.io/example/memcached-operator:v0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deployment マニフェストは
deploy/operator.yamlファイルに生成されます。このファイルの Deployment イメージは、プレースホルダーREPLACE_IMAGEから直前にビルドされたイメージに変更される必要があります。これを実行するには、以下を実行します。sed -i 's|REPLACE_IMAGE|quay.io/example/memcached-operator:v0.0.1|g' deploy/operator.yaml
$ sed -i 's|REPLACE_IMAGE|quay.io/example/memcached-operator:v0.0.1|g' deploy/operator.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operatorをデプロイします。oc create -f deploy/service_account.yaml oc create -f deploy/role.yaml oc create -f deploy/role_binding.yaml oc create -f deploy/operator.yaml
$ oc create -f deploy/service_account.yaml $ oc create -f deploy/role.yaml $ oc create -f deploy/role_binding.yaml $ oc create -f deploy/operator.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operatorが稼働していることを確認します。oc get deployment
$ oc get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスター外で実行します。この方法は、デプロイメントおよびテストの速度を上げるために開発サイクル時に優先される方法です。
Ansible Runner および Ansible Runner HTTP プラグインがインストールされていることを確認します。 インストールされていない場合、CR の作成時に Ansible Runner から予想しないエラーが発生します。
さらに、
watches.yamlファイルで参照されるロールパスがマシン上にある必要があります。通常、コンテナーはディスク上のロールが置かれる場所で使用されるため、ロールは設定済みの Ansible ロールパス (例:/etc/ansible/roles) に手動でコピーされる必要があります。$HOME/.kube/configにあるデフォルトの Kubernetes 設定ファイルを使って Operator をローカルに実行するには、以下を実行します。operator-sdk run --local
$ operator-sdk run --localCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提供された Kubernetes 設定ファイルを使って Operator をローカルに実行するには、以下を実行します。
operator-sdk run --local --kubeconfig=config
$ operator-sdk run --local --kubeconfig=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
MemcachedCR を作成します。以下に示されるように
deploy/crds/cache_v1alpha1_memcached_cr.yamlファイルを変更し、MemcachedCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow memcached-operatorが CR の Deployment を作成できることを確認します。oc get deployment
$ oc get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE memcached-operator 1 1 1 1 2m example-memcached 3 3 3 3 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod で 3 つのレプリカが作成されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サイズを更新します。
memcachedCR のspec.sizeフィールドを3から4に変更し、変更を適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator が Deployment サイズを変更することを確認します。
oc get deployment
$ oc get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE example-memcached 4 4 4 4 5mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
リソースをクリーンアップします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow