Pod 内でのコンテナの実行

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Kubernetes Pod 内でコンテナを実行する方法を学びます。Pod は、Kubernetes で最も小さくシンプルな単位であり、1 つ以上のコンテナを含むことができます。Pod 内でコンテナを実行することには、より良いリソースの利用、スケーリングの容易さ、およびより効率的な展開など、多くの利点があります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/initialization -.-> lab-14998{{"Pod 内でのコンテナの実行"}} kubernetes/get -.-> lab-14998{{"Pod 内でのコンテナの実行"}} kubernetes/create -.-> lab-14998{{"Pod 内でのコンテナの実行"}} kubernetes/run -.-> lab-14998{{"Pod 内でのコンテナの実行"}} kubernetes/apply -.-> lab-14998{{"Pod 内でのコンテナの実行"}} kubernetes/config -.-> lab-14998{{"Pod 内でのコンテナの実行"}} end

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 を作成することです。これを行うには、Pod とそのコンテナを定義する YAML ファイルを作成します。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
spec:
  containers:
    - name: my-container
      image: nginx

上記のコードを /home/labex/project/pod-single-container.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f /home/labex/project/pod-single-container.yaml

このコマンドは、Nginx イメージを実行する my-container という単一コンテナを持つ my-pod-1 という名前の Pod を作成します。

複数コンテナ付きの Pod を作成する

2 番目のステップは、複数コンテナ付きの Pod を作成することです。これを行うには、前の YAML ファイルを変更して別のコンテナを追加します。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-2
spec:
  containers:
    - name: my-container
      image: nginx
    - name: my-sidecar
      image: busybox
      command: ["sh", "-c", "echo Hello from the sidecar! && sleep 3600"]

上記のコードを /home/labex/project/pod-multiple-containers.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f /home/labex/project/pod-multiple-containers.yaml

このコマンドは、2 つのコンテナを持つ my-pod-2 という名前の Pod を作成します。最初のコンテナは Nginx イメージを実行し、2 番目のコンテナは BusyBox イメージを実行してコンソールにメッセージを表示します。

環境変数を持つ Pod を作成する

3 番目のステップは、環境変数を持つ Pod を作成することです。これを行うには、YAML ファイルを変更して Nginx コンテナに環境変数を追加します。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-3
spec:
  containers:
    - name: my-container
      image: nginx
      env:
        - name: MY_ENV_VAR
          value: "Hello World!"

上記のコードを /home/labex/project/pod-env-vars.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f /home/labex/project/pod-env-vars.yaml

このコマンドは、Nginx イメージを実行し、MY_ENV_VAR という名前の環境変数を持ち、値が Hello World! である my-container という単一コンテナを持つ my-pod-3 という名前の Pod を作成します。

ConfigMap を使用して Pod を作成する

4 つ目のステップは、ConfigMap を使用して Pod を作成することです。ConfigMap は Kubernetes のリソースで、アプリケーションコードとは別に構成データ(環境変数や設定ファイルなど)を保存することができます。この分離により、コンテナを再構築することなく構成を変更することが容易になります。

これを簡単な手順に分解してみましょう。

  1. まず、ConfigMap を作成します

    kubectl create configmap my-config --from-literal=MY_ENV_VAR=labex

    このコマンドは、my-config という名前の ConfigMap を作成し、単一のキーバリューペアを保存します。

    • キー: MY_ENV_VAR
    • 値:labex

    ConfigMap が作成されたことを確認し、その内容を表示するには、次のコマンドを使用します。

    kubectl get configmap my-config -o yaml
  2. 次に、この ConfigMap を使用する Pod を作成します

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-4
    spec:
      containers:
        - name: my-container
          image: nginx
          envFrom:
            - configMapRef:
                name: my-config

    この YAML を /home/labex/project/pod-configmap.yaml に保存し、適用します。

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

これにより、ConfigMap に保存した構成値にアクセスできる Pod が作成されます。この値は、コンテナ内の環境変数として利用できます。これを確認するには、次のコマンドを実行します。

kubectl exec -it my-pod-4 -- env | grep MY_ENV_VAR

永続ボリュームを持つ Pod を作成する

5 番目のステップは、永続ボリューム (PV) と永続ボリュームクレーム (PVC) を持つ Pod を作成することです。PV と PVC は、Pod の再起動にまたがってデータを永続的に保存およびアクセスするために使用されます。

これを行うには、まず PV を作成します。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

上記のコードを /home/labex/project/pv.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f /home/labex/project/pv.yaml

このコマンドは、容量 1Gi とホスト パス /mnt/data を持つ my-pv という名前の PV を作成します。

次に、PV から 1Gi のストレージを要求する PVC を作成します。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

上記のコードを /home/labex/project/pvc.yaml という名前のファイルに保存し、次のコマンドを実行します。

kubectl apply -f /home/labex/project/pvc.yaml

このコマンドは、1Gi のストレージを要求する my-pvc という名前の PVC を作成します。

最後に、YAML ファイルを変更して、Nginx コンテナにボリュームとボリューム マウントを追加します。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-5
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /mnt/data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

上記のコードを /home/labex/project/pod-pv.yaml という名前のファイルに保存し、次のコマンドを実行します。

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

このコマンドは、Nginx イメージを実行し、my-pvc という名前の PVC によってバックアップされた /mnt/data にボリューム マウントを持つ my-container という単一コンテナを持つ my-pod-5 という名前の Pod を作成します。

まとめ

おめでとうございます!この実験を完了し、Kubernetes Pod 内でコンテナを実行する方法を学びました。また、複数コンテナ付きの Pod、環境変数、ConfigMaps、および永続ボリュームを作成する方法も学びました。これらは、より堅牢で拡張可能なアプリケーションを構築するのに役立つ強力な概念です。