この用語をシェア
概要・定義
Kubernetes(クーバネティス、略称:k8s)は、コンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行うオープンソースのコンテナオーケストレーションプラットフォームです。2014年にGoogleによって開発され、現在はCloud Native Computing Foundation(CNCF)によって維持されています。
Kubernetesは、Googleが社内で15年以上にわたって蓄積したコンテナ管理のノウハウを基にしており、Borgシステムの経験を活かして設計されています。大規模なコンテナ化されたアプリケーションの運用を自動化し、高可用性、自動スケーリング、ローリングアップデート機能により、エンタープライズレベルのコンテナ管理を実現します。
主要な特徴・利点
1. 自動スケーリング
リソース使用量やカスタムメトリクスに基づいて、Pod数を自動的に増減させる水平スケーリングと、CPU・メモリリソースを調整する垂直スケーリングを提供します。
2. 自動復旧(Self-healing)
障害が発生したコンテナの自動再起動、ノード障害時の自動再配置、ヘルスチェックに失敗したコンテナの自動置き換えを行います。
3. 宣言的設定
YAMLファイルで理想的な状態を定義し、Kubernetesがその状態を維持するように動作します。Infrastructure as Codeの原則に基づいた管理が可能です。
4. サービスディスカバリとロードバランシング
コンテナ間の通信を自動的に管理し、DNSベースのサービスディスカバリとロードバランシングを提供します。
5. ローリングアップデート
ダウンタイムなしでアプリケーションを更新し、問題が発生した場合は自動的にロールバックします。
主要コンポーネント
コントロールプレーン
- API Server: KubernetesクラスターのAPIエンドポイント
- etcd: クラスター状態を保存する分散キーバリューストア
- Scheduler: PodをどのNodeで実行するかを決定
- Controller Manager: 各種コントローラーの管理
ワーカーノード
- kubelet: ノード上でPodを管理するエージェント
- kube-proxy: ネットワークプロキシとロードバランサー
- Container Runtime: コンテナ実行環境(Docker、containerd等)
基本リソース
- Pod: コンテナの実行単位
- Service: Pod群への安定したアクセスを提供
- Deployment: Pod群のデプロイとアップデート管理
- ConfigMap/Secret: 設定情報と機密情報の管理
使用例・実装方法
基本的なDeploymentの作成
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80