LoginSignup
0

posted at

Red Hat OpenShift on IBM Cloud(ROKS)で、ワーカーノードのカーネルパラメータを変更する

注意

マニュアルにも記載されているとおり、デフォルトの設定を変更することで、サポートが得られなくなる可能性がありますので、ご注意ください。(変更により生じた問題の解析等は行えなかったり、その可能性を排除するために、デフォルトの状態に戻しても同じ問題が再現することの確認を求められる可能性があります)

デフォルトの設定を変更する場合は、お客様自身の責任で行ってください。 変更された設定に対してテストを実行すること、および環境内の設定変更が原因で発生する可能性がある障害についてはお客様が責任を持ちます。

とはいえ変更しないとPodが起動しない状況になってしまったので、試してみました。

参照した情報

Tuning performance - IBM Cloud Docs

確認した環境

  • Red Hat OpenShift on IBM Cloud(ROKS)
    • 4.10
    • ワーカープールはRHEL8に更新済み
    • ワーカーのバージョン:4.10.50_1554_openshift

経緯

とあるPod(SonarQube)が以下のようなエラーで起動してくれなかったので調査。

2023.02.04 04:55:10 INFO  es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [255732] is too low, increase to at least [262144]

デバッグPodで侵入して確認すると、確かに小さい。

$ oc debug node/[ノードのIPアドレス]
# cat /proc/sys/vm/max_map_count
255732

ここでsysctlコマンドで変更しても、ノードのリブートやリプレースがかかると元に戻ってしまうので、永続的に設定を反映させる方法が必要になります。

冒頭のリンク先の後半にあるinitContainerによる方法を試します。(Node Tuning Operatorの方法は、なぜかうまくいきませんでした・・・)

マニュアルにあるサンプルを編集したファイルを用意します。

worker-node-kernel-settings.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kernel-optimization
  namespace: kube-system
  labels:
    tier: management
    app: kernel-optimization
spec:
  selector:
    matchLabels:
      name: kernel-optimization
  template:
    metadata:
      labels:
        name: kernel-optimization
    spec:
      hostNetwork: true
      hostPID: true
      hostIPC: true
      initContainers:
        - command:
            - sh
            - -c
            - sysctl -w vm.max_map_count=262144;
          image: alpine:3.6
          imagePullPolicy: IfNotPresent
          name: sysctl
          resources: {}
          securityContext:
            privileged: true
            capabilities:
              add:
                - NET_ADMIN
          volumeMounts:
            - name: modifysys
              mountPath: /sys
      containers:
        - resources:
            requests:
              cpu: 0.01
          image: alpine:3.6
          name: sleepforever
          command: ["/bin/sh", "-c"]
          args:
            - >
              while true; do
                sleep 100000;
              done
      volumes:
        - name: modifysys
          hostPath:
            path: /sys

そして適用します。

$ oc apply -f  worker-node-kernel-settings.yaml 
daemonset.apps/kernel-optimization created

しばらくすると反映されたようで、CrashLoopBackOffだったPodも無事起動してきました。

試しに、ノードをリプレースしてみても、デフォルトの設定が更新されており、問題なく起動してくることが確認出来ました。

戻し方

マニュアルにあるコマンドではネームスペースの指定がありませんので、-n kube-systemを追加して削除を実行し、その後すべてのノードを順次リブートします。

$ oc delete ds kernel-optimization -n kube-system
daemonset.apps "kernel-optimization" deleted

おしまい

ElasticSearchでも同様の事象が多くあるようですが、サポートの点があるので、そこを十分ご理解いただきつつ、ご参考まで。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0