0Pricing
DevOps Bootcamp · レッスン

ステートレスアプリのDeployment

Deploymentを使用してステートレスアプリケーションを管理し、ローリングアップデートとロールバックを実現します。

「ステートレスアプリのDeployment」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

Kubernetes Deployment について

Kubernetes の基本概念であるDeploymentへようこそ!Deployment は、ステートレスアプリケーションを管理するための代表的なリソースです。

Deployment は、アプリケーションの設計図のようなものです。実行するアプリケーションのコピー数(レプリカ)や、ダウンタイムなしで更新する方法を Kubernetes に伝えます。

ステートレスアプリのDeployment — イラスト1

Pod と ReplicaSet の先へ

Pod(最小単位)と ReplicaSet(一定数の Pod を維持するもの)について学びました。

Deployment は ReplicaSet の上位に位置します。次のような、より高レベルの抽象化を提供します。

  • ReplicaSet の作成と更新
  • アプリケーションの新しいバージョンのローリングアウト
  • 問題が発生した場合の以前のバージョンへのロールバック

これにより、アプリケーションをより簡単かつ安全に管理できます。

Deployment YAML の内部

他の Kubernetes リソースと同様に、Deployment も YAML を使って定義します。基本的な構造を見てみましょう。

  • apiVersion:Kubernetes API のバージョン(例:apps/v1)を指定します。
  • kind:Deployment リソースでは常にDeploymentです。
  • metadata:Deployment のnameや任意のlabelsなどの情報を含みます。

これらのフィールドによって、Kubernetes は Deployment を識別して整理できます。

レプリカとテンプレートの指定

Deployment の中心となるのはspecセクションです。ここでは次の項目を定義します。

  • replicas:アプリケーション用に実行する同一の Pod の数です。
  • selector:Deployment が管理対象の Pod を見つける方法です(ラベルを使用します)。
  • template:各 Pod のコンテナやボリュームなどを記述する、実質的な Pod 定義です。

Deployment はこのtemplateを使って新しい Pod を作成します。

Nginx Deployment

次は、Nginx Web サーバー用の単純な Deployment マニフェストです。Kubernetes に Nginx Pod を 3 つ実行し続けるよう指示します。

それぞれの部分を理解してみましょう!

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Deployment の作成

Deployment の YAML ファイル(例:nginx-deployment.yaml)を用意したら、kubectl applyコマンドを使って Kubernetes クラスターに Deployment を作成できます。

Kubernetes はその後、望ましい数の Pod が作成され、維持されるようにします。

kubectl apply -f nginx-deployment.yaml

次のコマンドで状態を確認できます。

kubectl get deployments

スケールアップとスケールダウン

アプリケーションのインスタンスを増やしたり減らしたりする必要がありますか?Deployment を使えば、簡単にスケーリングできます。YAML のreplicasフィールドを変更して再適用するか、次の直接コマンドを使います。

kubectl scale deployment nginx-deployment --replicas=5

このコマンドにより、Deployment は Nginx Pod を 2 つ追加して、合計を 5 つにします。

ゼロダウンタイム更新

Deployment の大きな利点の 1 つは、ローリングアップデートを実行できることです。Pod テンプレートを更新した場合(イメージのバージョン変更など)でも、Kubernetes は古い Pod を一度にすべて停止しません。

代わりに、古い Pod を新しい Pod に段階的に置き換えるため、更新中もアプリケーションを利用できます。

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

簡単にロールバックする

アップデートでミスをしてしまいましたか?ご安心ください。デプロイメントではリビジョンの履歴が保持されるため、以前の安定したバージョンに簡単に戻せます。

これをロールバックと呼び、デプロイメントにおける重要な安全策となります。

kubectl rollout undo deployment/nginx-deployment

kubectl rollout history deployment/nginx-deploymentを使って履歴を確認することもできます。

デプロイメントクイズの時間

ある開発者が、イメージをnginx:1.14.2からnginx:1.16.1に更新して、Nginxのデプロイメントを更新しました。この更新でKubernetesのデプロイメントを使用する主なメリットは何ですか?

デプロイメントの重要なポイント

よくできました。ステートレスアプリケーションを管理する強力なリソース、Kubernetesのデプロイメントについて学びました。

  • デプロイメントはReplicaSetを管理し、ReplicaSetがPodを管理します。
  • replicasの数など、望ましい状態を定義します。
  • 主な機能には、簡単なスケーリング、ダウンタイムなしで更新できるローリングアップデート、以前のバージョンに簡単に戻せるロールバックがあります。

次は、アプリケーションを公開するためのServiceについて学びます。

よくある質問

「ステートレスアプリのDeployment」レッスンは無料ですか?

はい。「ステートレスアプリのDeployment」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「ステートレスアプリのDeployment」で何を学びますか?

Deploymentを使用してステートレスアプリケーションを管理し、ローリングアップデートとロールバックを実現します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ステートレスアプリのDeployment」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ステートレスアプリのDeployment
  2. ネットワークアクセスのためのService
  3. ConfigMapsとSecrets
  4. Ingressと外部ルーティング
← DevOps Bootcampに戻る