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.3.3. Operator SDK を使用した Helm ベースの Operator のビルド
以下の手順では、Operator SDK が提供するツールおよびライブラリーを使用して Helm チャートがサポートする単純な Nginx Operator のビルドの例について説明します。
各チャートについて新規 Operator をビルドすることは最も効果的な方法と言えます。これにより、Hem ベースの Operator から移行して Go で完全装備の Operator を作成する場合などに、さらに多くのネイティブ動作をする Kubernetes API (例: oc get Nginx
) の使用および柔軟性が可能になります。
前提条件
- 開発ワークステーションにインストールされる Operator SDK CLI
-
cluster-admin
パーミッションを持つアカウントを使用した Kubernetes ベースのクラスター r v1.11.3+ (OpenShift Container Platform 4.4 など) へのアクセス -
OpenShift CLI (
oc
) v4.1+ (インストール済み)
手順
新規 Operator プロジェクトを作成します。namespace スコープの Operator は単一 namespace でリソースを監視し、管理します。namespace スコープの Operator は柔軟性があるために優先して使用されます。これらの Operator は切り離されたアップグレード、障害対応およびモニタリングのための namespace の分離、および API 定義の差異化を可能にします。
新規の Helm ベース、namespace スコープの
nginx-operator
プロジェクトを作成するには、以下のコマンドを使用します。operator-sdk new nginx-operator \ --api-version=example.com/v1alpha1 \ --kind=Nginx \ --type=helm cd nginx-operator
$ operator-sdk new nginx-operator \ --api-version=example.com/v1alpha1 \ --kind=Nginx \ --type=helm $ cd nginx-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、とりわけ APIVersion
example.com/v1apha1
および KindNginx
の Nginx リソースを監視する目的でnginx-operator
プロジェクトが作成されます。Operator ロジックをカスタマイズします。
この例では、
nginx-operator
はそれぞれのNginx
カスタムリソース (CR) について以下の調整 (reconciliation) ロジックを実行します。- Nginx デプロイメントを作成します (ない場合)。
- Nginx サービスを作成します (ない場合)。
- Nginx Ingress を作成します (有効にされているが存在しない場合)。
- Deployment、Service、およびオプションの Ingress が Nginx CR で指定される必要な設定 (レプリカ数、イメージ、サービスタイプなど) に一致することを確認します。
デフォルトで、
nginx-operator
はwatches.yaml
ファイルに示されるようにNginx
リソースイベントを監視し、指定されたチャートを使用して Helm リリースを実行します。- version: v1alpha1 group: example.com kind: Nginx chart: /opt/helm/helm-charts/nginx
- version: v1alpha1 group: example.com kind: Nginx chart: /opt/helm/helm-charts/nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Nginx Helm チャートを確認します。
Helm Operator プロジェクトの作成時に、Operator SDK は、単純な Nginx リリース用のテンプレートセットが含まれる Helm チャートのサンプルを作成します。
この例では、Helm チャート開発者がリリースについての役立つ情報を伝えるために使用する
NOTES.txt
テンプレートと共に、Deployment、Service、および Ingress リソース用にテンプレートを利用できます。Helm チャートの使用に慣れていない場合は、Helm Chart 開発者用のドキュメント を参照してください。
Nginx CR 仕様を確認します。
Helm は 値 (value) という概念を使用して、Helm チャートの
values.yaml
ファイルに定義される Helm チャートのデフォルトをカスタマイズします。CR 仕様に必要な値を設定し、これらのデフォルトを上書きします。例としてレプリカ数を使用することができます。
まず、
helm-charts/nginx/values.yaml
ファイルで、チャートにreplicaCount
という値が含まれ、これがデフォルトで1
に設定されていることを検査します。デプロイメントに 2 つの Nginx インスタンスを設定するには、CR 仕様にreplicaCount: 2
が含まれる必要があります。deploy/crds/example.com_v1alpha1_nginx_cr.yaml
ファイルを以下のように更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同様に、デフォルトのサービスポートは
80
に設定されます。8080
を代わりに使用するには、サービスポートの上書きを追加してdeploy/crds/example.com_v1alpha1_nginx_cr.yaml
ファイルを再度更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Helm Operator は、
helm install -f ./overrides.yaml
コマンドが機能するように、仕様全体を values ファイルの内容のように適用します。
CRD をデプロイします。
Operator の実行前に、Kubernetes は Operator が監視する新規カスタムリソース定義 (CRD) について把握している必要があります。以下の CRD をデプロイします。
oc create -f deploy/crds/example_v1alpha1_nginx_crd.yaml
$ oc create -f deploy/crds/example_v1alpha1_nginx_crd.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator をビルドし、実行します 。
Operator をビルドし、実行する方法として 2 つの方法を使用できます。
- Kubernetes クラスター内の Pod を使用
-
operator-sdk up
コマンドを使用してクラスター外で Go プログラムを使用
以下の方法のいずれかを選択します。
Kubernetes クラスター内で Pod として実行 します。これは実稼働環境での優先される方法です。
nginx-operator
イメージをビルドし、これをレジストリーにプッシュします。operator-sdk build quay.io/example/nginx-operator:v0.0.1 podman push quay.io/example/nginx-operator:v0.0.1
$ operator-sdk build quay.io/example/nginx-operator:v0.0.1 $ podman push quay.io/example/nginx-operator:v0.0.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deployment マニフェストは
deploy/operator.yaml
ファイルに生成されます。このファイルの Deployment イメージは、プレースホルダーREPLACE_IMAGE
から直前にビルドされたイメージに変更される必要があります。これを実行するには、以下を実行します。sed -i 's|REPLACE_IMAGE|quay.io/example/nginx-operator:v0.0.1|g' deploy/operator.yaml
$ sed -i 's|REPLACE_IMAGE|quay.io/example/nginx-operator:v0.0.1|g' deploy/operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nginx-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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nginx-operator
が稼働していることを確認します。oc get deployment
$ oc get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-operator 1 1 1 1 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスター外で実行します。この方法は、デプロイメントおよびテストの速度を上げるために開発サイクル時に優先される方法です。
watches.yaml
ファイルで参照されるチャートパスがマシン上に存在している必要があります。デフォルトで、watches.yaml
ファイルはoperator-sdk build
コマンドでビルドされる Operator イメージを使用できるようにスキャフォールディングされます。Operator をoperator-sdk run --local
コマンドで開発し、テストする場合、SDK はローカルファイルシステムでこのパスを検索します。この場所に、Helm チャートのパスを参照するシンボリックリンクを作成します。
sudo mkdir -p /opt/helm/helm-charts sudo ln -s $PWD/helm-charts/nginx /opt/helm/helm-charts/nginx
$ sudo mkdir -p /opt/helm/helm-charts $ sudo ln -s $PWD/helm-charts/nginx /opt/helm/helm-charts/nginx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow $HOME/.kube/config
にあるデフォルトの Kubernetes 設定ファイルを使って Operator をローカルに実行するには、以下を実行します。operator-sdk run --local
$ operator-sdk run --local
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提供された Kubernetes 設定ファイルを使って Operator をローカルに実行するには、以下を実行します。
operator-sdk run --local --kubeconfig=<path_to_config>
$ operator-sdk run --local --kubeconfig=<path_to_config>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Nginx
CR をデプロイします。これまでに変更した
Nginx
CR を適用します。oc apply -f deploy/crds/example.com_v1alpha1_nginx_cr.yaml
$ oc apply -f deploy/crds/example.com_v1alpha1_nginx_cr.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nginx-operator
が CR の Deployment を作成することを確認します。oc get deployment
$ oc get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE example-nginx-b9phnoz9spckcrua7ihrbkrt1 2 2 2 2 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod で 2 つのレプリカが作成されていることを確認します。
oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE example-nginx-b9phnoz9spckcrua7ihrbkrt1-f8f9c875d-fjcr9 1/1 Running 0 1m example-nginx-b9phnoz9spckcrua7ihrbkrt1-f8f9c875d-ljbzl 1/1 Running 0 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスポートが
8080
に設定されていることを確認します。oc get service
$ oc get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-nginx-b9phnoz9spckcrua7ihrbkrt1 ClusterIP 10.96.26.3 <none> 8080/TCP 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow replicaCount
を更新し、ポートを削除します。spec.replicaCount
フィールドを2
から3
に変更し、spec.service
フィールドを削除して、変更を適用します。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-nginx-b9phnoz9spckcrua7ihrbkrt1 3 3 3 3 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスポートがデフォルトの
80
に設定されていることを確認します。oc get service
$ oc get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-nginx-b9phnoz9spckcrua7ihrbkrt1 ClusterIP 10.96.26.3 <none> 80/TCP 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リソースをクリーンアップします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow