Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
Kubernetes とは
Kubernetes (K8s) は、Google が Borg の知見をもとに開発したコンテナオーケストレーションプラットフォームである。CNCF がホスト。AWS では EKS (Elastic Kubernetes Service) で利用する。
主要なリソース
Kubernetes はいくつかのリソースを組み合わせてアプリケーションを管理する。Pod がコンテナの最小実行単位で、Deployment が Pod のレプリカ数管理とローリングアップデートを担う。Service が Pod へのネットワークアクセスを提供し、Ingress が外部からの HTTP ルーティングを制御する。設定データは ConfigMap、秘密情報は Secret で管理し、HPA (Horizontal Pod Autoscaler) が負荷に応じて Pod 数を自動調整する。
Deployment の定義
Deployment の定義の例を示す。
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replicas: 3
selector:
matchLabels: { app: api }
template:
metadata:
labels: { app: api }
spec:
containers:
- name: api
image: my-app:v1.42.0
ports: [{ containerPort: 8080 }]
resources:
requests: { cpu: 100m, memory: 128Mi }
limits: { cpu: 500m, memory: 512Mi }
イメージのタグを latest にしないことが実務の要点である。タグを省略するか :latest を指定すると imagePullPolicy が自動的に Always になり、Pod が作り直されるたびに最新イメージを取り直すため、同じマニフェストでも起動した時期によって中身が変わる。どのバージョンが動いているかを追えず戻す先も特定できないので、v1.42.0 のような意味のあるタグかダイジェストで固定する。requests はスケジューリング時に必要な空き容量の申告、limits は実行中の上限で、メモリが limits を超えたコンテナは停止させられ、CPU は上限まで絞られる (スロットリング) だけで停止はしない。
EKS vs ECS vs Lambda
EKS、ECS Fargate、Lambda の違いを以下にまとめる。
| 観点 | EKS | ECS Fargate | Lambda |
|---|---|---|---|
| 管理負荷 | 高い | 低い | 最低 |
| K8s エコシステム | Helm や Operator をそのまま使える | 使えず、AWS 側の機能で代替する | 使えず、AWS 側の機能で代替する |
| コスト (アイドル) | クラスタ費用 | タスク数 | ゼロ |
| 実行時間 | 無制限 | 無制限 | 最大 15 分 |
| 用途 | K8s が必要な場合 | コンテナ | イベント駆動 |
いつ Kubernetes を使うか
Kubernetes を選ぶ理由は「コンテナを動かしたい」ではなく、その周辺エコシステムまで必要かどうかにある。
| 場面 | 選ぶ基盤 | 理由 |
|---|---|---|
| Deployment や Ingress、HPA といったリソース定義を活かしたい | EKS | これらは Kubernetes 固有のリソースで、他の基盤では同じ定義を持ち込めず同等の仕組みを別の形で組み直すことになる |
| コンテナを動かしたいだけで Kubernetes 固有の機能は要らない | ECS Fargate | EKS は 3 つの中で管理負荷が最も高く、クラスタとマニフェスト群を維持し続ける必要がある。動かす対象が同じなら負荷の低い側で足りる |
| イベントを受けて短時間の処理を回す | Lambda | 実行時間の上限 (最大 15 分) に収まる範囲なら、コンテナを常駐させずリクエスト単位で処理できる |
| 呼び出しが散発的で、待機中の費用を抑えたい | Lambda | 常駐するタスクもクラスタも持たないため、アイドル時に積み上がる固定費が発生しない |
実務での活用方法は関連書籍にも詳しい。
この記事は役に立ちましたか?
関連用語
コンテナオーケストレーション
コンテナのデプロイ、スケーリング、ネットワーキングを自動管理するプラットフォーム
ECS
AWS のマネージドコンテナオーケストレーションサービスで、Docker コンテナを実行 / 管理する
Helm
Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する
Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
Pod
Kubernetes の最小デプロイ単位で、1 つ以上のコンテナをまとめて管理するリソース
Init コンテナ
Kubernetes でメインコンテナの起動前に初期化処理を実行する特殊なコンテナ
関連する記事
OS / 低レイヤー本ガイド - コンピュータの仕組みを学ぶ技術書の選び方
OS、コンパイラ、ネットワークなど低レイヤーを学べる技術書の 4 ジャンルと、どこから始めるべきかの指針、賞味期限の見極め方を紹介します。
インフラ / クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。
Linux 本ガイド - コマンドライン / しくみ / 性能の 3 層で選ぶ技術書
Linux を学ぶ技術書の選び方を 3 層 (コマンドラインの操作 → カーネルのしくみ → 性能と運用) で整理。新しい Linux の教科書や [試して理解] Linux のしくみなどの定番書の使い分けと、学ぶ順番を解説します。