AKSのクイックスタートなぞってみた
まず、はじめるには
クイックスタートでは Azure Cloud Shell を利用する雰囲気で書いてある。
GCPばっかり使っていたので Cloud Shell は無料かと思いきや、Azureの場合にはストレージ領域分課金されるとのこと。
がっかりしたのでmacにインストールしたコマンドで実行することにした。
Azure Clientのバージョン確認
Cloud Shellを使わなくても、Azure Clientから実行ができる。
ただし、AKSのサンプルを試すにはバージョン 2.0.27
以降である必要があるので、以下のコマンドでバージョンを確認する。
az --version
azure-cli (2.0.35) ~~ snip ~~
という感じで表示されたのでバージョン的には問題なしなのでそのまま進めよう。
Azure Clientでのログイン
Azure Clientのログインを事前に行う必要がある。
コマンドは
az login
ターミナル上にURLが表示されるのでそのURLをブラウザに貼り付けて実行し、ターミナル上に表示されたキーをブラウザに貼り付ける。
ブラウザ側の処理が完了するとターミナル側の処理が進む(json形式のレスポンスが返ってくる)のでそれを待ちましょう。
AKSプレビューの有効化
必要なサービスプロバイダーが有効になっているかのチェックを実施。
az provider register -n Microsoft.Network az provider register -n Microsoft.Storage az provider register -n Microsoft.Compute az provider register -n Microsoft.ContainerService
リソースグループを作成する
リソースグループとはリソースを任意のかたまりにまとめ、ライフサイクルや権限を一括して管理するための仕組み。というもののようです。
検証用の環境としてリソースグループ単位でゴソッと用意し、要らなくなったら一気に消す、などのようなことができるっぽい。
フロントのwebサーバグループ、裏側のDBグループ、のようなものではなく、webサーバ、DBサーバ、バッチサーバという感じでアプリケーション一式の塊をグループ化するのがお作法のようだ。
とりあえず作成してみる。
2018/06/12 現在、AKSは東京リージョンに来ていないので、 centralus
を使ってみることにする。
az group create --name ${RESOURCE_GROUP_NAME} --location centralus
"provisioningState": "Succeeded"
のような値を含むjsonレスポンスが返ってくれば成功だろう。
AKSクラスターを作成する
タイトルの通り。コマンドを実行してAKSクラスタを作成します。
クイックスタートの例ではnode1台ですが、欲張って2台にしてみます。1台で良いという方は1にしましょう。
az aks create --resource-group ${RESOURCE_GROUP_NAME} --name ${CLUSTER_NAME} --node-count 2 --generate-ssh-keys
クラスタの作成はそこそこ時間がかかります。(20分程度??)
完了後にjsonのレスポンスが返ってくるのでそれまでのんびり待ちましょう。
クラスターへの接続
k8sクラスタへの接続には kubectl
を利用します。
私はすでにインストール済みだったのでスキップしていますが、各自適当な方法でインストールしてください。
ex. Azure CLIでインストールするには
az aks install-cli
クレデンシャルの取得
kubectl用のクレデンシャルの設定を行います。
az aks get-credentials --resource-group ${RESOURCE_GROUP_NAME} --name ${CLUSTER_NAME}
ノードの一覧を取得してみる
kubectl get nodes
こんな感じの応答が返ってくる
kubectl get nodes NAME STATUS ROLES AGE VERSION aks-nodepool1-38601818-0 Ready agent 41m v1.9.6 aks-nodepool1-38601818-1 Ready agent 41m v1.9.6
アプリケーションの実行
以下のようなマニフェストファイルを作成し、デプロイを行います。
pythonアプリケーションとredisインスタンスが定義されています。
azure-vote.yaml ファイル
apiVersion: apps/v1beta1 kind: Deployment metadata: name: azure-vote-back spec: replicas: 2 template: metadata: labels: app: azure-vote-back spec: containers: - name: azure-vote-back image: redis ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: azure-vote-back spec: ports: - port: 6379 selector: app: azure-vote-back --- apiVersion: apps/v1beta1 kind: Deployment metadata: name: azure-vote-front spec: replicas: 2 template: metadata: labels: app: azure-vote-front spec: containers: - name: azure-vote-front image: microsoft/azure-vote-front:v1 ports: - containerPort: 80 env: - name: REDIS value: "azure-vote-back" --- apiVersion: v1 kind: Service metadata: name: azure-vote-front spec: type: LoadBalancer ports: - port: 80 selector: app: azure-vote-front
アプリケーションの実行
kubectl create -f azure-vote.yaml
以下のような出力がなされれば完了
deployment "azure-vote-back" created service "azure-vote-back" created deployment "azure-vote-front" created service "azure-vote-front" created
アプリケーションをテストする
アプリケーションが実行されたあとに、アプリケーションフロントエンドを公開するための kubernetesサービス が作成されますが、数分かかります。
状況を監視するには以下のコマンドを利用します。
kubectl get service azure-vote-front --watch
EXTERNAL-IP が <pending>
の状態ではまだ完了していません。
EXTERNAL-IPが確定したら、 ctrl+c
を実行してwatchを停止します。
外部アドレスで接続し、アプリの動作を確認する
ブラウザに先程のEXTERNAL-IPを入力し、アクセスします。
→ Cats & Dogs の投票ができました。
(注:実行するとリソースグループごと消えます)クラスターを削除する
クイックスタートで実行したクラスタをリソースグループごと削除します。 (このコマンドを実行すると作成したクラスタが、最初に作成したリソースグループごと消えます)
az group delete --name ${RESOURCE_GROUP_NAME} --yes --no-wait
結構簡単に利用することができた。
一番しんどかったのはAKSクラスタを作成する az aks create
コマンドを実行したときでした。(1時間近く待ちました・・・)
とはいえ、コンテナも作成してあり、yamlの記述に不安がなければ比較的かんたんに利用できそうです。
enjoy!