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の用意が既にすんでいるため、それを流用すればいいためです。 なお、あくまで検証環境でつかうことを目的なので、本番環境では手順を変えてください。

前提

手順

今回は、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点は環境に合わせて更新してください。

それ以外はこのままで大丈夫です。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環境なら気軽に試せます。