Kubernetes は、ホストまたはノードのクラスター上でアプリケーション コンテナーをデプロイ、スケーリング、および操作するための最も人気のある自動化プラットフォームの 1 つです。
この記事では、Kubernetes の中心的なオブジェクトの 1 つであるデプロイメントについて説明します。目標は、その動作と、その作成、更新、削除の方法を理解することです。
デプロイメントとは何ですか?
Deployment は、Pod を起動するために使用されるオブジェクトの 1 つです。 Kubernetes のベスト プラクティスでは、ステートレス アプリケーションのデプロイメントの使用が推奨されています。デプロイメントがなければ、複数の Pod を手動で作成、更新、削除する必要がありますが、これは面倒で、多くの Pod では実行不可能です。
デプロイメントでは、YAML で単一のオブジェクトを宣言します。これにより、ポッドが作成されるだけでなく、ポッドが最新で実行されていることも保証されます。 Kubernetes 上のデプロイメントを使用して、アプリケーションを簡単に自動スケールすることもできます。したがって、デプロイメントは、ポッド内のアプリケーションのバージョンをスケール、デプロイ、ロールバックするために使用されます。
デプロイメントでは、実行するポッドのコピーの数も Kubernetes に通知し、残りは Kubernetes が処理します。関連付けられたコントローラーは、デプロイメントの作成時に構成から ReplicaSet を作成します。 ReplicaSet に関連付けられたコントローラーは、ReplicaSet 構成から一連の Pod を作成します。
ReplicaSet を直接作成する代わりにデプロイメントを使用する利点は次のとおりです。
- オブジェクトの履歴: オブジェクトに変更が加えられるたびに (「適用」または「編集」によって)、以前のバージョンのバックアップが作成されます。
- ロールアウトとロールバックの管理: 前のポイントに関連して構成に戻ることができます。
デプロイメントの作成
Kubernetes デプロイメントを作成するために使用できる方法は 2 つあります。
命令法
Kubernetes API を使用すると、構成ファイルや YAML 形式のマニフェストを必要とせず、より直接的かつ命令的なアプローチが可能になります。このアプローチでは、私たちがしなければならないことは、何をしてほしいかを言うことだけであり、Kubernetes は期待される結果を達成するために何をしなければならないかを定義する責任を負います。
命令型メソッドを使用するには、次のコマンドを使用します。
kubectl create deployment nginx-deployment --image nginx --port=80
宣言的メソッド
このメソッドでは、すべてを宣言する必要があります。このコードを使用すると、Kubernetes は定義を読み取るだけで、提示または宣言されたとおりに正確に作成します。
宣言的デプロイメントを使用するには、YAML ファイルを作成する必要があります。
new_deployment.yaml
という名前のデプロイメント用の YAML ファイル:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
#Specifies the number of Pod Copies
replicas: 3
#Selects the Pod to be managed by the deployment
selector:
#Matches the defined labels
matchLabels:
deploy: example
template:
metadata:
#Specifies the labels on the Pod.
labels:
deploy: example
spec:
containers:
- name: nginx
image: nginx:1.20.2
この YAML ファイルでは、Kubernetes API バージョン、作成するオブジェクトのタイプ、デプロイメントの名前を定義した後に、spec セクションがあります。このセクションでは、まずレプリカ キーを定義します。これは、デプロイメントでアクティブにしておく必要があるポッド インスタンスの数を示します。
セレクター ラベルを使用して、デプロイメント内のポッドを識別します。これには、デプロイ ラベルを使用できます。これにより、これらのラベルに一致するすべてのポッドがデプロイメントでグループ化されることがわかります。
その後、デプロイメント仕様内にポッド モデルが含まれるテンプレート オブジェクトが作成されます。デプロイメントでポッドを作成するときは、このテンプレートを使用してポッドを作成します。通常のポッドの仕様はテンプレート キーの下にあります。
このデプロイでは、ラベル付きの Nginx イメージが Pod にデプロイされます。また、この点にも注意が必要で、Pod は Kubernetes のスケーラビリティ単位であるため、同じ Pod に複数のコンテナを配置する場合に使用するパターンを考慮する必要があります。
次に、次のコマンドを使用して、
new_deployment.yaml
Yaml ファイルを適用します。
kubectl apply -f new_deployment.yaml
数秒後、次のコマンドを使用して展開ステータスを取得できます。
kubectl get all
デプロイメントの取得と更新
ポッド、デプロイメント、およびレプリカセットが作成されたことに注意してください。したがって、デプロイメントでは常にレプリカセットが作成および管理されます。これで、次のコマンドを使用してデプロイメントを説明できるようになります。
kubectl describe deployment nginx-deployment
これで、展開の完全な説明が得られました。更新が RollingUpdate として定義されている場合に、ポッドの作成/再構築に使用される戦略が強調表示されます。
RollingUpdate 戦略により、アプリケーションのあるバージョンを新しいバージョンに規則正しく移行できます。これは、Kubernetes で使用されるデフォルトの戦略です。
これに加えて、次のような戦略もあります。
- 再作成: 現在実行中の Pod インスタンスを終了し、新しいバージョンで「再作成」します。
- 青/緑: この戦略では、2 つの別個だが同一の環境が作成されます。青色の環境では、アプリケーションは現状のまま実行されますが、緑色の環境では、アプリケーションは将来のとおりに実行されます。
- カナリア: ユーザーのサブセットがアプリケーションまたはサービスの増分リリースに関与する展開戦略。
「ローリング更新」を選択した場合は、必要なレプリカの数に関する動作を構成できます。
-
maxSurge
使用すると、現在構成されているレプリカの数に加えて作成できるポッドの数を (パーセントまたは絶対値で) 指定できます。 -
maxUnavailable
使用すると、構成されたレプリカの数に応じて、更新中に「利用不可」になる可能性があるポッドの数を (パーセントまたは絶対値で) 指定できます。
アプリケーションとオートスケーラーに応じて、これらの構成により QoS を確保したり、展開を高速化したりできます。
次に、ポッドを 10 にスケールし、Nginx イメージ タグを最新のものに変更する必要があります。
kubectl scale deployment nginx-deployment --replicas=10
5 つのコンテナーが作成されており、10 個のポッドのうち 5 個が使用可能であることに注意してください。
数秒後、次のコマンドを使用します。
kubectl get all
ここでは、すべての Pod が作成され、コンテナーが実行されていることがわかります。
デプロイメントの削除
Kubernetes デプロイメントを削除するには、次のコマンドを使用できます。
kubectl delete deploy nginx-deployment
kubectl delete deploy new_deployment.yaml
ヘルム: 導入を簡素化する
数十、さらには数百の Kubernetes リソースを使用する複雑なアプリケーションをデプロイする場合、kubectl ツールは不適切になるため、Helm ツールが開発されました。 Helm は 、kubectl 上に構築され、アプリケーションのデプロイを簡素化する Kubernetes のパッケージ マネージャーです。
Helm の用語では、アプリケーションはリリースと呼ばれます。これはチャート、つまりグローバル変数と Kubernetes リソースを記述するテンプレートを含む YAML 形式の構成ファイルのコレクションに関連付けられています。
結論
デプロイメントは重要な Kubernetes オブジェクトです。大きな権限には大きな責任が伴うため、設定する場合は注意が必要です。そうしないと、予期しない動作が発生する危険があります。デプロイメント構成をさらに詳しく進めるには、 Kubernetes のドキュメント を参照してください。
また、ゼロから学習してエキスパートになるために、いくつかの最高の Kubernetes チュートリアルを参照することもできます。