ウェブサイト検索

Kubernetesの静的ポッド


Kubernetesの静的ポッド

このページで

  1. 前提条件
  2. 私たちは何をしますか?
  3. 静的ポッドを作成する
  4. 結論

ステティックポッドはkubeletによって直接管理されており、APIサーバーはこれらのポッドに対して制御を持っていません。kubeletは各ステティックポッドを監視し、クラッシュした場合は再起動する責任があります。ノード上で実行されているステティックポッドはAPIサーバーで表示されますが、APIサーバーによって制御されることはありません。ステティックポッドには関連するレプリケーションコントローラーがなく、kubeletサービス自体がそれを監視し、クラッシュした場合は再起動します。ステティックポッドに対するヘルスチェックはありません。kubeletプロセスは、ステティックポッドのために指定された特定のディレクトリを監視します。

Static Pods についてもっと知りたい場合は、こちらの Kubernetes の公式ページをご覧ください。

この記事では、kubeletがマニフェストを読み込むデフォルトの場所に保存されたファイルから静的ポッドを作成する手順と、デフォルトの場所を他のディレクトリに変更して、そこから静的ポッドが作成される様子を見ていきます。ワーカーノードで静的ポッドを作成します。

前提条件

  1. 少なくとも1つのワーカーノードを持つKubernetesクラスター。
    Kubernetesクラスターの作成方法を学びたい場合は、こちらをクリックしてください。このガイドでは、AWSのUbuntu 18.04 EC2インスタンス上に1つのマスターと2つのノードを持つKubernetesクラスターを作成するのに役立ちます。

私たちは何をしますか?

  1. 静的ポッドを作成する

静的ポッドを作成する

クラスタ内のノードとポッドの詳細を取得するために、マスターノードから以下のコマンドを実行してください。

$master kubectl  get nodes
$master kubectl  get pods

ポッドの一部として実行されているコンテナを確認できます。

$worker docker ps
$worker docker ps -a

さて、ワーカーノードにログインして、静的ポッドマニフェストのデフォルトパスに以下の内容を持つ新しいファイルを作成してください。

$worker vim /etc/kubernetes/manifests/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

デフォルトの静的ポッドマニフェストの場所でポッド定義を作成すると、APIサーバーに制御されていないポッドが作成されます。

マスターノードからすべての名前空間のポッドをリストするために、次のコマンドで新しく作成されたポッドを確認できます。

$master kubectl  get pods
$master kubectl  get pods --all-namespaces

Podの一部として作成されたコンテナを確認するには、ワーカーノードで次のコマンドを実行してください。

$worker docker ps
$worker docker ps -a

私たちは、kubeletがマニフェストを読み込むデフォルトの場所を変更することもできます。

静的ポッドのマニフェストを保存する新しいフォルダーを作成してください。

ここでは「/etc/kubelet.d/」を作成しています。

$worker mkdir -p /etc/kubelet.d/

私たちが作成したディレクトリにポッド定義ファイルを作成してください。

$worker vim /etc/kubelet.d/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
  name: static-web-2
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

Kubeletが静的ポッドのマニフェストを読み込むデフォルトのパスを変更するには、/var/lib/kubelet/config.yamlファイルを編集し、"staticPodPath"の値を"staticPodPath=/etc/kubelet.d"に変更します。

設定が完了したら、Kubeletサービスを再起動します。

$worker systemctl restart kubelet

サービスが再起動されるとすぐに、Kubeletは新しい場所を検出し、その場所からマニフェストを読み取り、ポッドを作成します。

ポッドが作成されたかどうかを確認してください。

$master kubectl  get pods

次のコマンドを使用して、ワーカーノードでPodの一部として作成されたコンテナを確認してください。

$worker docker ps

結論

この記事では、静的ポッドを作成する手順と、静的ポッドのマニフェストのデフォルトディレクトリを変更するためにKubeletで必要な構成変更を見ました。

関連記事: