Azure Service Broker の使い方 (2)
前回の続きから
前提条件
前回は ACS-engine を使って、Service Catalog をインストール可能なクラスタを作成しました。他の前提条件を満たしていきます。
Installing Service Catalogの内容を実施します。
Helm
Helm のインストールは簡単です。
$ brew install kubernetes-helm
$ helm init
ちなみに、ローカルキャッシュとして、~/.helm
が作成され、kubectl
のコンテキストにtiller
というサーバーが作られます。
Helm Charts
Service Catalog の Helm repository をローカル環境に足して見ます。
helm repo add svc-cat https://svc-catalog-charts.storage.googleapis.com
これを実施すると、ローカルの ~/.helm/repository/repositories.yaml
にエントリが追加されています。
- caFile: ""
cache: /Users/ushio/.helm/repository/cache/svc-cat-index.yaml
certFile: ""
keyFile: ""
name: svc-cat
url: https://svc-catalog-charts.storage.googleapis.com
ちゃんとリポジトリが参照されている様子。
$ helm search service-catalog
NAME VERSION DESCRIPTION
svc-cat/catalog 0.1.3 service-catalog API server and controller-manag...
RBAC
Tillter が、cluster-admin
のアクセス権を持つように設定します。
kubectl create clusterrolebinding tiller-cluster-admin \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:default
上記の設定は、クラスターワイドで、tiller-culster-admin という名前のロールバインディングを、cluster-admin(管理者)の権限をkube-system:default
のネームスペースに与えている。
$ kubectl create clusterrolebinding tiller-cluster-admin \
> --clusterrole=cluster-admin \
> --serviceaccount=kube-system:default
clusterrolebinding "tiller-cluster-admin" created
kubectl
1.7
以上必要らしいが問題なし。
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.2", GitCommit:"bdaeafa71f6c7c04636251031f93464384d54963", GitTreeState:"clean", BuildDate:"2017-10-24T19:48:57Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.9", GitCommit:"19fe91923d584c30bd6db5c5a21e9f0d5f742de8", GitTreeState:"clean", BuildDate:"2017-10-19T16:55:06Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
# Step2 - Install Service Catalog
インストラクションにこのリポジトリのトップでと書いてあったが、そのまま実行
$ helm install svc-cat/catalog \
> --name catalog --namespace catalog
NAME: catalog
LAST DEPLOYED: Sun Nov 19 01:07:02 2017
NAMESPACE: catalog
STATUS: DEPLOYED
RESOURCES:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
catalog-catalog-apiserver-133269258-68wfp 0/2 ContainerCreating 0 8s
catalog-catalog-controller-manager-3024858573-xfvl7 0/1 ContainerCreating 0 8s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
catalog-catalog-apiserver 1 1 1 0 10s
catalog-catalog-controller-manager 1 1 1 0 10s
==> v1beta1/APIService
NAME AGE
v1beta1.servicecatalog.k8s.io 10s
==> v1beta1/ClusterRoleBinding
NAME AGE
servicecatalog.k8s.io:apiserver 10s
servicecatalog.k8s.io:apiserver-auth-delegator 10s
servicecatalog.k8s.io:controller-manager 9s
==> v1beta1/RoleBinding
NAME AGE
servicecatalog.k8s.io:apiserver-authentication-reader 10s
service-catalog-controller-manager 9s
==> v1/ServiceAccount
NAME SECRETS AGE
service-catalog-apiserver 1 9s
service-catalog-controller-manager 1 9s
==> v1/Secret
NAME TYPE DATA AGE
catalog-catalog-apiserver-cert Opaque 2 10s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
catalog-catalog-apiserver NodePort 10.0.123.144 <none> 443:30443/TCP 10s
==> v1beta1/ClusterRole
NAME AGE
servicecatalog.k8s.io:apiserver 10s
servicecatalog.k8s.io:controller-manager 9s
==> v1beta1/Role
servicecatalog.k8s.io:leader-locking-controller-manager 9s
Azure Service Broker のインストール
Azure Service Broker にしたがってインストールしてみる。
下記のコマンドで、環境変数に、SUBSCTIPTION_ID
をセットする。az account show --query id
で現在使用されているSubscriptionID が取得できる。 sed s/\"//g
は、文字列置換でダブルクオートを空文字に変換。マッチするものを全て置換の意味。 【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する
正規表現系は、やんわりと避けてきたけど、便利そうなのでどこかでがっつりやったほうがいいかも。
export AZURE_SUBSCRIPTION_ID=$(az account show --query id | sed s/\"//g)
Azure Service Broker 用のサービスプリンシパルを作成しておく。
$ az ad sp create-for-rbac -n "ARB-ushio"
手順通り、Service Principal を環境変数に入れておく。
$ export AZURE_TENANT_ID=<tenant>
$ export AZURE_CLIENT_ID=<appId>
$ export AZURE_CLIENT_SECRET=<password>
次に、Helm の Azure のリポジトリが追加されているか?を確認。
$ helm search wordpress
NAME VERSION DESCRIPTION
stable/wordpress 0.7.1 Web publishing platform for building blogs and ...
なさげ。インストールする。
手順はこちら。Installing Charts
$ helm repo add azure https://kubernetescharts.blob.core.windows.net/azure
"azure" has been added to your repositories
invincible:ACSResource ushio$ helm search wordpress
NAME VERSION DESCRIPTION
azure/wordpress 0.6.12 Web publishing platform for building blogs and ...
stable/wordpress 0.7.1 Web publishing platform for building blogs and ...
helm チャートで、インストールを実施する。
実行前にデフォルト値の値と設定可能なパラメータを見てみる。
helm inspect values azure/azure-service-broker
ドキュメントはこちら。
そのままで実行。
helm install azure/azure-service-broker --name asb --namespace asb \
--set azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \
--set azure.tenantId=$AZURE_TENANT_ID \
--set azure.clientId=$AZURE_CLIENT_ID \
--set azure.clientSecret=$AZURE_CLIENT_SECRET
最初は、redis が PersistentVolumeClaim is not bound: "asb-redis"
が出て何回かやり直してるみたいで焦ったけど、待っていると無事終了。多分コンテナへのマウントの部分で、時間がかかって何回かやり直している雰囲気。
動作確認。
カタログからデータが取れている様子。
$ kubectl get clusterservicebroker -o yaml
apiVersion: v1
items:
- apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:
creationTimestamp: 2017-11-19T01:55:21Z
finalizers:
- kubernetes-incubator/service-catalog
generation: 1
name: asb
namespace: ""
resourceVersion: "172"
selfLink: /apis/servicecatalog.k8s.io/v1beta1/clusterservicebrokers/asb
uid: b3c67b65-cccc-11e7-a0dd-0a580af40104
spec:
authInfo:
basic:
secretRef:
name: asb-azure-service-broker-auth
namespace: asb
relistBehavior: Duration
relistDuration: 15m0s
relistRequests: 0
url: http://asb-azure-service-broker.asb.svc.cluster.local
status:
conditions:
- lastTransitionTime: 2017-11-19T01:57:31Z
message: Successfully fetched catalog entries from broker.
reason: FetchedCatalog
status: "True"
type: Ready
lastCatalogRetrievalTime: 2017-11-19T01:57:31Z
reconciledGeneration: 1
kind: List
metadata:
resourceVersion: ""
selfLink: ""
登録されているサービスのクラス。え、こんな使えるの?
$ kubectl get clusterserviceclasses -o=custom-columns=NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName
NAME EXTERNAL NAME
0346088a-d4b2-4478-aa32-f18e295ec1d9 azure-rediscache
2e2fc314-37b6-4587-8127-8f9ee8b33fea azure-storage
451d5d19-4575-4d4a-9474-116f705ecc95 azure-aci
6330de6f-a561-43ea-a15e-b99f44d183e6 azure-cosmos-document-db
6dc44338-2f13-4bc5-9247-5b1b3c5462d3 azure-servicebus
7bade660-32f1-4fd7-b9e6-d416d975170b azure-eventhub
8797a079-5346-4e84-8018-b7d5ea5c0e3a azure-cosmos-mongo-db
997b8372-8dac-40ac-ae65-758b4a5075a5 azure-mysqldb
b43b4bba-5741-4d98-a10b-17dc5cee0175 azure-postgresqldb
c54902aa-3027-4c5c-8e96-5b3d3b452f7f azuresearch
d90c881e-c9bb-4e07-a87b-fcfe87e03276 azure-keyvault
fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5 azure-sqldb
使えるプランはこれで確認
$ kubectl get clusterserviceplans -o=custom-columns=NAME:.metadata.name,EXTERNAL\ NAME:.spec.externalName,SERVICE\ CLASS:.spec.clusterServiceClassRef.name --sort-by=.spec.clusterServiceClassRef.name
NAME EXTERNAL NAME SERVICE CLASS
800a17e1-f20a-463d-a290-20516052f647 blob-storage-account 2e2fc314-37b6-4587-8127-8f9ee8b33fea
189d3b8f-8307-4b3f-8c74-03d069237f70 blob-container 2e2fc314-37b6-4587-8127-8f9ee8b33fea
6ddf6b41-fb60-4b70-af99-8ecc4896b3cf general-purpose-storage-account 2e2fc314-37b6-4587-8127-8f9ee8b33fea
13c6da8f-128c-48c0-a3a9-659d1b6d3920 basic 6dc44338-2f13-4bc5-9247-5b1b3c5462d3
6be0d8b5-381f-4d68-bdfd-a131425d3835 standard 6dc44338-2f13-4bc5-9247-5b1b3c5462d3
e359cbbe-d52b-47cc-8243-5bb9651c86c7 premium 6dc44338-2f13-4bc5-9247-5b1b3c5462d3
264ab981-9e37-44ba-b6bb-2d0fe3e80565 standard 7bade660-32f1-4fd7-b9e6-d416d975170b
80756db5-a20c-495d-ae70-62cf7d196a3c basic 7bade660-32f1-4fd7-b9e6-d416d975170b
d48798e2-21db-405b-abc7-aa6f0ff08f6c aci 451d5d19-4575-4d4a-9474-116f705ecc95
08e4b43a-36bc-447e-a81f-8202b13e339c standard800 997b8372-8dac-40ac-ae65-758b4a5075a5
427559f1-bf2a-45d3-8844-32374a3e58aa basic50 997b8372-8dac-40ac-ae65-758b4a5075a5
1a538e06-9bcc-4077-8480-966cbf85bf36 basic100 997b8372-8dac-40ac-ae65-758b4a5075a5
edc2badc-d93b-4d9c-9d8e-da2f1c8c3e1c standard100 997b8372-8dac-40ac-ae65-758b4a5075a5
ae3cd3dd-9818-48c0-9cd0-62c3b130944e standard400 997b8372-8dac-40ac-ae65-758b4a5075a5
9995c891-48ba-46cc-8dae-83595c1f443f standard200 997b8372-8dac-40ac-ae65-758b4a5075a5
71168d1a-c704-49ff-8c79-214dd3d6f8eb document-db 6330de6f-a561-43ea-a15e-b99f44d183e6
86fdda05-78d7-4026-a443-1325928e7b02 mongo-db 8797a079-5346-4e84-8018-b7d5ea5c0e3a
4af8bbd1-962d-4e26-84f1-f72d1d959d87 standard 0346088a-d4b2-4478-aa32-f18e295ec1d9
b1057a8f-9a01-423a-bc35-e168d5c04cf0 premium 0346088a-d4b2-4478-aa32-f18e295ec1d9
362b3d1b-5b57-4289-80ad-4a15a760c29c basic 0346088a-d4b2-4478-aa32-f18e295ec1d9
b2ed210f-6a10-4593-a6c4-964e6b6fad62 basic50 b43b4bba-5741-4d98-a10b-17dc5cee0175
843d7d03-9306-447e-8c19-25ccc4ac30d7 basic100 b43b4bba-5741-4d98-a10b-17dc5cee0175
35bd6e80-5ff5-487e-be0e-338aee9321e4 free c54902aa-3027-4c5c-8e96-5b3d3b452f7f
65e89af2-8da2-4559-b103-8dd2dd8fdd40 standard-s1 c54902aa-3027-4c5c-8e96-5b3d3b452f7f
4a50e008-5513-42d3-8b2f-d8b3ad43f7eb basic c54902aa-3027-4c5c-8e96-5b3d3b452f7f
3577ee4a-75fc-44b3-b354-9d33d52ef486 standard d90c881e-c9bb-4e07-a87b-fcfe87e03276
6893b1de-0a7b-42bb-b28d-1636c4b81f75 premium d90c881e-c9bb-4e07-a87b-fcfe87e03276
85d54d69-55ee-4fe8-a207-66bc96ecf9e7 premium-p4 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
470a869b-1b02-474b-b5e5-10ca0ea488df data-warehouse-1200 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
a5537f8e-d816-4b0e-9546-a13811944bdd standard-s2 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
408f5f35-5f5e-48f3-98cf-9e10c1abc4e5 premium-p11 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
af3dc76f-5b31-4cad-8adc-a9e756640a57 premium-p6 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
3819fdfa-0aaa-11e6-86f4-000d3a002ed5 basic fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
2bbbcc59-a0e0-4153-841b-2833cb417d43 premium-p2 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
b69af389-7af5-47bd-9ccf-c1ffdc2620d9 data-warehouse-100 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
26cf84bf-f700-4e65-8048-cbfa9c319d5f standard-s3 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
2497b7f3-341b-4ac6-82fb-d4a48c005e19 standard-s0 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
17725188-76a2-4d6c-8e86-49f146766eeb standard-s1 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
f9a3cc8e-a6e2-474d-b032-9837ea3dfcaa premium-p1 fb9bc99e-0aa9-11e6-8a8a-000d3a002ed5
おー、これは面白い。k8s の上で動くhelm から、これらのサービスをプロビジョンできるわけね!
次回は使ってなんかやってみる。