はじめに
みなさん、Kubernetes使っていますか?
AWSであればEKS、Google CloudであればGKEと、マネージドなk8s環境の運用管理サービスがありますよね。
今回はAlibaba Cloudのマネージドなk8s実行環境提供サービスであるACK(Alibaba Cloud Container Service for Kubernetes)を使って、Alibaba Cloud上のk8s実行基盤にアプリケーションをデプロイしてみます。
ベースは公式のGetting Startedです。日本語ドキュメントよりも英語のほうが充実していたため、英語のドキュメントをベースに進めていきましょう。
最終的な成果物
k8sクラスター上にルービックキューブ的なゲームをデプロイするハンズオンのようですね。
こういう遊び心があるハンズオンはいいですね!
ACKの有効化
まずは下記のリンクからACKコンソールを開きます。
https://cs.console.aliyun.com/?spm=5176.12818093.0.dcsk.6c9c12d20DzcmP#/k8s/cluster/list
※ はじめてACKコンソールを開く場合は、ACKの有効化が必要になります。
Activateに成功したら以下のような画面が表示されます。
Activateには1 ~ 5分ほどかかるようなので、少し待ってConsoleに戻りましょう。
ACK Consoleをはじめて開く場合には、Default Roleの作成を促されるので、指示に従いCloud Resource Access AuthorizationからACK用のロールを作成しましょう。
AWSのIAMロールなどと同じように、有効化しない限りは該当のリソースを作成したり、操作したりすることができない仕様になっています。面倒かもしれませんが、逆にセキュリティが高いということの証明ですね。
クラスターの作成
ACKコンソール画面の左にある Clusters を開きます。
画面右上の Create Kubernetes Cluster をクリックします。
パラメータの設定
Managed Kubernates タブにて、作成するクラスタのパラメータを設定していきます。
設定項目 | 値 |
---|---|
Cluster Specification | Professional |
Cluster Name | ACK-Demo |
Region | Japan(Tokyo) |
VPCの作成
すでに作成済みのVPCを利用してもよいですが、ここでは Create VPC をクリックして、新規にVPCを作成していきます。
vSwitchの作成も行います。vSwtichはAWSでいうサブネットグループですね。
設定ができたら OK をクリックしてVPCを作成します。
ACK Clusterの設定画面に戻り、先ほど作成したVPCを選択します。
vSwitchにもチェックをいれます。
Access to API Server欄についても Expose API Server with EIP をチェックします。
Node Poolの設定
ノードプールは、クラスタの中で「同じ構成をもったワーカーノード」のグループです。
まずはインスタンスタイプですね。ドキュメントによると、クラスタの安定性を高めるために、少なくとも
4vCPU
8GiBのメモリ
のインスタンスタイプを選択することが推奨されているようです。
Filterで上記の条件を設定し、表示された Enhanced Compute Type c6e を選択します。
Selected Types欄に選択したインスタンスタイプが表示されたらOKです。
起動するワーカーノードの台数を Quantity で設定します。
ワーカーノードを1台で起動することも可能ですが、その場合このワーカーノードが単一障害点となってしまいます。片方のワーカーノードに障害が発生したとしても、問題なくシステムが動作するように最低2台を起動しておきましょう。
System Diskについては、確保したサイズ分料金が増えてしまうので、今回は40GiBとしています。
最後に Logon Type を選択します。
今回はパスワードでのログインを選択しています。
設定が完了したら、画面下部にあるNext:Component Configurations
をクリックします。
ちなみに、この時点で左側に時間当たりのコストが表示されています。親切な設計ですね!
Component Configurationsの設定
Component Configurationsページでは、以下の通りUse Default Alert Rule Template
のチェックを外します。有効化してもいいのですが、アラートルールの作成が求められるので、簡略化のため今回は無効化しています。
最後に画面下部のNext:Confirm Order
をクリックします。
確認画面が出るので、Terms of Service
にチェックを入れて、画面下部のCreate Cluster
をクリックします。
クラスタの作成には10分程度かかるため、作成完了まで待ちましょう。
ClusterダッシュボードでCluster Status
がRunning
になっていたらOKです。
アプリケーションの公開と作成
では、早速ACKクラスタ上にアプリケーションを公開していきましょう。
クラスタ名をクリックします。
Create from image をクリックします。
ここでいうイメージは、ACK上で動作させるアプリケーションのコンテナイメージのことですね。
Basic Informationページにて、Nameにack-cube
を設定します。
任意の名前なので、それ以外の名前でもOKです。
そして、右下の Next をクリックします。
コンテナのパラメータを設定します。
Image Name
に、registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube
を設定します。これはルービックキューブゲームのコンテナイメージが格納されているパスです。
Image Version
は1.0
とします。ちなみに、ここを指定しない場合は最新のバージョンが自動的に取得されます。
次に、動作するアプリケーションのリソース制限を行います。
現在、ACKクラスターの基盤としてEnhanced Compute Type c6e
インスタンスタイプが2台起動しており、コンテナはその上で動作します。
その際、それぞれのコンテナは基盤となるクラスターのリソースを利用しますが、ここで設定を行うことで、1つのコンテナが過剰にリソースを利用することを防ぐことができます。
Resource Limit
は、アプリケーションのリソース制限です。
CPU
は1 Core
、Memory
は1024MiB
を選択します。
反対に、Required
は、最低限確保するリソースの量です。リソース不足でアプリケーションが起動しないといった自体を避けることができます。
CPU
は0.5 Core
、Memory
は512MiB
を選択します。
Portの設定も行います。+
ボタンを押して追加を行い、
Name
はack-cube
、Container Port
は80
とします。
設定ができたら、画面右上のNext
をクリックします。
Advancedな設定ページで Services の隣の Create
をクリックします。
この Service は、k8sの主要なリソースの1つです。コンテナ(Pod)にアクセスするための、ロードバランサーやDNSサーバーのような役割を担うリソースです。
Type
で Server Load Balancer
- Public Access
- Create SLB Instance
を選択します。
Modify
をクリックすることで、SLB Instanceのタイプを変更することができます。今回はデフォルトのslb.s1.small
を選択します。
Port Mapping
では、以下のように設定します。
設定項目 | 値 |
---|---|
Name | ack-cube-svc |
Service Port | 80 |
Container Port | 80 |
設定ができたら、右下のCreate
をクリックして、Serviceの設定ウインドウを閉じます。
最後に、画面右下のCreate
をクリックして、アプリケーションの作成を行います。
以下のような画面が表示されたら、アプリケーションの作成が正常に完了しています。
アクセスしてみる
ACK-Demo クラスタ画面で、左から Network -> Services をクリックします。
サービスの一覧が表示されるので、アプリケーションに紐づいたack-cube-svc
のレコードを探し、External Endpoint
欄のIPアドレスをクリックします(画像は黒塗りにしています)
ACKクラスター上で稼働している、ルービックキューブアプリケーションにインターネット経由でアクセスができました!やった!!
アプリケーションのモニタリング
ここからは、ACK上で稼働するアプリケーションのモニタリング機能の確認です。
ACK-Demo クラスタの画面左から、Operations -> Prometheus Monitoringを選択します。
Prometheus(プロメテウス)はOSSのモニタリングツールです。
Prometheus Monitoringページが開いたら、Application Monitoring -> Deployment Detailsタブをクリックします。
namespace
をdefault
に、deployment
をack-cube
に設定します。
この設定を行うことで、先ほど作成したルービックキューブアプリケーションに絞って、メモリ使用量やCPU使用率の監視を行うことができます。
さいごに
今回は、公式のGetting Startedをベースに、Alibaba Cloud上でACKを利用したk8sクラスターの作成、アプリケーションのデプロイ、モニタリングまでを行いました。
UIが非常に洗練されていて、個人的にはGoogle CloudのGKEや、AWSのEKSよりも直感的に操作することができたと感じます。