GemfireをTKGにインストールする
· 10 分で読めます
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が必要です。
kubectl 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をインストールします。
cd tkg-extensions-v1.2.0+vmware.1/cert-manager
kubectl apply -f ./
その後、cert-managerがインストールされたことを確認します。
kubectl api-resources | grep cert-manager.io
challenges acme.cert-manager.io true Challenge
orders acme.cert-manager.io true Order
certificaterequests cr,crs cert-manager.io true CertificateRequest
certificates cert,certs cert-manager.io true Certificate
clusterissuers cert-manager.io false ClusterIssuer
issuers cert-manager.io true Issuer
なお、このリリースでは、APIバージョンがcert-manager.io/v1beta1までのサポートです。
kubectl api-versions | grep cert-manager.io
acme.cert-manager.io/v1alpha2
acme.cert-manager.io/v1alpha3
acme.cert-manager.io/v1beta1
cert-manager.io/v1alpha2
cert-manager.io/v1alpha3
cert-manager.io/v1beta1
Gemfire Operatorのインストール
最初にGemfire Operatorをインストールします。 TKGsなどを使う場合、まず最初に以下のようなRole Bindingを作ります。
kubectl create namespace gemfire-system
kubectl create rolebinding -n gemfire-system gemfire-system-role-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
次に、Gemfireが使うレジストリーのパスワードを設定します。
kubectl 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を用意します。
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"apiVersion":"cert-manager.io/v1"}), expects="1+"
---
apiVersion: cert-manager.io/v1beta1
そして、その後、以下のコマンドでhelmの展開 > 一部値のアップデート > kappでデプロイを同時にやります。
helm 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
うまくいけば以下のようにインストールされます。
kubectl get po -n gemfire-system
NAME READY STATUS RESTARTS AGE
geode-cluster-operator-controller-manager-7c8f54f4c5-nl2cz 2/2 Running 0 78m
Gemfireクラスターのインストール
オペレーターがインストールできたらクラスターを構成します。 まず相変わらずTKGsの場合、以下のRoleBindigsを作ります。
kubectl create namespace gemfire-cluster
kubectl create rolebinding -n gemfire-cluster gemfire-cluster-role-binding --clusterrole=psp:vmware-system-privileged --group=system:authenticated
そして、またレジストリ用のパスワードを登録します。
kubectl create secret docker-registry image-pull-secret --namespace=gemfire-cluster --docker-server=registry.pivotal.io --docker-username='USERNAME' --docker-password='PASSWD'
そして、とりあえずクラスターを作ってみます。
cat <<EOF | kubectl -n gemfire-cluster apply -f -
apiVersion: gemfire.tanzu.vmware.com/v1
kind: GemFireCluster
metadata:
name: gemfire1
spec:
image: registry.pivotal.io/tanzu-gemfire-for-kubernetes/gemfire-k8s:1.0.0
EOF
しばらくまつと、以下のようにサービスがインストールされます。
kubectl -n gemfire-cluster get GemFireCluster
NAME LOCATORS SERVERS
gemfire1 1/1 2/2
API用ロードバランサー構成
APIのアクセスにつかうロードバランサーを作ります。
cat <<EOF | kubectl apply -f-
apiVersion: v1
kind: Service
metadata:
name: gemfire-mgm-api
namespace: gemfire-cluster
spec:
selector:
app: gemfire1-locator
ports:
- name: management
port: 7070
targetPort: 7070
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
type: LoadBalancer
EOF
DEV用のロードバランサーの構成
DEV用のロードバランサーを作ります。 まず、GemFireClusterを編集します。
kubectl edit gemfirecluster gemfire1 -n gemfire-cluster
そして、spec以下に以下の情報をアップデートします。
servers:
overrides:
gemfireProperties:
start-dev-rest-api: "true"
そして、以下にあるように、ロードバランサーを確認します。
cat <<EOF | kubectl apply -f-
apiVersion: v1
kind: Service
metadata:
name: gemfire-dev-api
namespace: gemfire-cluster
spec:
selector:
app: gemfire1-server
ports:
- name: rest-api
port: 7070
targetPort: 7070
type: LoadBalancer
EOF
インストールの確認
最後にインストールを確認します。 まずは、kubectlを使い、gfshがアクセスできることを確認します。
kubectl -n gemfire-cluster exec -it gemfire1-locator-0 -- gfsh
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.13.1
Monitor and Manage Apache Geode
gfsh>
gfsh>
gfsh>
gfsh>exit
問題ないですね。次にロードバランサー経由でアクセスできることを確認します。--urlは環境におうじて変更してください。
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 9.10.5
Monitor and Manage VMware Tanzu GemFire
gfsh>connect --locator --use-http=true --url=http://10.195.35.80:7070/gemfire/v1
Successfully connected to: GemFire Manager HTTP service @ http://10.195.35.80:7070/gemfire/v1
You are connected to a cluster of version: 1.13.1
問題ないですね。最後にgfsh経由で情報が取れていることも確認します。
gfsh>list members
Member Count : 3
Name | Id
------------------ | ---------------------------------------------------------------------
gemfire1-locator-0 | 172.20.1.49(gemfire1-locator-0:1:locator)<ec><v0>:41000 [Coordinator]
gemfire1-server-1 | 172.20.1.55(gemfire1-server-1:1)<v4>:41000
gemfire1-server-0 | 172.20.1.56(gemfire1-server-0:1)<v6>:41000
gfsh>
OKですね。
まとめ
Gemfire on K8Sは非常に簡単に構成できました。