はじめに
この実験では、Kubernetes Pod 内でコンテナを実行する方法を学びます。Pod は、Kubernetes で最も小さくシンプルな単位であり、1 つ以上のコンテナを含むことができます。Pod 内でコンテナを実行することには、より良いリソースの利用、スケーリングの容易さ、およびより効率的な展開など、多くの利点があります。
この実験では、Kubernetes Pod 内でコンテナを実行する方法を学びます。Pod は、Kubernetes で最も小さくシンプルな単位であり、1 つ以上のコンテナを含むことができます。Pod 内でコンテナを実行することには、より良いリソースの利用、スケーリングの容易さ、およびより効率的な展開など、多くの利点があります。
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量な Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/project
Minikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube status
kubelet
や apiserver
などのコンポーネントが Running
と表示されていることを確認します。minikube start
を再度実行します。Minikube の起動に問題がある場合は、必要に応じて minikube delete
を使用して環境をリセットします。
最初のステップは、単一コンテナ付きの 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 を作成します。
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 イメージを実行してコンソールにメッセージを表示します。
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 を作成します。
4 つ目のステップは、ConfigMap を使用して Pod を作成することです。ConfigMap は Kubernetes のリソースで、アプリケーションコードとは別に構成データ(環境変数や設定ファイルなど)を保存することができます。この分離により、コンテナを再構築することなく構成を変更することが容易になります。
これを簡単な手順に分解してみましょう。
まず、ConfigMap を作成します:
kubectl create configmap my-config --from-literal=MY_ENV_VAR=labex
このコマンドは、my-config
という名前の ConfigMap を作成し、単一のキーバリューペアを保存します。
ConfigMap が作成されたことを確認し、その内容を表示するには、次のコマンドを使用します。
kubectl get configmap my-config -o yaml
次に、この 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
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、および永続ボリュームを作成する方法も学びました。これらは、より堅牢で拡張可能なアプリケーションを構築するのに役立つ強力な概念です。