Azure
helm
AzureServiceBroker

Azure Service Broker の使い方 (1)

Azure Service Broker は、Azure のマネードサービスをHelm からプロビジョンするための仕組みです。今日はこれの使い方を調べて見ました。

1. install

Azure Service Broker で前提となっている、Service Calalog は残念ながら今の所 AKS では動かないらしく、ACS をデプロイする必要があります。

まずは、Azure / helm-charts をクローンしておきます。

$ git clone git@github.com:Azure/helm-charts.git

1.1. Install Service Catalog

まず、Service Catalog の手順を見ます。これは、Open Service Brokersと統合されていて、データベース、オブジェクトストレージ、メッセージキューなどをアプリケーションと関連付けをしながらプロビジョンしてくれるものみたいです。

ACS-engine / Releaseから、ACS Engine のバイナリを落として展開して見ましょう。私は、/Users/ushio/bin にぶち込んどきました。

先にリソースグループを作っときましょう。リソース グループの作成

$ az group create --name ACSResource --location "japaneast"

### 1.1.1. Install ACS by ACS-engine

このツールをデプロイしたい場合、Kubernetes のAggregated APIs つまり、サードパーティのAPIを追加可能にするためのものを使用可能にする必要があります。

$ acs-engine version
Version: v0.9.4
GitCommit: 50709347
GitTreeState: clean

$ acs-engine deploy \
    --subscription-id YOUR_SUBSCRIPTION_ID \
    --location japaneast \
    --auto-suffix \
    --resource-group ACSResrouce \
    --api-model acs-engine-kubernetes-config.json 

上記のコマンドを自分の環境に合わせて実行しますが、その前にAzure / helm-chartsにある、acs-engine-kubernetes-config.json の中身を変更しておきます。自分のパブリックキーや、dnsPrefix などはこちらの編集しておきます。ちなみに、中身は次の通り。

標準の、ACS-engine のテンプレートと見比べると、enableAggregatedAPIs enableRbac が true になっています。また、gcHighThreshhold gcLowThreshold がの数値が設定されています。これらはおそらくConfiguring kubelet Garbage Collectionで説明されている不要になったイメージのガーベッジコレクションの設定で、ディスク容量が70% 使用されると、60% になるまで、もっとも使われていなイメージから削除します。デフォルトは、85%, 80% みたいですね。const.go参照

ここで設定しているパブリックキーは、master/agent にssh 接続するときに使われます。

acs-engine-kubernetes-config.json

{
    "apiVersion": "vlabs",
    "properties": {
        "orchestratorProfile": {
            "orchestratorType": "Kubernetes",
            "kubernetesConfig": {
                "gcHighThreshold": 70,
                "gcLowThreshold": 60,
                "enableAggregatedAPIs": true,
                "enableRbac": true
            }
        },
        "masterProfile": {
            "count": 1,
            "dnsPrefix": "",
            "vmSize": "Standard_D2_v2"
        },
        "agentPoolProfiles": [
            {
                "name": "agentpool1",
                "count": 3,
                "vmSize": "Standard_D2_v2",
                "availabilityProfile": "AvailabilitySet"
            }
        ],
        "linuxProfile": {
            "adminUsername": "azureuser",
            "ssh": {
                "publicKeys": [
                    {
                        "keyData": ""
                    }
                ]
            }
        },
        "servicePrincipalProfile": {
            "clientId": "",
            "secret": ""
        }
    }
}

先ほどのオプションがわからないのが気持ちわるので調べておきます。

Flags 説明
--subscription-id Azure の Subscription id
--location Azure の Location (e.g. japaneast)
--auto-suffix dnsPrefix に対して自動でタイムスタンプをつける設定
--api-model apimodel ファイルへのPath

これで、Service Broker が動くACS-engine のクラスタが出来上がりました。

ちなみに、最初は--resource-group オプションが指定できたのにつけるの忘れていました。そしたら、dnsPrefix の名前でリソースグループが作られていましたw。もちろん作り直しました。

ちなみに、いきなりデプロイせず、生成される ARM テンプレートを愛でて見たい場合は、

acs-engine generate --api-model acs-engine-kubernetes-config.json

設定の通り、--auto-suffix によって、リソース名に数字が割り当てられています。

Screen Shot 2017-11-18 at 8.28.00 PM.png

dnsPrefix が、sabrk にしたので、ドメイン名の命名は次のようです。

Screen Shot 2017-11-18 at 8.28.20 PM.png

その(2)に続きます。

Resource

* Azure / helm-charts
* Azure Service Broker
* ACS-engine / Release
* Configuring kubelet Garbage Collection