Tanzu Service Managerを手っ取り早くインストール
Tanzu Service Managerのインストールは手っ取り早さを優先する場合の手順はシンプルに済みます。
はじめに
Tanzu Application Serviceのマーケットプレースなどのサービスの作成は、今後Tanzu Service Manager(TSMGR)が中心的なコンポーネントになる予定です。 ただし、マニュアルにしたがってインストールしようと思うと、S3ストレージの用意や証明書の用意などハードルが高く感じるかもしれません。
マニュアルではDev Modeと呼ばれる、これをシンプルにインストールする手順が紹介されています。
https://docs.pivotal.io/tanzu-service-manager/1-0/installing-dev.html
今回はこれよりさらにシンプルにインストールできる手順を紹介します。というのものTAS4K8Sがインストールされていれば、前提条件である、KubernetesやIstioの用意が既にすんでいるため、それを流用すればいいためです。 なお、あくまで検証環境でつかうことを目的なので、本番環境では手順を変えてください。
前提
- TAS4K8Sの環境が用意されていること
- helm cli がインストールされていること
- uaacがインストールされていること
手順
今回は、TSMGRとTAS4K8Sが同居する前提で手順を実施します。こうすることで必要な手順をグッと下げられます。
1. ユーザーの準備
TSMGRがTASと連携するユーザーを作ります。 まず、TAS4K8Sのインストールに使用したディレクトリーに移動し、以下のコマンドを入力します。
1bosh interpolate configuration-values/deployment-values.yml --path /uaa/admin_client_secret
うまくいくと、パスワードが出現します。
1<パスワード>
2
3Succeeded
そして、次に接続ユーザーを作成します。SYSTEMDOMAINは環境に合わせて変更して下さい。
1uaac target uaa.SYSTEMDOMAIN --skip-ssl-validation
adminユーザーでログインします。
1uaac token client get admin -s <先ほど表示したパスワード>
そしてユーザーを作ります。以下このままコピペをすることをお勧めします。
1uaac client add tsmgr -s DevPassword --authorized_grant_types client_credentials,refresh_token --scope cloud_controller.read,cloud_controller.write --authorities cloud_controller.admin
2. Helmの実行
まず、TSMGRのHelmチャートとCLIをダウンロードします。この中の「TSMGR Helm Chart」と「CLI」のみで十分です。
https://network.pivotal.io/products/tanzu-service-manager/
次に以下のようなYamlを用意します。以下の2点は環境に合わせて更新してください。
- Tanzu Networkのユーザー/パスワード
- SYSTEMDOMAINはTAS4K8Sで使用しているもの
それ以外はこのままで大丈夫です。values.yaml
と保存し、ダウンロードした Helmチャートと同じ場所に配置します。
1imageCredentialsForTSMGRImages:
2 registry: registry.pivotal.io
3 username: <Tanzu Networkのユーザー>
4 password: <Tanzu Networkのパスワード>
5
6broker:
7 service:
8 type: ClusterIP
9 replicaCount: 1
10 password: DevPassword
11
12reconciler:
13 replicaCount: 1
14
15daemon:
16 service:
17 type: ClusterIP
18 replicaCount: 1
19
20chartmuseum:
21 enabled: true
22 env:
23 open:
24 STORAGE_AMAZON_BUCKET: minio-charts
25 STORAGE_AMAZON_ENDPOINT: http://tsmgr-minio:9000
26 STORAGE_AMAZON_REGION: us-east-1
27 BASIC_AUTH_PASS: "chartpass"
28 existingSecret: tsmgr-minio
29 existingSecretMappings:
30 AWS_ACCESS_KEY_ID: access-key
31 AWS_SECRET_ACCESS_KEY: secret-key
32
33minio:
34 internal: true
35 accessKey:
36 password: DevPassword
37 secretKey:
38 password: DevPassword
39
40
41ingress:
42 enabled: true
43 hosts:
44 - name: SYSTEMDOMAIN
45 path: "/*"
46 annotations:
47 kubernetes.io/ingress.class: istio
48
49cf:
50 brokerUrl: http://tsmgr-tsmgr-broker.tsmgr.svc.cluster.local
51 brokerName: tsmgr
52 apiAddress: https://api.SYSTEMDOMAIN
53 client: tsmgr
54 clientSecret: DevPassword
55 skipSslValidation: true
ネームスペースを作成します。
1kubectl create ns tsmgr
そして、helmチャートを実行します。
1helm install tsmgr tsmgr-1.0.11.tgz -n tsmgr -f values.yaml
しばらくしたら、以下を実行します。
1export TSMGR_TARGET=http://daemon.SYSTEMDOMAIN
2export TSMGR_TOKEN=$(kubectl get secret -n tsmgr $(kubectl get serviceaccount -n tsmgr tsmgr-tsmgr-admin-sa -o jsonpath='{@.secrets[0].name}') -o=jsonpath='{@.data.token}' | base64 --decode)
以下のコマンドを実行して、サーバー、クライアント2つのバージョンが表示されれば、いったんは成功です。
1tsgmgr version
3. TSMGR用のサービスアカウントの作成
すこし、面倒ですが、これはマニュアルの通りに設定していきます。 まず、Namespaceを作ります。
1kubectl create ns tsmgr-system
そして、以下のコマンドでサービスアカウントを作ります。プロンプトに直接コピペでOKです
1kubectl apply -f - <<EOF
2---
3apiVersion: v1
4kind: ServiceAccount
5metadata:
6 name: tsmgr-admin
7 namespace: tsmgr-system
8---
9apiVersion: rbac.authorization.k8s.io/v1beta1
10kind: ClusterRoleBinding
11metadata:
12 name: tsmgr-cluster-admin
13roleRef:
14 apiGroup: rbac.authorization.k8s.io
15 kind: ClusterRole
16 name: cluster-admin
17subjects:
18 - kind: ServiceAccount
19 name: tsmgr-admin
20 namespace: tsmgr-system
21EOF
そして以下の一連のコマンドを実行します。これもプロンプトに直接コピペでOKです。
1cluster=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.cluster}")
2server=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$cluster\")].cluster.server}")
3certificate=$(kubectl config view --raw --flatten -o jsonpath="{.clusters[?(@.name == \"$cluster\")].cluster.certificate-authority-data}")
4secret_name=$(kubectl get serviceaccount tsmgr-admin --namespace=tsmgr-system -o jsonpath='{.secrets[0].name}')
5secret_val=$(kubectl --namespace=tsmgr-system get secret $secret_name -o jsonpath='{.data.token}')
6secret_val=$(echo ${secret_val} | base64 --decode)
7cat > cluster-creds.yaml << EOF
8token: ${secret_val}
9server: ${server}
10caData: ${certificate}
11EOF
cluster-creds.yaml
の中身がちゃんと生成されていればOKです。
4. TSMGRにクラスター登録
ここまで来れば、あとはクラスターの登録のみです。 以下のコマンドを実行します。
1% tsmgr cluster register tas cluster-creds.yaml
2Cluster [tas] saved
1% tsmgr cluster set-default tas
2Cluster [tas] set as default
以上でTSMGRの登録が完了しました。
おまけ. MySQLのHELMチャートを登録する
この英語ブログを参考に、MYSQLのHelmチャートを登録してみます。
1git clone https://github.com/bitnami/charts.git
2cd ./charts/bitnami/mysql
以下のようなファイルを作ります。bind.yaml
とします。
1template: |
2 {
3 hostname: $.services[0].name + "." + $.services[0].metadata.namespace + ".svc.cluster.local",
4 name: $.services[0].name,
5 jdbcUrl: "jdbc:mysql://" + self.hostname + "/my_db?user=" + self.username + "&password=" + self.password + "&useSSL=false",
6 uri: "mysql://" + self.username + ":" + self.password + "@" + self.hostname + ":" + self.port + "/my_db?reconnect=true",
7 password: $.secrets[0].data['mysql-root-password'],
8 port: 3306,
9 username: "root"
10 }
helmのパッケージ化します。
1helm package .
そして、TSMGRに登録します。
1cd ../
2tsmgr offer save ./mysql ./mysql/mysql-6.14.11.tgz
ここまでくれば、cfに登録されていることを確認します。
1% cf service-brokers
2Getting service brokers as admin...
3
4name url
5tsmgr http://tsmgr-tsmgr-broker.tsmgr.svc.cluster.local
アクセスを許可します。
1cf enable-service-access mysql
そうすると、apps managerにも以下のようにマーケットプレースにも表示されます。
デプロイの際は以下のようなコマンドでデプロイできます。
1cf create-service mysql default test-mysql
すると以下のように作成がされます。
1mhoshino@mhoshino bitnami % cf services
2Getting services in org demo / space demo as admin...
3
4name service plan bound apps last operation broker upgrade available
5test-mysql mysql default create succeeded tsmgr yes
GUIでも確認できます。
まとめ
TSMGRもTAS4K8S環境なら気軽に試せます。