DaemonSet を使用した Pod の実行

KubernetesBeginner
オンラインで実践に進む

はじめに

Kubernetes における DaemonSet は、クラスター内のすべてのノードで Pod のコピーが実行されることを保証するコントローラーの一種です。この実験では、クラスター内の全ノードで Pod のレプリカを実行するための DaemonSet を作成するプロセスを学びます。

Minikube クラスターの起動

リソースを作成する前に、実行中の Kubernetes クラスターが必要です。Minikube は、ローカルマシン上で動作する軽量な Kubernetes 環境です。

  1. 作業ディレクトリへの移動:

    ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。

    cd /home/labex/project
    
  2. Minikube の起動:

    Minikube を起動して Kubernetes クラスターを初期化します。

    minikube start
    
    • このコマンドにより、ローカルマシン上にシングルノードの Kubernetes クラスターがセットアップされます。
    • システムのパフォーマンスによっては、Minikube の起動に数分かかる場合があります。
  3. Minikube の動作確認:

    Minikube クラスターの状態を確認します。

    minikube status
    
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認してください。
    • クラスターが実行されていない場合は、再度 minikube start を実行してください。

Minikube の起動で問題が発生した場合は、必要に応じて minikube delete を使用して環境をリセットしてください。

Pod の作成

レプリカのテンプレートとして使用するシンプルな Pod を作成します。/home/labex/project/myapp-pod.yaml という名前のファイルを作成し、以下の内容を記述してください。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: myapp-container
      image: nginx
      ports:
        - containerPort: 80

以下のコマンドを使用して Pod を作成します。

kubectl apply -f /home/labex/project/myapp-pod.yaml

DaemonSet の作成

クラスター内のすべてのノードで myapp-pod のレプリカを実行するための DaemonSet を作成します。/home/labex/project/myapp-daemonset.yaml という名前のファイルを作成し、以下の内容を記述してください。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: nginx
          ports:
            - containerPort: 80

この DaemonSet は myapp-pod をレプリカのテンプレートとして使用し、matchLabels セレクターを app: myapp に設定することで、すべてのノードでレプリカが確実に作成されるようにしています。

以下のコマンドを使用して DaemonSet を作成します。

kubectl apply -f /home/labex/project/myapp-daemonset.yaml

DaemonSet の確認

DaemonSet が作成され、myapp-pod のレプリカがすべてのノードで実行されていることを確認します。以下のコマンドでクラスター内のノードを一覧表示します。

kubectl get nodes

以下のコマンドを使用して、DaemonSet によって作成された Pod を一覧表示します。

kubectl get pods -l app=myapp

クラスター内の各ノードに対して 1 つずつ Pod が表示されるはずです。

DaemonSet の更新

myapp-container が使用するイメージを変更するために DaemonSet を更新します。/home/labex/project/myapp-daemonset-update.yaml という名前のファイルを作成し、以下の内容を記述してください。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp-daemonset
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp-container
          image: busybox
          command: ["sleep", "3600"]

この更新された DaemonSet は、myapp-container が使用するイメージを busybox に変更し、コマンドを sleep 3600 に設定します。

以下のコマンドを使用して DaemonSet を更新します。

kubectl apply -f /home/labex/project/myapp-daemonset-update.yaml

DaemonSet が更新され、新しいイメージで myapp-pod のレプリカが実行されていることを確認します。以下のコマンドを使用して、DaemonSet によって作成された Pod を一覧表示します。

kubectl get pods -l app=myapp

更新されたイメージで新しい Pod が作成されていることが確認できるはずです。

まとめ

この実験では、Kubernetes において DaemonSet を使用し、クラスター内のすべてのノードで Pod のレプリカを実行する方法を学びました。