Chuyển đến nội dung chính

レッスン 3: Linux OS の準備とシステムチューニング

Ubuntu 24.04/RHEL 9 をインストールし、K8 のカーネル パラメータ (net.bridge、ip_forward、inotify) を構成し、スワップをオフにし、chrony/NTP、ファイアウォール ルール、SSH 強化を構成し、K8 をインストールする前にすべてのノードを準備します。

🔒 DevSecOps — レッスン 3 レッスン 3: Linux OS とシステム チューニングの準備

Kubernetes HA を使用してマイクロサービスをオンプレミスにデプロイ

パート 1: プラットフォームとオンプレミスのインフラストラクチャ設計

xdev.asia_

🎯 レッスンの目的__HTMLTAG_66___

このレッスンを完了すると、次のことができるようになります:

  • ✅ すべてのノードに Ubuntu 24.04 LTS をインストールして更新します
  • ✅ Kubernetes に必要なカーネル パラメーターを構成する
  • ✅ スワップを永久にオフにし、その理由を理解する
  • ✅ クラスター全体の NTP 同期をセットアップ__HTMLTAG_77___
  • ✅ SSH の強化とファイアウォール ルールの構成
  • ✅ ホスト名、ホスト ファイル、DNS 解決を標準化

パート 1: UBUNTU 24.04 LTS のインストール

1.1. Ubuntu 24.04 LTS を選ぶ理由

  • LTS (長期サポート): 12 年間サポート (Ubuntu Pro では 2036 年まで)
  • カーネル 6.8+: eBPF (Cilium)、cgroup v2、io_uring
  • の優れたサポート
  • systemd 255+: cgroup v2 管理の改善
  • 幅広い採用: K8s、Ceph、CNCF ツールで徹底的にテスト済み

⚠️ 注: RHEL 9 / Rocky Linux 9 は企業にも適しています。このガイドでは Ubuntu を使用しますが、異なる場合は RHEL コマンドに注意してください。

1.2.基本設定

___コードブロック_0___

パート 2: ホスト名と DNS 解決__HTMLTAG_114___

2.1.各ノードにホスト名を設定

___コードブロック_1___

2.2.すべてのノードで /etc/hosts を構成

___コードブロック_2___

💡 ヒント: 運用環境では、/etc/hosts の代わりに内部 DNS サーバー (CoreDNS または BIND) を使用します。このレッスンでは、わかりやすくするために /etc/hosts を使用します。


パート 3: KUBERNETES のカーネルパラメータ

3.1.カーネルをカスタマイズする必要があるのはなぜですか?

_Kubernetes では、いくつかのカーネル機能を有効にする必要があります:

パラメータ 値 理由
net.bridge.bridge-nf-call-iptables__HTMLTAG_145___ 1 iptables ルールによるトラフィックのブリッジ (サービスに必要)
net.bridge.bridge-nf-call-ip6tables 1 ip6tables 経由の IPv6 ブリッジ トラフィック__HTMLTAG_157___
net.ipv4.ip_forward 1 インターフェイス間でパケットを転送する (ポッド ネットワーキング)
net.ipv6.conf.all.forwarding 1 IPv6 転送 (デュアルスタックを使用している場合)
fs.inotify.max_user_instances 8192 多くのコンテナでは inotify (ファイル監視) が必要
fs.inotify.max_user_watches 524288 ユーザーごとの Inotify ウォッチ

3.2.カーネルパラメータの構成

___コードブロック_3___

コードブロック_4


パート 4: スワップをオフにする

4.1.スワップをオフにする必要があるのはなぜですか?

Kubelet スワップを無効にする必要があります__HTMLTAG_203___ (ただし、K8s 1.28 以降はベータ版スワップ サポートを備えています)。理由:

  • スワップによりコンテナに__HTMLTAG_207___予測不能な遅延が発生
  • K8s スケジューラは 物理メモリ___HTMLTAG_212__HTMLTAG_213___ に基づいてリソースを計算します
  • 非表示のスワップ__HTMLTAG_215___OOMの問題、デバッグが困難
  • etcd とデータベースのスワップ時のパフォーマンスが非常に低下する__HTMLTAG_219___

4.2.スワップを完全にオフにする

___コードブロック_5___

パート 5: NTP 時刻同期

5.1. NTP が非常に重要なのはなぜですか?

  • etcd: リーダーの選出にはタイムスタンプを使用します。クロック スキューが必要です < 500ms
  • TLS 証明書: 時間に基づいて検証し、時計が間違っています → 証明書が無効です
  • ログの相関: ログのタイムスタンプはノード間で一致する必要があります
  • _Ceph: MON クォーラム要求クロック スキュー < 50ms

5.2. Chrony 構成 (NTP)

___コードブロック_6___

パート 6: SSH 強化

6.1.安全な SSH 構成

___コードブロック_7___

6.2. SSH キー認証のセットアップ

___コードブロック_8___

パート 7: ファイアウォール設定

7.1。コントロール プレーン ノードの UFW

___コードブロック_9___

7.2.ワーカー ノードの UFW

___コードブロック_10___

💡 代替: 多くの実稼働環境では、UFW の代わりに nftables または iptables を直接使用します。 Cilium は、ノードレベルのファイアウォールをホスト ポリシーで置き換えることもできます。


パート 8: その他のカスタマイズ

8.1。無人アップグレードを無効にする (本番環境)

___コードブロック_11___

8.2。 ulimits

を構成する ___コードブロック_12___

8.3.透明な巨大ページを無効にする

___コードブロック_13___

8.4。 cgroup v2 の検証

___コードブロック_14___

パート 9: 自動化 — すべてのノードを準備するスクリプト

9.1。ノード準備スクリプト (すべての K8s ノードで実行)

___コードブロック_15___

9.2.すべてのノードでスクリプトを実行

___コードブロック_16___

パート 10: 検証チェックリスト

10.1。各ノードのチェックリスト

___コードブロック_17___

💡 重要なポイント

  1. カーネル モジュール K8 ポッド ネットワーキングにはオーバーレイと br_netfilter が必要
  2. ip_forward = 1 により、ポッド間のトラフィックがノード
  3. を通過できるようになります。
  4. スワップは永久にオフにする必要があります — スワップがオンの場合、kubelet は起動を拒否します
  5. NTP 同期 は etcd、TLS 証明書、および Ceph にとって重要です
  6. _SSH 強化: キーベースの認証のみ、パスワード ログインを無効にする
  7. 自動化スクリプト は、すべてのノードを一貫して準備するのに役立ちます

🎯 演習

演習 1: すべてのノードを準備する

  • 7 つの VM (またはサーバー) すべてで prepare-k8s-node.sh を実行
  • 各ノードで verify-node.sh を実行し、すべてのチェックが PASS
  • であることを確認します。
  • 1 つのマスターと 1 つのワーカーの verify-node.sh の結果のスクリーンショット

演習 2: NTP のベンチマーク

  • すべてのノード間のクロック オフセットを確認します: chronycsources -v
  • オフセットを確保 < 1ms giữa tất cả nodes
  • NTP を中断し、時間を変更して、chrony の再同期にかかる時間を確認してください

_演習 3: RHEL 9 バリアント__HTMLTAG_344___
  • prepare-k8s-node.sh を RHEL 9 / Rocky Linux 9 用に書き直す
  • apt → dnf、ufw → firewalld を置換
  • 1 台の VM でテストして確認

📚 次の投稿

__HTMLTAG_357___レッスン 4: Kubernetes API サーバーのロード バランサー では、keepalived + HAProxy をインストールして K8s API サーバーの仮想 IP を作成し、コントロール プレーン アクセスの HA を確保します。