GemfireをTKGにインストールする

Gemfireのk8s版がリリースされたので、インストールしてみました。

環境

以下の環境で試しました。

  • TKG v1.18.10+vmware.1-tkg.1.3a6cd48 (via TMC)
  • Gemfire for k8s : 1.0.0

手順

簡単に手順を紹介します。 なお、常に最新のマニュアルは確認してください。

https://tgf.docs.pivotal.io/tgf/1-0/work-with-cluster.html

バイナリーのダウンロード

Tanzu Networkからダウンロードします。この中のTanzu Gemfire Operatorだけでいい模様。

https://network.pivotal.io/products/tanzu-gemfire-for-kubernetes

Cert Managerのインストール

マニュアルにない前提として、Cert Managerのインストールが必要なそうです。

まず、TKGsなどを使っている場合は事前に以下のRoleBindingsが必要です。

1kubectl create rolebinding -n cert-manager cert-manager-role-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

以下から、VMware Tanzu Kubernetes Grid Extensions Manifest 1.2.0をダウンロードします。

https://www.vmware.com/go/get-tkg

展開後、以下のコマンドでcert managerをインストールします。

1cd tkg-extensions-v1.2.0+vmware.1/cert-manager
2kubectl apply -f ./

その後、cert-managerがインストールされたことを確認します。

1kubectl api-resources | grep cert-manager.io
2challenges                                     acme.cert-manager.io                         true         Challenge
3orders                                         acme.cert-manager.io                         true         Order
4certificaterequests               cr,crs       cert-manager.io                              true         CertificateRequest
5certificates                      cert,certs   cert-manager.io                              true         Certificate
6clusterissuers                                 cert-manager.io                              false        ClusterIssuer
7issuers                                        cert-manager.io                              true         Issuer

なお、このリリースでは、APIバージョンがcert-manager.io/v1beta1までのサポートです。

1kubectl api-versions | grep cert-manager.io
2acme.cert-manager.io/v1alpha2
3acme.cert-manager.io/v1alpha3
4acme.cert-manager.io/v1beta1
5cert-manager.io/v1alpha2
6cert-manager.io/v1alpha3
7cert-manager.io/v1beta1

Gemfire Operatorのインストール

最初にGemfire Operatorをインストールします。 TKGsなどを使う場合、まず最初に以下のようなRole Bindingを作ります。

1kubectl create namespace gemfire-system
2kubectl create rolebinding -n gemfire-system gemfire-system-role-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

次に、Gemfireが使うレジストリーのパスワードを設定します。

1kubectl create secret docker-registry image-pull-secret --namespace=gemfire-system --docker-server=registry.pivotal.io --docker-username='USERNAME' --docker-password='PASSWD'

そして、Operatorのインストール。。。といきたいところなのですが、執筆時点で、cert-manager/v1を使うようHelmがなっているのですが、前述したようTKGのExtentionからインストールした場合、サポートするAPIバージョンはcert-manager/v1beta1までです。 しかたないので、helmチャートの一部をアップデートしながらインストールします。

以下のツールを使います。

端末に上記のツールをインストール後以下のようなupdate-cert-manager.yamlを用意します。

1#@ load("@ytt:overlay", "overlay")
2
3#@overlay/match by=overlay.subset({"apiVersion":"cert-manager.io/v1"}), expects="1+"
4---
5apiVersion: cert-manager.io/v1beta1

そして、その後、以下のコマンドでhelmの展開 > 一部値のアップデート > kappでデプロイを同時にやります。

1helm template geode-cluster-operator ~/Downloads/gemfire-operator-1.0.0.tgz --namespace gemfire-system | ytt --ignore-unknown-comments -f- -f update-cert-manager.yaml | kapp deploy -f- -n gemfire-system -a geode-cluster-operator -y

うまくいけば以下のようにインストールされます。

1kubectl get po -n gemfire-system
2NAME                                                         READY   STATUS    RESTARTS   AGE
3geode-cluster-operator-controller-manager-7c8f54f4c5-nl2cz   2/2     Running   0          78m

Gemfireクラスターのインストール

オペレーターがインストールできたらクラスターを構成します。 まず相変わらずTKGsの場合、以下のRoleBindigsを作ります。

1kubectl create namespace gemfire-cluster
2kubectl create rolebinding -n gemfire-cluster gemfire-cluster-role-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated

そして、またレジストリ用のパスワードを登録します。

1kubectl create secret docker-registry image-pull-secret --namespace=gemfire-cluster --docker-server=registry.pivotal.io --docker-username='USERNAME' --docker-password='PASSWD'

そして、とりあえずクラスターを作ってみます。

1cat <<EOF | kubectl -n gemfire-cluster apply -f -
2apiVersion: gemfire.tanzu.vmware.com/v1
3kind: GemFireCluster
4metadata:
5  name: gemfire1
6spec:
7  image: registry.pivotal.io/tanzu-gemfire-for-kubernetes/gemfire-k8s:1.0.0
8EOF

しばらくまつと、以下のようにサービスがインストールされます。

1kubectl -n gemfire-cluster get GemFireCluster
2NAME       LOCATORS   SERVERS
3gemfire1   1/1        2/2

API用ロードバランサー構成

APIのアクセスにつかうロードバランサーを作ります。

 1cat <<EOF | kubectl apply -f-
 2apiVersion: v1
 3kind: Service
 4metadata:
 5 name: gemfire-mgm-api
 6 namespace: gemfire-cluster
 7spec:
 8 selector:
 9   app: gemfire1-locator
10 ports:
11   - name: management
12     port: 7070
13     targetPort: 7070
14 sessionAffinity: ClientIP
15 sessionAffinityConfig:
16     clientIP:
17       timeoutSeconds: 10800
18 type: LoadBalancer
19EOF

DEV用のロードバランサーの構成

DEV用のロードバランサーを作ります。 まず、GemFireClusterを編集します。

1kubectl edit gemfirecluster gemfire1 -n gemfire-cluster

そして、spec以下に以下の情報をアップデートします。

1servers:
2  overrides:
3    gemfireProperties:
4      start-dev-rest-api: "true"

そして、以下にあるように、ロードバランサーを確認します。

 1cat <<EOF | kubectl apply -f-
 2apiVersion: v1
 3kind: Service
 4metadata:
 5  name: gemfire-dev-api
 6  namespace: gemfire-cluster
 7spec:
 8  selector:
 9    app: gemfire1-server
10  ports:
11    - name: rest-api
12      port: 7070
13      targetPort: 7070
14  type: LoadBalancer
15EOF

インストールの確認

最後にインストールを確認します。 まずは、kubectlを使い、gfshがアクセスできることを確認します。

 1kubectl -n gemfire-cluster exec -it gemfire1-locator-0 -- gfsh
 2    _________________________     __
 3   / _____/ ______/ ______/ /____/ /
 4  / /  __/ /___  /_____  / _____  /
 5 / /__/ / ____/  _____/ / /    / /
 6/______/_/      /______/_/    /_/    1.13.1
 7
 8Monitor and Manage Apache Geode
 9gfsh>
10gfsh>
11gfsh>
12gfsh>exit

問題ないですね。次にロードバランサー経由でアクセスできることを確認します。--urlは環境におうじて変更してください。

 1    _________________________     __
 2   / _____/ ______/ ______/ /____/ /
 3  / /  __/ /___  /_____  / _____  /
 4 / /__/ / ____/  _____/ / /    / /
 5/______/_/      /______/_/    /_/    9.10.5
 6
 7Monitor and Manage VMware Tanzu GemFire
 8gfsh>connect --locator --use-http=true --url=http://10.195.35.80:7070/gemfire/v1
 9Successfully connected to: GemFire Manager HTTP service @ http://10.195.35.80:7070/gemfire/v1
10
11You are connected to a cluster of version: 1.13.1

問題ないですね。最後にgfsh経由で情報が取れていることも確認します。

 1gfsh>list members
 2Member Count : 3
 3
 4       Name        | Id
 5------------------ | ---------------------------------------------------------------------
 6gemfire1-locator-0 | 172.20.1.49(gemfire1-locator-0:1:locator)<ec><v0>:41000 [Coordinator]
 7gemfire1-server-1  | 172.20.1.55(gemfire1-server-1:1)<v4>:41000
 8gemfire1-server-0  | 172.20.1.56(gemfire1-server-0:1)<v6>:41000
 9
10gfsh>

OKですね。

まとめ

Gemfire on K8Sは非常に簡単に構成できました。