この CookBook では、Payara を GKE 上で実行しクラスタリングを構築する手順について紹介しています。
Payara 5.184 で Kubernetes Cluster Mode が追加されました。
PAYARA-2872 Kubernetes Cluster Mode
hazelcast-kubernetes を組み込むことで、機能が実現されています。
そのため、Payara 管理コンソール上からクラスタモードとして Kubernetes Cluster Mode を選択し、https://github.com/hazelcast/hazelcast-kubernetes#configuration に記載されている手順を実施することで、Kubernetes 上でクラスタリングを構築することができます。
この CookBook では以下の CookBook で作成した docker image を使用します。
Payara の Docker を作成する。
レシピ
- gcloud を設定します。
- docker image を作成します。
- クラスタを作成します。
- ClusterRoleBinding を作成します。
- Service を作成します。
- デプロイします。
- Payara の管理コンソールにアクセスし、Kubernetes Cluster Mode を設定します。
- クラスタリングを確認します。
- 後片付けをします。
1. gcloud を設定します。
https://console.cloud.google.com/ よりプロジェクト ID が my-project のプロジェクトを作成します。
プロジェクト ID は全世界でユニークである必要があるため、実際には別の名前を使用してください。この CookBook では my-project とします。
プロジェクトを作成後、以下のコマンドを実行します。
1 2 |
gcloud config set project my-project gcloud config set compute/zone us-west1-c |
gcloud コマンドのデフォルトのプロジェクトとゾーンを設定しています。
2. docker image を作成します。
Payara の Docker を作成する。 で作成した docker image を Google Container Registry(GCR) に push します。
1 2 |
docker tag mypayara gcr.io/my-project/mypayara:5.184 gcloud docker -- push gcr.io/my-project/mypayara:5.184 |
3. クラスタを作成します。
1 |
gcloud container clusters create payara-cluster --zone us-west1-c --num-nodes=2 --machine-type=n1-standard-1 |
ノード数 = 2, インスタンスタイプ = n1-standard-1 のクラスタを作成します。
以下のように表示されれば完了です。
1 2 3 4 5 6 |
Creating cluster payara-cluster in us-west1-c...done. Created [https://container.googleapis.com/v1/projects/my-project/zones/us-west1-c/clusters/payara-cluster]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-west1-c/payara-cluster?project=my-project kubeconfig entry generated for payara-cluster. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS payara-cluster us-west1-c 1.9.7-gke.11 104.196.250.15 n1-standard-1 1.9.7-gke.11 2 RUNNING |
4. ClusterRoleBinding を作成します。
rbac.yaml
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: default-cluster roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: view subjects: - kind: ServiceAccount name: default namespace: default |
1 |
kubectl apply -f rbac.yaml |
以下のように表示されれば完了です。
1 |
clusterrolebinding.rbac.authorization.k8s.io "default-cluster" created |
5. Service を作成します。
payara-service.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
apiVersion: v1 kind: Service metadata: name: payara labels: app: payara spec: type: LoadBalancer sessionAffinity: ClientIP ports: - name: das port: 4848 targetPort: 4848 protocol: TCP - name: server-instance port: 28080 targetPort: 28080 protocol: TCP - name: hazelcast1 port: 4900 - name: hazelcast2 port: 5900 selector: app: payara |
payara-service.yaml で指定した metadata/name = payara がサービス名です。
そのため、Payara を実行後、管理コンソールで Kubernetes Cluster Mode の Kubernetes Service Name に「Payara」を指定します。
この CookBook では、Payara を 2 つ起動します。
それぞれの Payara(Payara 1, Payara 2) にアクセスするためのサービスを以下で作成します。
payara-service1.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
apiVersion: v1 kind: Service metadata: name: payara1 labels: app: payara spec: type: LoadBalancer sessionAffinity: ClientIP ports: - name: das port: 4848 targetPort: 4848 protocol: TCP selector: statefulset.kubernetes.io/pod-name: payara-0 |
statefulset.kubernetes.io/pod-name = payara-0 としているため、Payara 1 へアクセスするサービスになります。
payara-service2.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
apiVersion: v1 kind: Service metadata: name: payara2 labels: app: payara spec: type: LoadBalancer sessionAffinity: ClientIP ports: - name: das port: 4848 targetPort: 4848 protocol: TCP selector: statefulset.kubernetes.io/pod-name: payara-1 |
statefulset.kubernetes.io/pod-name = payara-1 としているため、Payara 2 へアクセスするサービスになります。
1 2 3 |
kubectl apply -f payara-servide.yaml kubectl apply -f payara-servide1.yaml kubectl apply -f payara-servide2.yaml |
以下のように表示されれば完了です。
1 2 3 |
service "payara" created service "payara1" created service "payara2" created |
以下のコマンドでサービスの一覧を表示できます。
1 2 3 4 5 6 |
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.55.240.1 <none> 443/TCP 9m payara LoadBalancer 10.55.244.106 35.230.94.189 4848:31743/TCP,28080:30663/TCP,4900:30914/TCP,5900:32381/TCP 5m payara1 LoadBalancer 10.55.254.61 35.247.46.80 4848:31080/TCP 5m payara2 LoadBalancer 10.55.241.3 35.247.26.231 4848:31337/TCP |
6. デプロイします。
payara-statefulset.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: payara labels: app: payara spec: serviceName: payara replicas: 2 selector: matchLabels: app: payara template: metadata: labels: app: payara spec: containers: - name: payara image: gcr.io/my-project/mypayara:5.184 imagePullPolicy: Always resources: requests: # g1-small # cpu: 100m # memory: 300Mi # n1-standard-1 # cpu: 150m # memory: 1500Mi # n1-standard-2 # cpu: 700m # memory: 3000Mi cpu: 150m memory: 1500Mi ports: - containerPort: 4848 name: das - containerPort: 28080 name: server-instance - containerPort: 4900 name: hazelcast1 - containerPort: 5900 name: hazelcast2 |
spec/replicas = 2 としているため、2 つの Payara を実行します。
spec/template/spec/containers/resources/requests はクラスタ作成時に指定したインスタンスタイプに応じて適宜設定します。
1 |
kubectl apply -f payara-statefulset.yaml |
以下のように表示されれば完了です。
1 |
statefulset.apps "payara" created |
以下のコマンドでポッドの一覧を表示できます。
1 2 3 4 |
$ kubectl get pods -o=wide NAME READY STATUS RESTARTS AGE IP NODE payara-0 1/1 Running 0 2m 10.52.0.8 gke-payara-cluster-default-pool-ca5616fd-q89q payara-1 1/1 Running 0 1m 10.52.1.8 gke-payara-cluster-default-pool-ca5616fd-k646 |
STATUS が Running にならない場合、以下のコマンドでログを表示しエラーを確認できます。
1 2 |
kubectl logs payara-0 kubectl logs payara-1 |
また以下のコマンドで bash を起動し、各種コマンドを実行できます。デバッグ時にご利用ください。
1 2 |
kubectl exec -it payara-0 -- /bin/bash kubectl exec -it payara-1 -- /bin/bash |
7. Payara の管理コンソールにアクセスし、Kubernetes Cluster Mode を設定します。
以下のコマンドでエンドポイント IP を確認します。
1 2 3 4 5 6 |
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.55.240.1 <none> 443/TCP 32m payara LoadBalancer 10.55.244.106 35.230.94.189 4848:31743/TCP,28080:30663/TCP,4900:30914/TCP,5900:32381/TCP 28m payara1 LoadBalancer 10.55.254.61 35.247.46.80 4848:31080/TCP 27m payara2 LoadBalancer 10.55.241.3 35.247.26.231 4848:31337/TCP |
NAMEが「payara1」の「EXTERNAL-IP」が「35.247.46.80」
NAMEが「payara2」の「EXTERNAL-IP」が「35.247.26.231」
であるため、https://35.247.46.80:4848/ で Payara 1 の管理コンソール, https://35.247.26.231:4848/ で Payara 2 の管理コンソールにアクセスできます。
ユーザ/パスワードは admin/password に設定されています。
https://35.247.46.80:4848/ から Payara 1 の管理コンソールを表示し、[Domain] - [DataGrid] の [Configuration] タブを表示し、[Restart Data Grid] をチェックします。
以下のように設定します。
設定項目 | 設定値 |
---|---|
Data Grid Discovery Mode | kubernetes |
kubernetes | default |
Kubernetes Service Name | payara |
https://35.247.26.231:4848/ から Payara 2 の管理コンソールを表示し、同様に設定します。
8. クラスタリングを確認します。
[Domain] - [DataGrid] の [Data Grid Instances] タブを表示し、クラスタリングが構築できていることを確認します。
9. 後片付けをします。
以下のコマンドでポッド、サービス、クラスタを削除します。
1 2 3 4 5 |
kubectl delete statefulset payara kubectl delete service payara2 kubectl delete service payara1 kubectl delete service payara gcloud container clusters delete payara-cluster |
また、https://console.cloud.google.com/ の
- [Kubernetes Engine] - [クラスタ]
- [ネットワーク サービス] - [負荷分散]
を表示し、データが残っている場合削除します。
push した docker image が不要な場合、
- [Storage] - [ブラウザ]
まとめ
このように、Payara 5.184 以降では Kubernetes 環境で簡単に Payara のクラスタリングを構築できます。
是非ご活用ください。