Kubernetes概要
Kubernetesは、Dockerやその他のコンテナランタイムで実行されるアプリケーションを管理するためのオープンソースのオーケストレーションツールとなる。Kubernetesは、複数のノードにまたがるアプリケーションのデプロイ、スケーリング、管理、そしてフェイルオーバーを簡単に行うことができる。
以下は、Kubernetesの主なコンポーネントとなる。
- Masterノード:クラスタ全体を制御する中央の管理ノード。
- Workerノード:実際にアプリケーションを実行するノード。
- Pod:1つ以上のコンテナをまとめたユニットで、デプロイの単位。
- Service:Podをグループ化し、それらを一つのアプリケーションとして公開する方法。
- Volume:永続化されたストレージを提供し、コンテナのデータを保存するために使用される。
- ReplicaSet:Podのレプリカを管理するオブジェクト。
Kubernetesは、様々なクラウドプラットフォームで利用でき、さまざまなプログラミング言語やフレームワークをサポートしている。Kubernetesは、自動スケーリング、ロードバランシング、ヘルスチェック、ローリングアップデートなどの機能を提供し、高可用性、信頼性、スケーラビリティを実現する。
主なフロー
Kubernetesを実装するためには、以下のステップが必要となる。
- Kubernetesクラスタをセットアップするためのツールの選択: Kubernetesクラスタを手動でセットアップすることもできるが、多くの場合は自動化ツールを使用する方が便利である。例えば、kubeadm、kops、Rancherなどのツールがある。
- ノードの設定: Kubernetesクラスタには、Masterノードと複数のWorkerノードが必要となる。Masterノードは、Kubernetesクラスタの制御プレーンを実行するために使用され、Workerノードはアプリケーションの実行に使用される。
- Dockerコンテナのビルド: Kubernetesは、Dockerコンテナを実行するために設計されている。したがって、アプリケーションをDockerコンテナにパッケージ化する必要がある。
- Kubernetesリソースの作成: Kubernetesでは、リソースとしてPod、Service、Deploymentなどが利用される。これらのリソースを作成するために、YAMLファイルを作成し、kubectlを使用してKubernetesクラスタに適用する。
- アプリケーションのデプロイ: Kubernetesリソースを作成した後、アプリケーションをデプロイすることができる。kubectlコマンドを使用して、PodやDeploymentを作成し、アプリケーションをKubernetesクラスタにデプロイする。
- モニタリングとログの設定 Kubernetesでは、アプリケーションのパフォーマンスを監視することができる。PrometheusやGrafanaなどのツールを使用して、Kubernetesクラスタ全体のメトリクスを収集し、アプリケーションのログを収集することができる。
これらのステップに従ってKubernetesを実装することができる。ただし、Kubernetesは複雑なツールであり、学習コストが高い場合があるため、初めてKubernetesを実装する場合は、十分な時間をかけて学習することが重要となる。
環境設定
Kubernetesの環境設定には、いくつかのステップが必要となる。以下に基本的な手順の概要を述べる。
- Kubernetesのインストール
- ローカル環境にインストールする場合は、Minikubeを使用することができる。
- クラウド環境にインストールする場合は、各クラウドプロバイダのドキュメントに従って行う。
- kubectlのインストール
-
- kubectlは、Kubernetesクラスターに接続して、操作を実行するために必要なツールとなる。
- Kubernetesクラスターへの接続
-
- kubectlコマンドを使用して、Kubernetesクラスターに接続する。
- 接続には、KubernetesマスターのIPアドレス、認証情報、およびクラスター名が必要となる。
- Kubernetesオブジェクトの作成
- Kubernetesでは、各種オブジェクトを使用して、アプリケーションを管理する。
- 例えば、Deploymentオブジェクトを使用して、アプリケーションのデプロイを管理することができる。
- Kubernetesオブジェクトの確認
- kubectlコマンドを使用して、作成したオブジェクトの状態を確認する。
- 例えば、kubectl get podsコマンドを使用して、Podの状態を確認することができる。
- Kubernetesオブジェクトの更新
- 必要に応じて、作成したオブジェクトを更新することができる。
- 例えば、kubectl edit deploymentコマンドを使用して、Deploymentオブジェクトを編集することができる。
- Kubernetesオブジェクトの削除
- 不要になったオブジェクトを削除することができる。
- 例えば、kubectl delete deploymentコマンドを使用して、Deploymentオブジェクトを削除することができる。
以上が、Kubernetesの基本的な環境設定手順となる。ただし、Kubernetesは非常に柔軟なシステムであり、多くのオプションがある。詳細については、公式ドキュメントを参照のこと。
Hello World
KubernetesのHello Worldの例として、簡単なWebアプリケーションをKubernetesクラスタ上にデプロイする方法について述べる。
- Dockerイメージの作成: まず、簡単なWebアプリケーションを含むDockerイメージを作成する必要がある。以下は、Node.jsで書かれたHello Worldアプリケーションの例となる。
const http = require('http');
const port = 8080;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, () => {
console.log(`Server running on port ${port}`);
});
上記のアプリケーションを含むDockerイメージを作成するには、以下のようにDockerfileを作成する。
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
上記のDockerfileを使用して、Dockerイメージを作成するには、以下のコマンドを実行する。
docker build -t hello-world-app:v1 .
- Kubernetesリソースの作成: 次に、Kubernetesリソースを作成する必要がある。以下では、DeploymentとServiceを作成するYAMLファイルの例となる。
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world-app
labels:
app: hello-world-app
spec:
replicas: 3
selector:
matchLabels:
app: hello-world-app
template:
metadata:
labels:
app: hello-world-app
spec:
containers:
- name: hello-world-app
image: hello-world-app:v1
ports:
- containerPort: 8080
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-world-app
spec:
type: ClusterIP
selector:
app: hello-world-app
ports:
- name: http
port: 80
targetPort: 8080
上記のYAMLファイルを使用して、DeploymentとServiceを作成するには、以下のコマンドを実行する。
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
- アプリケーションのテスト: 最後に、作成したWebアプリケーションをテストするために、ServiceのIPアドレスを取得して、curlコマンドでリクエストを送信する。
kubectl get svc hello-world-app
curl :80
以上で、簡単なHello WorldアプリケーションのKubernetesクラスタ上でのデプロイと、動作確認を行うことができる。
更に”マイクロサービスのデプロイと運用-DockerとKubernetes“では、kubernetesをマイクロサービスに利用した実装例を示している。
参考図書
Kubernetesの参考図書としては「Kubernetes実践ガイド」がある。
本書ではkubernetesを実践するための詳細な情報が記載されている。
はじめに
本書のターゲット
諸注意
本書の構成
本書の実行環境
本書で使用するコード
本書の表記
第 1 部 Kubernetes の基礎知識
第 1 章 クラウドネイティブが目指す世界
1-1 クラウドネイティブとは
1-1-1 クラウドネイティブが提供するビジネス価値
1-1-2 クラウドネイティブを支える構成要素
1-1-3 クラウドネイティブアプリケーションの方法論
1-2 クラウドネイティブを推進する団体
1-2-1 CNCF の役割
1-2-2 CNCF のプロジェクト
1-3 クラウドネイティブに求められる組織体制
1-3-1 プロセスと組織の変革
1-3-2 組織がたどる継続的な改善
1-4 まとめ
第 2 章 コンテナを支える技術
2-1 コンテナの概要
2-1-1 コンテナの提供価値
2-1-2 コンテナの要素技術
2-1-3 OCI によるコンテナ技術の標準化
2-1-4 コンテナランタイムのレイヤ
2-2 Kubernetes の概要
2-2-1 コンテナオーケストレーションの役割
2-2-2 Kubernetes とは
2-2-3 Kubernetes に対応した製品とその形態
2-2-4 Kubernetes のエコシステム
2-3 まとめ
第 3 章 Kubernetes のアーキテクチャ
3-1 Kubernetes クラスタの全体像
3-1-1 オブジェクトの概要
3-1-2 コントロールプレーンの概要
3-2 マスターノードのコンポーネント
3-2-1 kube-apiserver
3-2-2 kube-scheduler
3-2-3 kube-controller-manager
3-2-4 etcd
3-3 ワーカーノードのコンポーネント
3-3-1 kubelet
3-3-2 kube-proxy
3-4 拡張コンポーネント
3-4-1 Service Discovery
3-4-2 Visualization & Control
3-5 まとめ
第 4 章 Kubernetes クラスタの構築
4-1 kubeadm
4-1-1 kubeadm を利用したクラスタ概要
4-1-2 クラスタノードの準備
4-1-3 マスターノードの構築
4-1-4 ワーカーノードの構築
4-2 Azure Kubernetes Service
4-2-1 AKS を利用したクラスタ概要
4-2-2 AKS の構築
4-3 サンプルコンテナのデプロイ
4-3-1 Hello World
4-4 まとめ
第 5 章 Kubernetes オブジェクトの概要
5-1 主要なオブジェクト
5-1-1 Pod
5-1-2 ReplicaSet
5-1-3 Deployment
5-1-4 Service
5-2 オブジェクトを利用したアプリケーション展開
5-2-1 Sock Shop のアーキテクチャ
5-2-2 Sock Shop のデプロイ
5-2-3 Pod フィールドの詳細
5-2-4 環境変数の取り扱い
5-3 オブジェクトを活用したオートスケール
5-3-1 Pod のオートスケール
5-3-2 水平オートスケール(HPA)
5-3-3 垂直オートスケール(VPA)
5-4 まとめ
第 2 部 クラウドネイティブアプリケーションの開発・運用
第 6 章 コンテナアプリケーションカタログ
6-1 YAML の管理
6-2 パッケージマネージメント
6-2-1 Helm の概要
6-2-2 Chart の展開
6-2-3 Chart のカスタマイズ
6-3 カスタムマネージドサービス
6-3-1 Operator の概要
6-3-2 Operator の展開
6-3-3 Operator の活用
6-4 まとめ
第 7 章 継続的インテグレーション
7-1 クラウドネイティブな継続的インテグレーション
7-1-1 継続的インテグレーションのフェーズ
7-2 コンテナビルド
7-2-1 コンテナビルドの概要
7-2-2 BuildKit によるコンテナビルド
7-2-3 Kaniko によるコンテナビルド
7-3 コンテナセキュリティ
7-3-1 コンテナアプリケーションセキュリティ
7-3-2 Clair の概要
7-3-3 Clair の実装
7-4 コンテナアプリの継続的な開発ワークフロー
7-4-1 Skaffold の概要
7-4-2 Skaffold の実装
7-5 まとめ
第 8 章 継続的デリバリ
8-1 クラウドネイティブな継続的デリバリ
8-1-1 デプロイメント戦略
8-1-2 Spinnaker の概要
8-1-3 Spinnaker のインストール
8-2 Blue
Green デプロイメント
8-2-1 Spinnaker の Sock Shop デプロイメント
8-2-2 Blue/Green デプロイメントパイプライン
8-3 Canary デプロイメント
8-3-1 自動カナリア分析の事前準備
8-3-2 自動カナリア分析のパイプライン
8-4 まとめ
第 9 章 マイクロサービス
9-1 マイクロサービスアーキテクチャの概要
9-1-1 モノリシックアーキテクチャの課題
9-1-2 マイクロサービスアーキテクチャによる設計
9-1-3 マイクロサービスアーキテクチャの利点
9-1-4 マイクロサービスアーキテクチャの課題
9-2 サービスメッシュの概念
9-2-1 サービスメッシュの利点
9-2-2 Istio の概要
9-2-3 Istio のアーキテクチャ
9-3 Kubernetes への Istio の展開
9-3-1 Kubernetes 上の Istio
9-3-2 Istio のインストール
9-3-3 サービスメッシュ上へのSock Shop の展開
9-4 耐障害性の向上
9-4-1 リトライ
9-4-2 パフォーマンス劣化への対応
9-4-3 タイムアウト
9-4-4 サーキットブレイカー
9-5 サービスの安全な更新
9-5-1 Blue/Green デプロイメント
9-5-2 Canary デプロイメント
9-6 カオスエンジニアリング
9-6-1 Istio によるフォールトインジェクション
9-7 分散トレーシング
9-7-1 分散トレーシングのための標準技術
9-7-2 Istio と Jaeger による分散トレーシング
9-7-3 Jaeger によるトレースの分析
9-8 まとめ
おわりに
索引
著者プロフィール
コメント
[…] Kubernetesの概要と環境設定、参考図書 […]