ACK@Edge でエッジ連携
本記事では、Container Service for Kubernetes (ACK) で利用可能な ACK@Edge を使用して、クラウドやオンプレミス等へ設置されたコンピュートとの連携をする方法をご紹介します。
ACK@Edge
ACK ではいくつかのクラスタタイプを提供していますが、ACK@Edge はその中の1つとなります。 ACK@Edge では、Alibaba Cloud からクラウドやオンプレミスなどのエッジロケーションへ配置されたノードを、Kubernetes のワーカーノードとして管理する事ができるようになります。
・IoTデバイスやx86およびARMアーキテクチャなどのリソースをサポート
※ エッジノードとしてENS にも対応していますが、現在東京リージョンでは未提供のプロダクトとなります
・セルベースでのエッジノード管理
・リバーストンネルでエッジノードと通信
・高い信頼性と可用性の Professional と Standard を提供
クラスタ作成
では早速 ACK@Edge クラスタを作成していきましょう。想定している構成としては、エッジノードとして登録するサーバは別途クラウド上へ構築されている前提となります。今回は Ubuntu 18.04.3 LTS のインスタンスをクラウドへ作成しました。
作成順序はほぼ ACK と同様です。[Create Cluseter] から [Managed Edge Kubernetes] を選択し、Standard edition 、リージョン、VPC、SNAT、APIを必要に応じて選択します。
ACK@Edge の管理コンポーネントを デプロイする必要がある為、ワーカーノードとして最低1つ ECS が必要となります。
今回は CloudMonitor エージェントと、LogService は無効にしておきます。
クラスタに必要となるリソースを確認し ACK@Edge クラスタを作成します。 ACK とほぼ同様に作成が可能ですね。
登録スクリプト生成
次に外部へ作成したインスタンスを、エッジノードとして登録するた為のスクリプトを作成します。
先ほど作成したクラスタを選択します。
[Add Existing Node] を選択します。
手動でノードを追加するので [Manual] を選択します。
Architecture で [AMD64] を選択し、[Next Step] で次へ進みます。
この際にエッジノードへ設定するパラメーターがあればこちらへ設定します。設定可能なパラメータはドキュメントを参照ください。
エッジノードとして登録するインスタンスで実行するスクリプトが表示されますので、こちらをコピーして [Done] で終了します。
エッジノード追加
ではエッジノードとして登録するインスタンスへログインし、先ほどコピーしたスクリプトをroot権限で実行します。
wget http://aliacs-k8s-ap-northeast-1.oss-ap-northeast-1.aliyuncs.com/public/pkg/run/attach/1.18.8-aliyunedge.1/amd64/edgeadm -O edgeadm; chmod u+x edgeadm; ./edgeadm join --openapi-token=<YOUR TOKEN> --node-spec="{\"allowedClusterAddons\":[\"kube-proxy\",\"flannel\",\"coredns\"],\"enableIptables\":true,\"labels\":{\"apps.openyurt.io/desired-nodepool\":\"np701fd3abd8f0418dbea5578f86258ed4\"},\"manageRuntime\":true,\"quiet\":true}" --region=ap-northeast-1
スクリプトの実行が正常に終了すると、ACK@Edge と連携する為に必要なコンテナがデプロイされます。
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1f244212b6b2 registry.ap-northeast-1.aliyuncs.com/acs/coredns "/coredns -conf /etc…" 3 minutes ago Up 3 minutes k8s_coredns_coredns-fcnhs_kube-system_1358456d-3e3f-4ca2-b992-91e5bc5e8002_0cf5e934d3cfc registry.ap-northeast-1.aliyuncs.com/acs/kube-proxy "/bin/sh -c 'set -x\n…" 3 minutes ago Up 3 minutes k8s_kube-proxy_kube-proxy-lvbhz_kube-system_b9110e57-c23e-48c1-af7e-251c1166ea9c_05c1adf228b9e registry.ap-northeast-1.aliyuncs.com/acs/pause:3.0.edge "/pause" 3 minutes ago Up 3 minutes k8s_POD_coredns-fcnhs_kube-system_1358456d-3e3f-4ca2-b992-91e5bc5e8002_0aed9e5bdca80 registry.ap-northeast-1.aliyuncs.com/acs/pause:3.0.edge "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-proxy-lvbhz_kube-system_b9110e57-c23e-48c1-af7e-251c1166ea9c_03cc334c0c640 d4851633d2d2 "/bin/sh -c 'set -x\n…" 3 minutes ago Up 3 minutes k8s_kube-flannel_kube-flannel-ds-9wv8t_kube-system_0adeb1fc-6834-4399-a86f-6dfd21cd439d_0b64e1b7da74b registry.ap-northeast-1.aliyuncs.com/acs/edge-tunnel-agent "/usr/local/bin/edge…" 3 minutes ago Up 3 minutes k8s_edge-tunnel-agent_edge-tunnel-agent-vv5gq_kube-system_ae5b6e3d-493e-4783-9d70-6f6464933a15_0f1a2f3a873b8 registry.ap-northeast-1.aliyuncs.com/acs/pause:3.0.edge "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-flannel-ds-9wv8t_kube-system_0adeb1fc-6834-4399-a86f-6dfd21cd439d_0e676e810f7fe registry.ap-northeast-1.aliyuncs.com/acs/pause:3.0.edge "/pause" 3 minutes ago Up 3 minutes k8s_POD_edge-tunnel-agent-vv5gq_kube-system_ae5b6e3d-493e-4783-9d70-6f6464933a15_053decba4cb64 registry.ap-northeast-1.aliyuncs.com/acs/edge-hub "/usr/local/bin/edge…" 4 minutes ago Up 4 minutes k8s_edge-hub_edge-hub-ip-192-168-1-208_kube-system_2117efdbfd33bf478238e98520d4cc5a_0e88740440c23 registry.ap-northeast-1.aliyuncs.com/acs/pause:3.0.edge "/pause" 4 minutes ago Up 4 minutes k8s_POD_edge-hub-ip-192-168-1-208_kube-system_2117efdbfd33bf478238e98520d4cc5a_0
コンソールからも登録したインスタンスがワーカーノードとして確認できるようになります。
$ kubectl get node -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEap-northeast-1.192.168.1.243 Ready <none> 2d22h v1.18.8-aliyunedge.1 192.168.1.243 <none> CentOS Linux 7 (Core) 3.10.0-1160.15.2.el7.x86_64 docker://19.3.15ip-192-168-1-93 Ready <none> 53m v1.18.8-aliyunedge.1 192.168.1.93 <none> Ubuntu 18.04.3 LTS 4.15.0-1054-aws docker://19.3.15
Pod デプロイ
追加したエッジノードへ Pod をデプロイしてみます。
今回は nodeSelector でエッジノードへ設定されたラベル(kubernetes.io/hostname=ip-192-168-1-93)を指定します。
apiVersion: v1kind: Podmetadata:labels:run: nginxname: nginxspec:containers:- image: nginxname: nginxnodeSelector:kubernetes.io/hostname: ip-192-168-1-93
エッジノードで Pod が起動されました。
$ kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx 1/1 Running 0 93s 10.18.0.67 ip-192-168-1-93 <none> <none>
エッジノード管理
先ほどは nodeSelector を使用し Pod をデプロイしましたが、ACK@Edge では Node Pool、UnitedDeployment、Service topology を使用する事で、
エッジノードやコンテナの管理を柔軟に行えるようになっています。
まとめ
今回は ACK@Edge を使用して、エッジノードの追加、コンテナのデプロイを試してみました。
ACK@Edge では CNCF の Sundbox Project でホストされている openyurt を使用して機能が提供されていますので、もしご興味があればそちらも公式ブログと合わせてチェックしてみてください。
https://community.alibabacloud.com/tags/type_blog-tagid_31845