RMC接続とは
IBM Powerでは、LPARに割り当てられたリソースの動的変更やLPM (Live Partition Mobility)を行うために、RMC(Resource Monitoring and Control) 接続が必要となります。
RMC接続はHMCからLPARを管理するための接続となっています。
リソースの動的変更はDLPARと呼ばれ、CPUやメモリーの増減やI/Oアダプターの接続・削除をLPARを稼働したまま行うことができます。
Linuxでも利用できるのですが、OpenShiftで使用されるCoreOSでも利用できます。
CoreOSの場合は、OS自身にRMC用のパッケージをインストールするのではなく、RMC接続用のコンテナを起動することでHMCとの通信ができるようになります。
OpenShift環境でのRMC接続
namespaceの作成
RMC用のコンテナを実行するためのnamespace powervm-rmc
を作成します。
oc new-project powervm-rmc
[root@ocp-bastion ~]# oc new-project powervm-rmc
Now using project "powervm-rmc" on server "https://api.ocp.3n7.com:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app rails-postgresql-example
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.43 -- /agnhost serve-hostname
サービスアカウントの作成
RMCはコンテナが稼働するノードのOS部分に影響を与えるため、SCC(Security Context Constrains)設定が必要となります。
そのため、サービスアカウント powervm-rmc
を作成します。
oc create sa powervm-rmc
[root@ocp-bastion ~]# oc create sa powervm-rmc
serviceaccount/powervm-rmc created
SCCの適用
上記で作成したサービスアカウントに権限を付与します。
oc adm policy add-scc-to-user -z powervm-rmc privileged -n powervm-rmc
[root@ocp-bastion ~]# oc adm policy add-scc-to-user -z powervm-rmc privileged -n powervm-rmc
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "powervm-rmc"
デプロイメントの作成
RMC接続用のコンテナを起動するためのデプロイメントを記述します。
以下の内容を含むyamlファイルを作成してください。
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: powervm-rmc
namespace: powervm-rmc
spec:
selector:
matchLabels:
app: powervm-rmc
template:
metadata:
creationTimestamp: null
labels:
app: powervm-rmc
spec:
nodeSelector:
kubernetes.io/arch: ppc64le
node.openshift.io/os_id: rhcos
restartPolicy: Always
serviceAccountName: powervm-rmc
hostNetwork: true
containers:
- name: powervm-rmc
image: "quay.io/powercloud/rsct-ppc64le:latest"
ports:
- name: rmc-tcp
hostPort: 657
containerPort: 657
protocol: TCP
- name: rmc-udp
hostPort: 657
containerPort: 657
protocol: UDP
resources:
requests:
cpu: 100m
memory: 500Mi
limits:
memory: 4Gi
volumeMounts:
- name: lib-modules
mountPath: /lib/modules
readOnly: true
securityContext:
privileged: true
runAsUser: 0
serviceAccount: powervm-rmc
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
デプロイメント適用
最後に、上記で作成したyamlファイルをOpenShiftクラスターに適用します。
oc apply -f powervm-rmc-deployment.yaml
[root@3n7-ocp-bastion ~]# oc apply -f powervm-rmc-deployment.yaml
daemonset.apps/powervm-rmc created
起動確認
デプロイしたPodが稼働しているかを下記のコマンドで確認します。
oc get pod -n powervm-rmc -o wide
すべてのノード (Master, Worker問わず) で稼働していることが下記のように確認できます。
[root@3n7-ocp-bastion ~]# oc get pod -n powervm-rmc -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
powervm-rmc-2g4h2 1/1 Running 1 9d 192.168.60.3 master-2.ocp.3n7.com <none> <none>
powervm-rmc-56qbg 1/1 Running 1 9d 192.168.60.1 master-0.ocp.3n7.com <none> <none>
powervm-rmc-m5vxc 1/1 Running 2 9d 192.168.60.4 worker-0.ocp.3n7.com <none> <none>
powervm-rmc-nds5h 1/1 Running 1 9d 192.168.60.6 worker-2.ocp.3n7.com <none> <none>
powervm-rmc-tlb6q 1/1 Running 1 9d 192.168.60.5 worker-1.ocp.3n7.com <none> <none>
powervm-rmc-xwsgv 1/1 Running 1 9d 192.168.60.2 master-1.ocp.3n7.com <none> <none>
また、画像のようにHMC上でRMC接続がアクティブ表記になっていればHMCへの接続もできている状態です。
Power Virtual Serverの場合は、インスタンス一覧の一番右側 状況
が アクティブになっていればRMC接続が確立されています。