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