HatでOpenShiftのテクニカルサポートエンジニアをしているDaein(デイン)です。SDKで作成してOpenShiftで稼働させてみます。stepで解説していきます。docs.openshift.com既にOperatorという用語に慣れている方が多いかもしれませんが、簡単に紹介します。SDKはそのOperatorを簡単に作成できるようにしてくれる開発ツールです。docs.openshift.comdocs.openshift.comドキュメントに記載されている手順とは別のサンプル実装として、メンテナンスページの切り替えを行うOperatorを作成してみます。このOperatorは、アプリケーションpodとメンテナンスページ用podの2つのpodをデプロイし、それら2つのpodのアクセスを切り換えます。詳細なフローとCR(CustomResource)の定義は次のようになっています。メンテナンスページ用のPod名はCR名をベースに生成されます。trueにするとServiceはメンテナンスページ用のPodに振り分けするように変更されます。アプリケーション用のPodをデプロイするDeploymentと関連Serviceはこの名前で作成されます。アプリケーション用のコンテナイメージ上記のCR(CustomResource)を作成するとOperatorが次のタスクを実施してくれるように作成します。SDKの設置この記事ではLinuxをベースに進めておりますが、MacOSも利用可能です。詳細は次のリンク先を参照してください。ff80b17737a6a0aade663e4827e8af3ab5a21170以上で、インストール完了です。プロジェクトを作成してOperatorを作成してみましょう。下記で紹介するコードはロジックの実装のみ記載していてエラー及びログ処理は省略しています。ディレクトリパスは環境に合わせて調整してください。修正した内容のみ記載しています。次は項目をまとめて定義するために追加したデータタイプで必要に応じて追加したりしてください。修正内容に合わせて必要なコードを再生成してください。k8s上記の手順で追加したCR(MaintPage)の定義に合わせてどのように操作するか実装するコントローラーを追加してください。MaintPage基本的に次の順で関数をカスタムしてロジックを実装します。CRUDのイベントを監視(Watch)するリソースを指定します。指定したリソースにイベントが発生するたびにカスタムロジックが適用・一致(Reconcile)されます。イベントを監視したいリソースを次の関数配下で追加してください。メンテナンスページ用のPodがあるかチェックして作成するため、Podも追加します。デフォルトでMaintPageは監視されますので、マニュアルでイメージが変更されることを検知するためDeploymentを次の通り追加します。MaintPageとDeploymentでCRUDのイベントが発生した時、どのような処理をするか次の関数で実装してください。メンテナンス用のPodがない場合、新しく作成します。CRで定義したAppNameのDeploymentが存在しない場合、新しく作成します。CRで定義したAppNameのServiceが存在しない場合、新しく作成します。(今回ServiceはWatchに追加していないため、監視されません。CRで定義したMaintPageToggleがtrueの場合、Serviceをメンテナンスページ用のPodをEndpointとして変更してStatusセクションのMaintpublishstatusをPublishedにセットします。Deploymentの参照イメージがCRと一致しないと元に戻します。}コードとしては長いですが、内容はシンプルです。Watchで登録したリソースに対してイベント発生時の状態をチェックし、想定している状態に一致させるロジックを実装するだけです。APIのより詳細な情報は次のリンクを参照してください。APIで実装したものになります。どのように定義しているかみてみましょう。メンテナンスページ用のPodをCRで定義した名前とイメージをベースに作成する関数になります。アプリケーション用のPodをCRで定義した名前とイメージをベースにデプロイする関数になります。CRで定義した名前でServiceを作成する関数になります。StatusセクションのMaintPublishStatus項目を渡された引数に合わせてセットする関数です。m}コードの全文はこのGitHubから確認できます。次の手順でOperatorをビルドしてイメージを適切なレジストリにpushしてください。メンテナンスページ及びアプリケーションページのコンテナイメージは別途用意してください。!"が記載されたindex.htmlを追加したものでテストしています。プロジェクト名は適切にご調整ください。設置前にpushしたレジストリからイメージpullできるか確認してください。20sCR(MaintPage)を定義してメンテナンス及びアプリケーションページ用のPodを作成してください。21mOperatorの動作チェックCRのMaintpagetoggleをtrueに更新してメンテナンスページの切り替えとDeploymentのイメージをマニュアルで更新しても変更されないか確認しましょう。次の通り、Deploymentのイメージはマニュアルで変更しても更新されないことが確認できます。quay.io/daein/prodpage:latest次の通り、CR(MaintPage)のMaintpagetoggleをtrue/falseに更新することでページ表示が変わることが確認できます。Published"です。別のターミナルでService当てにリクエストし続けてページの変更をモニターしましょう。true"に更新してください。!"に変更されることが確認できます。Published"になりました。falseに戻して元の状態になるかも確認してください。SDKを利用してどのようにOperatorが作成されるかみてみました。Manager)の実装も検討する必要があるでしょう。Sourceとして公開されていますので実装に困った時には参考にすると良いと思います。Hatでコンサルタントをしている織です。各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。