20.5.1 Kubernetesの各リソースオブジェクトの生成
Kubernetesの各リソースオブジェクトを生成する手順を説明します。
生成するリソースオブジェクトは次のとおりです。
-
HADBサーバ用Deployment
-
HADBクライアント用Deployment
-
コンテナ間通信用Service
各リソースオブジェクトの生成は,Kubernetesマスタノード上からkubectlコマンドを使用して実施してください。
kubectlコマンドには次の実行方法がありますが,ここではマニフェストファイルを指定する方法を説明します。
-
リソースオブジェクトの生成方法を定義したマニフェストファイル(yamlファイル)を指定する方法
-
runサブコマンドに直接Dockerイメージを指定する方法
- メモ
-
kubectlコマンドを実行できるユーザで各リソースオブジェクトを生成してください。なお,スーパユーザで実行することを想定しています。異なるユーザで実行する場合は,yamlファイルの格納場所などを適宜変更してください。
(1) マニフェストファイル(yamlファイル)を準備する
リソースオブジェクトの生成方法を定義したマニフェストファイルを準備します。マニフェストファイルは,Kubernetesマスタノードに保存してください。保存先を次に示します。
■マニフェストファイルの保存先
/root/k8s/hadb-k8s-manifest.yaml
マニフェストファイルの例を次に示します。
- メモ
-
マニフェストファイルは,行頭のインデント(文字の開始位置)が厳密に評価されます。注意して作成してください。
■マニフェストファイルの例
apiVersion: v1
kind: Service
metadata:
name: hadb-svc
spec:
type: ClusterIP
selector:
app: hadb-server
ports:
- name: hadb-port
protocol: TCP
port: 23650
targetPort: 23650
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hadb-server
labels:
name: hadb-server
spec:
replicas: 1
selector:
matchLabels:
app: hadb-server
template:
metadata:
labels:
app: hadb-server
annotations:
security.alpha.kubernetes.io/sysctls: net.ipv4.ip_local_port_range=32767 61001
security.alpha.kubernetes.io/unsafe-sysctls: kernel.msgmnb=16386,
kernel.msgmni=736,
kernel.sem=250 32001 32 129,
kernel.shmmax=18446744073692774400,
kernel.shmmni=4097,
kernel.shmall=18446744073692774400,
net.core.somaxconn=129
spec:
# This container starts the HADB server.
containers:
- name: hadb-server
image: hadb-server:$VER
ports:
- containerPort: 23650
protocol: TCP
resources:
requests:
cpu: 2
memory: 8Gi
limits:
cpu: 45
memory: 160Gi
volumeMounts:
- name: dbarea-vol
mountPath: /HADB/db
- name: spool-vol
mountPath: /HADB/server/spool
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "echo Terminating HADB...; sleep 3; runuser adbmanager -c 'adbstop --cancel'; sleep 10"]
volumes:
- name: dbarea-vol
hostPath:
path: /exports/hadb-server/dbarea
type: DirectoryOrCreate
- name: spool-vol
hostPath:
path: /exports/hadb-server/spool
type: DirectoryOrCreate
terminationGracePeriodSeconds: 30
nodeSelector:
kubernetes.io/hostname: host01
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hadb-client
labels:
name: hadb-client
spec:
replicas: 1
selector:
matchLabels:
app: hadb-client
template:
metadata:
labels:
app: hadb-client
annotations:
security.alpha.kubernetes.io/sysctls: net.ipv4.ip_local_port_range=32767 61001
security.alpha.kubernetes.io/unsafe-sysctls: kernel.msgmnb=16386,
kernel.msgmni=736,
kernel.sem=250 32001 32 129,
kernel.shmmax=18446744073692774400,
kernel.shmmni=4097,
kernel.shmall=18446744073692774400,
net.core.somaxconn=129
spec:
containers:
- name: hadb-client
image: hadb-client:$VER
resources:
requests:
cpu: 2
memory: 8Gi
limits:
cpu: 4
memory: 16Gi
$VERは,HADBサーバのバージョンとリリース番号です。
[説明]
上記のマニフェストファイルは,HADB用に作成するKubernetesの各リソースオブジェクトの定義を,すべて1つのファイルに記述しています。
- Kubernetesの各リソースオブジェクト
-
-
HADBサーバ用Deployment
-
HADBクライアント用Deployment
-
コンテナ間通信用Service
-
(2) kubectlコマンドでリソースオブジェクトを生成する
次のコマンドを実行して,HADB用にKubernetesの各リソースオブジェクトを生成してください。
■コマンドの実行例
cd /root/k8s kubectl apply -f ./hadb-k8s-manifest.yaml --record
リソースオブジェクトが正常に生成されている場合,次のような結果が表示されます。
service/hadb-svc created deployment.apps/hadb-server created deployment.apps/hadb-client created
また,次のコマンドを実行すると,生成されたリソースオブジェクトが正しく動作しているかどうかを確認できます。
■コマンドの実行例
kubectl get deployments kubectl get pods kubectl get services hadb-svc
リソースオブジェクトが正しく動作している場合,次のような結果が表示されます。
■コマンドの実行結果の例
NAME READY UP-TO-DATE AVAILABLE AGE hadb-client 1/1 1 1 14s hadb-server 1/1 1 1 14s NAME READY STATUS RESTARTS AGE hadb-client-6fbb9fbb97-4xvkr 1/1 Running 0 19s hadb-server-5fd5cc7fb8-8jv58 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hadb-svc ClusterIP 10.233.47.129 <none> 23650/TCP 28s
なお,各列に表示される値は実行環境によって異なります。また,kubectlのdescribeサブコマンドを使用すると,各リソースオブジェクトのさらに詳細な情報を参照できます。