Tanzu Service Managerを手っ取り早くインストール
· 10 分で読めます
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のインストールに使用したディレクトリーに移動し、以下のコマンドを入力します。
bosh interpolate configuration-values/deployment-values.yml --path /uaa/admin_client_secret
うまくいくと、パスワードが出現します。
<パスワード>
Succeeded
そして、次に接続ユーザーを作成します。SYSTEMDOMAINは環境に合わせて変更して下さい。
uaac target uaa.SYSTEMDOMAIN --skip-ssl-validation
adminユーザーでログインします。
uaac token client get admin -s <先ほど表示したパスワード>
そしてユーザーを作ります。以下このままコピペをすることをお勧めします。
uaac 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チャートと同じ場所に配置します。
imageCredentialsForTSMGRImages:
registry: registry.pivotal.io
username: <Tanzu Networkのユーザー>
password: <Tanzu Networkのパスワード>
broker:
service:
type: ClusterIP
replicaCount: 1
password: DevPassword
reconciler:
replicaCount: 1
daemon:
service:
type: ClusterIP
replicaCount: 1
chartmuseum:
enabled: true
env:
open:
STORAGE_AMAZON_BUCKET: minio-charts
STORAGE_AMAZON_ENDPOINT: http://tsmgr-minio:9000
STORAGE_AMAZON_REGION: us-east-1
BASIC_AUTH_PASS: "chartpass"
existingSecret: tsmgr-minio
existingSecretMappings:
AWS_ACCESS_KEY_ID: access-key
AWS_SECRET_ACCESS_KEY: secret-key
minio:
internal: true
accessKey:
password: DevPassword
secretKey:
password: DevPassword
ingress:
enabled: true
hosts:
- name: SYSTEMDOMAIN
path: "/*"
annotations:
kubernetes.io/ingress.class: istio
cf:
brokerUrl: http://tsmgr-tsmgr-broker.tsmgr.svc.cluster.local
brokerName: tsmgr
apiAddress: https://api.SYSTEMDOMAIN
client: tsmgr
clientSecret: DevPassword
skipSslValidation: true
ネームスペースを作成します。
kubectl create ns tsmgr
そして、helmチャートを実行します。
helm install tsmgr tsmgr-1.0.11.tgz -n tsmgr -f values.yaml
しばらくしたら、以下を実行します。
export TSMGR_TARGET=http://daemon.SYSTEMDOMAIN
export 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つのバージョンが表示されれば、いったんは成功です。
tsgmgr version
3. TSMGR用のサービスアカウントの作成
すこし、面倒ですが、これはマニュアルの通りに設定していきます。 まず、Namespaceを作ります。
kubectl create ns tsmgr-system
そして、以下のコマンドでサービスアカウントを作ります。プロンプトに直接コピペでOKです
kubectl apply -f - <<EOF
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: tsmgr-admin
namespace: tsmgr-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tsmgr-cluster-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tsmgr-admin
namespace: tsmgr-system
EOF
そして以下の一連のコマンドを実行します。これもプロンプトに直接コピペでOKです。
cluster=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.cluster}")
server=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$cluster\")].cluster.server}")
certificate=$(kubectl config view --raw --flatten -o jsonpath="{.clusters[?(@.name == \"$cluster\")].cluster.certificate-authority-data}")
secret_name=$(kubectl get serviceaccount tsmgr-admin --namespace=tsmgr-system -o jsonpath='{.secrets[0].name}')
secret_val=$(kubectl --namespace=tsmgr-system get secret $secret_name -o jsonpath='{.data.token}')
secret_val=$(echo ${secret_val} | base64 --decode)
cat > cluster-creds.yaml << EOF
token: ${secret_val}
server: ${server}
caData: ${certificate}
EOF
cluster-creds.yamlの中身がちゃんと生成されていればOKです。
4. TSMGRにクラスター登録
ここまで来れば、あとはクラスターの登録のみです。 以下のコマンドを実行します。
% tsmgr cluster register tas cluster-creds.yaml
Cluster [tas] saved
% tsmgr cluster set-default tas
Cluster [tas] set as default
以上でTSMGRの登録が完了しました。
おまけ. MySQLのHELMチャートを登録する
この英語ブログを参考に、MYSQLのHelmチャートを登録してみます。
git clone https://github.com/bitnami/charts.git
cd ./charts/bitnami/mysql
以下のようなファイルを作ります。bind.yamlとします。
template: |
{
hostname: $.services[0].name + "." + $.services[0].metadata.namespace + ".svc.cluster.local",
name: $.services[0].name,
jdbcUrl: "jdbc:mysql://" + self.hostname + "/my_db?user=" + self.username + "&password=" + self.password + "&useSSL=false",
uri: "mysql://" + self.username + ":" + self.password + "@" + self.hostname + ":" + self.port + "/my_db?reconnect=true",
password: $.secrets[0].data['mysql-root-password'],
port: 3306,
username: "root"
}
helmのパッケージ化します。
helm package .
そして、TSMGRに登録します。
cd ../
tsmgr offer save ./mysql ./mysql/mysql-6.14.11.tgz
ここまでくれば、cfに登録されていることを確認します。
% cf service-brokers
Getting service brokers as admin...
name url
tsmgr http://tsmgr-tsmgr-broker.tsmgr.svc.cluster.local
アクセスを許可します。
cf enable-service-access mysql
そうすると、apps managerにも以下のようにマーケットプレースにも表示されます。

デプロイの際は以下のようなコマンドでデプロイできます。
cf create-service mysql default test-mysql
すると以下のように作成がされます。
mhoshino@mhoshino bitnami % cf services
Getting services in org demo / space demo as admin...
name service plan bound apps last operation broker upgrade available
test-mysql mysql default create succeeded tsmgr yes
GUIでも確認できます。

まとめ
TSMGRもTAS4K8S環境なら気軽に試せます。