目次
Kubernetes導入で押さえておきたいコンテナ管理のポイントと、トラブルシューティングを解説
Kubernetes を使うと、コンテナを効率的に管理できます。しかし、「Kubernetes のコンテナとは何か?」「Pod との違いは?」「どのように運用すればいいのか?」などの前提知識について疑問を持つ方も多いでしょう。
Kubernetes はコンテナの pod という単位で管理し、スケールアップや自己修復などの機能を付加できるオーケストレーションツールです。本記事で pod へのコンテナ作成方法や、コンテナ作成時のトラブル解消を解説します。
1. そもそもDockerコンテナとは?
Kubernetes は、コンテナ化されたアプリケーションの管理・運用を自動化し、効率的なアプリケーションのデプロイやスケーリングを実現するプラットフォームです。前提知識となるコンテナについて理解すると、 Kubernetes によるコンテナオーケストレーションの意味を理解しやすくなります。
コンテナ型仮想化がなぜ必要か
従来、仮想化といえば物理サーバー上で仮想マシン( VM )を動作させる「仮想マシン型仮想化」でした。しかし、 VM はハイパーバイザーを通じてゲスト OS を動作させるため、以下の課題があります。
- ゲストOSの分だけリソースの消費が大きい
- 起動に時間がかかるため、開発・運用の柔軟性が低い
これらの課題を解消するためにコンテナ型仮想化が注目を集めました。コンテナ型仮想化は、ホスト OS のカーネルを共有しながら、アプリケーションごとに独立した環境を提供する技術です。コンテナ型仮想化は以下のメリットがあります。
- 軽量性:ゲストOSが不要でリソースの消費が小さい
- 高速な起動:仮想マシンと比べて短時間で立ち上がる
- 移植性の向上:どこでも同じ環境でアプリケーションを実行可能
この技術の代表格となるツールが Docker です。Docker を用いることで開発環境の一貫性が保たれ、デプロイが容易になります。 Docker を用いて作るコンテナ環境を Docker コンテナ、あるいは単にコンテナと呼びます。
Kubernetesとコンテナの関係性
Docker により、コンテナを活用したアプリケーションの開発・運用が普及しました。しかし、コンテナだけではスケーリングや自己修復など本番環境で多数のコンテナを効率よく管理できない課題があります。これを実現するために登場したのが Kubernetes です。Kubernetes は、コンテナを効率的に管理するための仕組みです。
Kubernetes にはコンテナを実践環境で利用するためにさまざまな機能が用意されており、導入することで、次のようなメリットを享受できます。
- コンテナの自動スケーリング(負荷に応じた増減)
- コンテナの監視と自己回復(異常時の再起動など)
- 負荷分散とサービスディスカバリ
Dockerがアプリ開発の柔軟性を高め、 Kubernetes がその運用管理を支えることで、現代のクラウドネイティブなアーキテクチャが実現されています。
2. Kubernetesにおけるコンテナ管理
先述してきたようにKubernetes はコンテナを pod という単位で管理します。pod は replicaset や deployment という単位で管理して、スケーリングや自動修復の機能を実現します。
コンテナ単体の作成は推奨されない
pod を通さずにコンテナだけを作成することは可能ですが、コンテナを単体で作ると Kubernetes の管理下に置けず、スケジューリングや自己修復などができないため、ベストプラクティスにおいては推奨されません。スケーリングや自己修復といったKubernetesの利点を活かすには、必ずPodを作成しましょう。
Podの詳細については、以下の記事も参考にしてください。
※参考:アプリケーションの柔軟性、拡張性を向上させる「Kubernetes Pod」について解説
Kubernetesの基本的なコンテナの作成方法
コンテナをPodとして作成するには、次の2つの方法があります。
YAML(マニフェストファイル)を使う方法(推奨)
以下のようなマニフェストファイル( YAML )を用意し、kubectl apply -fで適用します。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80
spec 部分の下にある containers の部分で pod 内に作成するコンテナの情報を記入します。1 つの pod 内に複数のコンテナを作成することも可能です。yaml ファイルを作成したら、以下のコマンドで podが作成されます。
kubectl apply -f nginx-pod.yaml
上記によって nginx-pod という pod 内に nginx-container というコンテナが作成されます。
kubectlコマンド
kubectl runコマンドでもpodの作成が可能です。以下で例を示します。
kubectl run nginx-pod --image=nginx
上記の方が yaml ファイルを作成するより簡単で良いと思うかもしれません。ただし、 Kubernetes を最大限に活用するには yaml ファイルを作成して pod を管理するべきです。今回紹介した kubectl run コマンドはテスト用の pod を作成する場合に使用しましょう。
コンテナの運用
Kubernetes 上でコンテナの状態確認やアップデート方法を確認しましょう。状態確認には以下のコマンドを使用します。
kubectl get pods
kubectl describe pod nginx-pod
kubectl get コマンドは pod の一覧を確認できます。これだけでも状態の確認が可能です。kubectl describe コマンドは pod を指定して、pod の詳細情報を確認できるコマンドです。
また、Podをスケールアップするには次のように実行します。
kubectl scale deployment nginx-deployment --replicas=3
deployment 単位で pod を構築している場合は、上記のコマンドによって pod 数の増減が可能です。需要(アクセス状況など)によって性能の増減をさせて利用リソースの最適化ができます。
3. Kubernetesのコンテナでよくあるトラブル
Kubernetes では、コンテナのトラブルはつきものです。様々なトラブルが発生しますが、頻繁に発生する 2 つの代表的なトラブルとその対処法を解説します。
podが起動しない
pod の ステータス が Pending や CrashLoopBackOff になっている場合は、 pod が異常状態であり、起動できていません。主な原因は以下があります。
- node にコンテナ( pod )を起動できる十分なリソースがない
- コンテナのイメージを正しく取得できていない
トラブルの対処には、下記のコンテナにどんな問題が発生しているか確認します。
kubectl describe pod {pod名}
そして、発生している原因に合わせた対処法は下記のとおりです。
- リソース( node )の性能を増やす
- コンテナ取得先との通信が正しくできていることを確認する
pod内に複数コンテナがある場合は指定が必要
pod 内に複数のコンテナがある場合は、 kubectl コマンドでの設定変更時や操作時に注意が必要です。例として kubectl logs コマンドで pod のログを確認できますが、 pod 内に複数のコンテナがある場合はコンテナを指定する必要があります。
kubectl logs multi-container-pod -c app-container
複数コンテナがある pod では操作、内容確認したいコンテナを指定しないと、 kubectl logs コマンドがエラーになるので、注意しましょう。
4. まとめ
KubernetesはコンテナをPod単位で管理するオーケストレーションツールで、YAMLファイルやkubectlコマンドでPodを作成します。pod を介さずにコンテナを作ると、 Kubernetes で管理から外れるため、スケーリングや自己修復などができません。
また、オンプレミス構築も可能ですが難易度が高いため、主要クラウドのマネージドサービス活用がおすすめです。弊社ではクラウド環境へのKubernetes導入支援を行っており、要件に応じた柔軟なサポートが可能です。導入にお困りの際はぜひご相談ください。
Kubernetes の運用を相談したい

Contactお問い合わせ
お見積もり・ご相談など、お気軽にお問い合わせください。