Azure

ACS Engineを利用してAzure上にkubernetesをdeploy!

はじめに

くどうです。
今回はAzureでのACS Engine について解説していきます。
また、2つのAdvent Calenderにエントリーしてます。

Microsoft Azure Advent Calendar 2017
https://qiita.com/advent-calendar/2017/azure
Kubernetes2 Advent Calendar 2017
https://qiita.com/advent-calendar/2017/kubernetes2
ACS Engineとは何でしょう。Azure Container Service Engineの略です。
AzureにはACS、AKSがありますが、まぁその大元のデプロイツールみたいなもので、テンプレート作成エンジンです。最終的に出来上がるモノは機能的にほぼ変わりませんが、様々なカスタマイズが可能です。
そもそもコードがオープンなので書き換えれば何でもできる(?)かもしれません。

ACS Engine
https://github.com/Azure/acs-engine
オーケストレーションツール
・swarm
・kubernetes
・DC/OS

コンテナー
・Docker

ベースは一緒です。
さてここからが本題です。
ただ、、、いまさらkubernetes(以下k8s)以外の選択する理由がさほど思い浮かばないないのでk8sで解説を進めます。

なぜACS Engine ?

なぜ、ACSやAKSではなく、ACS Engineでデプロイする必要があるのか?
個人的に以下の2つの機能が欲しかったためです。
1、Nodeの配置のカスタマイズ
– 任意のVNETへの配置が行える
– 1200Nodeのクラスタ構築が行える
2、Nodeのオートスケール
– Podの展開数に応じてオートスケールする

以上の理由によりACS Engineである必要がありました。
Service Fabricでも良いのでは?とも考えましたがなんかコンテナ展開するの面倒そうだったの却下(それだけじゃないですけど)

ACS Engineの展開

ではここからは実際に、ACS Engineでk8sを展開していきます。
手始めとして、任意のVNETへ展開していきます。

VNET、Subnetは既に作成されていることが前提です。
展開するリソースは以下です。

・リソースグループ
名前:acsengine
リージョン:eastus

・VNET
名前:acsengine-vnet
CIDR:172.16.0.0/16

・サブネット
名前:acsengine-subnet1
CIDR:172.16.0.0/24

ACSのダウンロード
バイナリで配布されています。
OSに合わせてダウンロードし、Pathを通しましょう。
今回はLinuxでしています。

v0.10.0
https://github.com/Azure/acs-engine/releases/tag/v0.10.0
また、下記のサイトよりソースをダウンロードします。
https://github.com/Azure/acs-engine

以上で準備完了です。

任意のVNETへ展開する方法

examplesのディレクトリ内にあるサンプルテンプレートを編集します。

masterProfileに追記します。
・dnsPrefix → dnsPrefixを指定
・vnetSubnetId → 展開するサブネットIDを指定
・FirstConsecutiveStaticIP → マスターノードを展開する最初のIPを指定

agentPoolProfilesに追記します。
・vnetSubnetId → 展開するサブネットIDを指定

以上で展開の準備が完了です。

デプロイする

acs-engineを利用して展開します。

アカウント情報がない場合はログインをログインを求められます。
自動的に、サービスプリンシパルとNodeにログインするためのKeyが作成されます。
テンプレートやKeyは_output内にdnsPrefix名で作成されます。

デプロイ後色々と展開されます。
まぁそこは確認してください。

サブネットに適用しているルートテーブルの変更します。
これを行わない場合、正しくNodeへの通信が行えません。

ログインしてみる
マスターノードのIPは各自、Portalなどから確認してください。
デフォルト設定ではユーザー名はazureuserです。
ユーザー名_rsaのkeyファイルです。

あとは、k8sの利用方法と同じです。

nodeをスケールする場合は以下のコマンドで行えます。
以下では3から5に増やしています。

サンプルとしてnginxを展開しますnginx.yml作成します。

AzureでInternal LoadBalancerを利用するには以下の指定が必要となります。
External LoadBalancerの場合はannotationsの指定は必要ありません。

Serviceを確認するとプライベートIPが作成EXTERNAL-IPが指定されています。
テスト用のVMを立てて確認してみましょう。

大体これで完了です。
あとはご自由にk8sを操ってください。

オートスケール

Podのオートスケールはkubanetesの機能に組み込まれていますが、Node単位でも可能です。
以下のKubernetes-acs-engine-autoscalerを利用します。
https://github.com/wbuchwalter/Kubernetes-acs-engine-autoscaler
Podがスケールするとnodeに展開できるpod数を超えるとnodeがオートスケールする仕組みです。

おまけ

ダッシュボードはbugのようなものがあります。
http://blog.shibayan.jp/entry/20171114/1510669620
また、起動時すでに利用できるようになっていますがCPUなどの情報が表示されません。
対応策としてdashboardのpodを一旦削除し、Deployされるのを待ちます。

あとは接続するためにForwardingします。

クライアント側からアクセスできるようするようSSLでトンネルを掘ります。

Proxyの設定をブラウザで指定します。

以下にアクセスします。
http://127.0.0.1/8001

これでGUIでの確認が行えます。

削除する場合は丸っとリソースグループごと消しちゃいましょう。

まとめ

ACS Engineは難しくはないです。また今後も進化を遂げるでしょう、Node単位でのオートスケールにも対応していくようです。
ACS、AKSを利用するよりも現実的な提案が行えるかと思います。簡単ですが以上です。

Related post

  1. Azure

    Power BIはモテると誰かがいっていたのでOMSのデータを表示させてみる。

    はじめにくどうです。Power BIはモテると誰かが言って…

  2. Azure

    Azureポータルの地味なキーボードショートカット

    Azureポータルの地味なキーボードショートカットA:タスクの…

  3. Azure

    マルチテナントでWindows 10 を利用できるパートナー一覧

    くどうです。Client周りの規約が変わってAzureでも利用でき…

  4. Azure

    Azure Load Balancerと Azure Application Gateway のアク…

    はじめにくどうです。Azureにはアクセスを負荷分散す…

  1. 未分類

    オタリーマンを買ってしまった。
  2. Azure

    Azure AppService (WebApps)で Sendmailを利用す…
  3. Azure

    Deep Security User Night #3 に参加してきました。
  4. Azure

    Azureのサービスレベル契約の早見表。詳しくは調べてください。
  5. セキュリティ

    OWASP Night 20th に行ってきた。
PAGE TOP