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. AWS

    パソコン同士をVPNで接続する方法(お気に入りツールの紹介)

    はじめにくどうですパソコン同士をVPNで接続する場合が多く…

  2. Azure

    Azure Application Gateway にフロントポートを追加する。

    はじめにくどうです前回の記事では、httpsポートでAzu…

  3. Azure

    Azure Active Directoryを削除する。なんか消えないんすけど。

    はじめに今回はAzure Active Directory(以下A…

  4. Azure

    Azure Active Directory のBasic とかPremium とかのライセンスって…

    はじめにくどうです。Azure Active Direct…

  5. Azure

    Azure Application Gateway 上でLet’s Encryptの証明書ファイルを…

    はじめにくどうです。証明書の更新は簡単です。ついでにLet…

  6. AWS

    AzureとAWSにおけるIaaS可用性の違いを少しだけおさらい。

    はじめにくどうです。最近、よく聞かれることがあります。「A…

  1. 未分類

    sambaとActive Directory間のアクセス権
  2. Azure

    de:code 2016に参加した!
  3. Azure

    クイックスタートテンプレートを利用してユーザーイメージから仮想マシンを作成します…
  4. Azure

    Azure Load Balancerと Azure Application G…
  5. 未分類

    RHEL5とRHEL4ESのベンチマーク  RHEL5もベンチしてみる
PAGE TOP