Payara 5.184 を Google Kubernetes Engine(GKE) から利用する
この 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 とします。
プロジェクトを作成後、以下のコマンドを実行します。
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 します。
docker tag mypayara gcr.io/my-project/mypayara:5.184
gcloud docker -- push gcr.io/my-project/mypayara:5.184
3. クラスタを作成します。
gcloud container clusters create payara-cluster --zone us-west1-c --num-nodes=2 --machine-type=n1-standard-1
ノード数 = 2, インスタンスタイプ = n1-standard-1 のクラスタを作成します。
以下のように表示されれば完了です。
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
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
kubectl apply -f rbac.yaml
以下のように表示されれば完了です。
clusterrolebinding.rbac.authorization.k8s.io "default-cluster" created
5. Service を作成します。
payara-service.yaml
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
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
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 へアクセスするサービスになります。
kubectl apply -f payara-servide.yaml
kubectl apply -f payara-servide1.yaml
kubectl apply -f payara-servide2.yaml
以下のように表示されれば完了です。
service "payara" created
service "payara1" created
service "payara2" created
以下のコマンドでサービスの一覧を表示できます。
$ 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
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 はクラスタ作成時に指定したインスタンスタイプに応じて適宜設定します。
kubectl apply -f payara-statefulset.yaml
以下のように表示されれば完了です。
statefulset.apps "payara" created
以下のコマンドでポッドの一覧を表示できます。
$ 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 にならない場合、以下のコマンドでログを表示しエラーを確認できます。
kubectl logs payara-0
kubectl logs payara-1
また以下のコマンドで bash を起動し、各種コマンドを実行できます。デバッグ時にご利用ください。
kubectl exec -it payara-0 -- /bin/bash
kubectl exec -it payara-1 -- /bin/bash
7. Payara の管理コンソールにアクセスし、Kubernetes Cluster Mode を設定します。
以下のコマンドでエンドポイント IP を確認します。
$ 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. 後片付けをします。
以下のコマンドでポッド、サービス、クラスタを削除します。
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 のクラスタリングを構築できます。
是非ご活用ください。