ACK Register Cluster で外部 k8s クラスタ連携

こんにちは、ソリューションアーキテクトの有馬です。
今回は Container Service for Kubernetes (ACK) の Register Cluster を使用して、外部の Kubernetes クラスタとの連携を試してみます。

f:id:sbc_sarima:20210902162004j:plain:w700




ACK Register Cluster とは

はじめに ACK Register Cluster についてですが、Alibaba Cloud やオンプレミス・他クラウド環境へ構築された複数の Kubernetes クラスタを統合管理する為のクラスタタイプとなります。
サービスや環境毎に構築・運用している複数の Kubernetes クラスタをまとめて管理したいと言ったケースもあるかと思います。ACK Register Cluster では、既存環境のクラスタを ACK Register Cluster へ登録する事で、ACK Register Cluster を介して各クラスタへのリソース管理が行えるようになります。
各クラスタへのプロキシのようなイメージと思って頂ければ良いかと思います。
※ ACK Register Cluster を以降は Register Cluster と省略して記載します

f:id:sbc_sarima:20210902163459p:plain



検証環境

今回利用する環境については、以下の構成で実行していきます。
手順の流れとしては、Alibaba Cloud へ Register Cluster を作成し、他クラウド環境へ事前に構築した Kubernetes クラスタへ ACK Register Agent をデプロイします。
Register Cluster へクラスタ登録後にクライアントから操作を実行します。

f:id:sbc_sarima:20210831162059p:plain



ACK Register Cluster 作成

ではContainer Service for Kubernetes のコンソールから Register Cluster を作成していきます。
クラスタタイプから [Register Cluster] を選択し、VPC・VSwitch・SLB・ログなど必要な設定を行います。
ここで設定した SLB や LogService 等は作成されますが、クラスタのコアコンポーネント自体は Alibaba Cloud でマネージドされる為、
特に ECS 等のノードは必要ありません。

f:id:sbc_sarima:20210901120532p:plain f:id:sbc_sarima:20210901120547p:plain


作成が完了すると、エンドポイントやクラスタ登録に必要となるマニフェストが作成されます。
まだ Kubernetes クラスタが何も登録されていない状態なので [To Be Connected] と表示されています。

f:id:sbc_sarima:20210901121410p:plain


[Connection Information] から登録するクラスタ環境に応じて、[Public Network] か [Internal Network] かを選択します。
今回は外部環境へ事前に作成したクラスタを追加する為、 [Public Network] のマニフェストを利用します。
こちらで表示されているマニフェストは、登録するクラスタ側で実行します。

f:id:sbc_sarima:20210901122710p:plain




クラスタ登録

先ほど [Public Network] でコピーしたマニフェストを、事前に作成している外部 Kubernetes クラスタへデプロイします。
デプロイすると、マニフェストへ設定されている configmap / serviceaccount / secret / deployment 等のリソースがデプロイされ
ACK Register Agent の Pod が起動します。

f:id:sbc_sarima:20210903135402p:plain


しばらくすると、登録されたクラスタのノードがコンソールへ表示され、ステータス等のノード情報が確認できるようになります。

f:id:sbc_sarima:20210902142025p:plain




動作確認

クラスタが登録後コンソールの [Connection Information] から Register Cluster へ接続する為の kubeconfig が発行されます。
こちらをローカルへ設定し、kubectl から Register Cluster を介して登録したクラスタへデプロイしていきます。

f:id:sbc_sarima:20210902141902p:plain


では Pod をデプロイしてみます。登録されたクラスタのワーカーノードへ nginx の Pod が作成されました。

$ kubectl run nginx --image nginx
pod/nginx created

$ kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                                             NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          16s   172.16.2.8   ip-172-16-2-98.ap-northeast-1.compute.internal   <none>           <none>


実行可能な機能については、Alibaba Cloud で利用できる ACK を登録した場合と、今回登録で利用したような外部のクラスタを登録した場合では対応している機能に違いがあります。
例として、ACK では従来通り Alibaba Cloud の各プロダクトと連携可能なのですが、外部クラスタの場合では一部未対応であったり、機能が実行環境に依存するなどです。
詳しくはドキュメントへ対応が記載されておりますので、利用前にこちらをご確認頂くのが良いかと思います。

www.alibabacloud.com




まとめ

今回は ACK Register Cluster を使用して簡易的に動作を確認してみました。
動作確認で使用したクラスタは1つだけでしたが、マルチクラウドやハイブリッド環境での
複数クラスタの管理手段として参考になればと思います。