検索

第34章 sysctl

download PDF

34.1. 概要

sysctl 設定は Kubernetes 経由で公開され、ユーザーがコンテナー内の namespace の特定のカーネルパラメーターをランタイム時に変更できるようにします。 namespace を使用する sysctl のみを Pod 上で独立して設定できます。sysctl に namespace が使用されていない場合 (この状態は ノードレベル と呼ばれる)、OpenShift Container Platform 内で設定することはできません。さらに 安全 とみなされる sysctl のみがデフォルトでホワイトリストに入れられます。他の 安全でない sysctl はノードで手動で有効にし、ユーザーが使用できるようにできます。

34.2. sysctl について

Linux では、管理者は sysctl インターフェースを使ってランタイム時にカーネルパラメーターを変更することができます。パラメーターは /proc/sys/ 仮想プロセスファイルシステムで利用できます。これらのパラメーターは以下を含む各種のサブシステムを対象とします。

  • カーネル (共通のプレフィックス: kernel.)
  • ネットワーク (共通のプレフィックス: net.)
  • 仮想メモリー (共通のプレフィックス: vm.)
  • MDADM (共通のプレフィックス: dev.)

追加のサブシステムについては、カーネルのドキュメントで説明されています。すてのパラメーターの一覧を取得するには、以下を実行できます。

$ sudo sysctl -a

34.3. namespace を使用した sysctl vs ノードレベルの sysctl

現時点の Linux カーネルでは、数多くの sysctl に namespace が使用 されています。これは、それらをノードの各 Pod に対して個別に設定できることを意味します。 namespace の使用は、sysctl を Kubernetes 内の Pod 環境でアクセス可能にするための要件になります。

以下の sysctl は namespace を使用するものとして知られている sysctl です。

  • kernel.shm*
  • kernel.msg*
  • kernel.sem
  • fs.mqueue.*
  • net.*

namespace が使用されていない sysctl は ノードレベル と呼ばれており、クラスター管理者がノードの基礎となる Linux ディストリビューションを使用 (例: /etc/sysctls.conf を使用) するか、または特権付きコンテナーで DaemonSet を使用することによって手動で設定する必要があります。

注記

特殊な sysctl が設定されたノードにテイントのマークを付けることを検討してください。それらの sysctl 設定を必要とする Pod のみをそれらのノードにスケジュールします。Kubernetes の テイントおよび容認 (Toleration) 機能を使用してこれを実施します。

34.4. 安全 vs 安全でない sysctl

sysctl は 安全な および 安全でない sysctl に分類されます。適切な namespace の設定に加えて、安全な sysctl は同じノード上の Pod 間で適切に分離する必要があります。つまり、Pod ごとに安全な sysctl を設定することにについて以下を留意する必要があります。

  • この設定はノード上の他の Pod に影響を与えないものである。
  • この設定はノードの正常性に与えることを許可しないものである。
  • この設定は Pod のリソース制限を超える CPU またはメモリーリソースの取得を許可しないものである。

namespace を使用した sysctl は必ずしも常に安全であると見なされる訳ではありません。

現時点で、OpenShift Container Platform は以下の sysctl を安全なセットでサポートするか、またはホワイトリスト化します。

  • kernel.shm_rmid_forced
  • net.ipv4.ip_local_port_range
  • net.ipv4.tcp_syncookies

この一覧は、kubelet が分離メカニズムのサポートを強化する今後のバージョンでさらに拡張されます。

すべての安全な sysctl はデフォルトで有効にされます。すべての安全でない sysctl はデフォルトで無効にされ、ノードごとにクラスター管理者によって手動で許可される必要があります。無効にされた安全でない sysctl が設定された Pod はスケジュールされますが、起動に失敗します。

警告

安全でないという性質上、安全でない sysctl は各自の責任で使用されます。場合によっては、コンテナーの正しくない動作やリソース不足、またはノードの完全な破損などの深刻な問題が生じる可能性があります。

34.5. 安全でない sysctl の有効化

上記の警告を念頭に置いた上で、クラスター管理者は、高パフォーマンスまたはリアルタイムのアプリケーション調整などの非常に特殊な状況で特定の安全でない sysctl を許可することができます。

安全でない sysctl を使用する必要がある場合、クラスター管理者はノードでそれらを個別に有効にする必要があります。 namespace を使用した sysctl のみをこの方法で有効にできます。

  1. 安全ではない sysctl を、「ノードリソースの設定」で説明されているように、ノード設定マップファイルの kubeletArguments\ パラメーターの値として使用するように指定します。

    kubeletArguments:
      experimental-allowed-unsafe-sysctls:
        - "kernel.msg*,net.ipv4.route.min_pmtu"
  2. 変更を適用するためにノードサービスを再起動します。

    # systemctl restart atomic-openshift-node

34.6. Pod 用の sysctl の設定

sysctl はアノテーションを使用して Pod に設定されます。それらは同じ Pod のすべてのコンテナーに適用されます。

以下は、安全な sysctl および安全でない sysctl の各種のアノテーションを使用した例です。

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
  annotations:
    security.alpha.kubernetes.io/sysctls: kernel.shm_rmid_forced=1
    security.alpha.kubernetes.io/unsafe-sysctls: net.ipv4.route.min_pmtu=1000,kernel.msgmax=1 2 3
spec:
  ...
注記

安全でない sysctl が指定された Pod は、それらの 2 つの安全でない sysctl を明示的に有効にしていないノードでの起動に失敗します。ノードレベルの sysctl の場合のようにそれらを Pod を正しいノードにスケジュールするには、テイントおよび容認機能またはノードのラベルを使用します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.