[エントリから放棄-Kubernetesまで] Kubernetesエントリステートレスアプリケーションのスケーリング

序文

上記の[entryからabandonment-Kubernetesまで] Kubernetes entry-application deploymentで、コマンドラインを使用してアプリケーションをデプロイする方法を学びました。この記事では、yaml設定ファイルを使用してアプリケーションをデプロイし、アプリケーションを拡張および縮小する方法を学びました。

Kubernetesオブジェクト

この段落はkubernetes公式マニュアルの学習ノートを参照しています。事前に理解しておくことをお勧めします。関連する概念をすでに理解している場合は、この段落をスキップして、次の操作を直接確認できます。

Kubernetesオブジェクトは永続エンティティです。Kubernetesはこれらのエンティティを使用して、クラスター全体の状態を表します。
次の情報について説明します。

  • 実行されているコンテナ化されたアプリケーション(およびノー​​ド)
  • アプリケーションで使用できるリソース
  • 再起動戦略、アップグレード戦略、フォールトトレランス戦略など、アプリケーションのランタイムパフォーマンスに関する戦略

オブジェクトが作成されると、k8sクラスターは引き続き機能して、オブジェクトが目的の状態を満たしていることを確認します。

オブジェクトの仕様(Spec)とステータス(Status)

各Kubernetesオブジェクトには2つのネストされたオブジェクトフィールドがあり、オブジェクトの構成の管理を担当します。オブジェクトの仕様とオブジェクトのステータスです。仕様は必須であり、オブジェクトの望ましい状態(Desired State)-望ましいオブジェクトの特性を記述します。statusは、オブジェクトの実際の状態(実際の状態)を示します。これは、Kubernetesシステムによって提供および更新されます。Kubernetesコントロールプレーンはいつでも、オブジェクトの実際の状態を管理して、目的の状態に一致させるように努めています。

Kubernetesオブジェクトについて説明する

一般的に、yamlはk8sオブジェクトを記述するために使用され、Yamlは構成を記述するために特に使用される言語です。

基本的な文法規則は次のとおりです。

  • 大文字と小文字を区別
  • インデントを使用して階層関係を表す
  • タブはインデントには使用できず、スペースのみが許可されます
  • 同じレベルの要素が左揃えである限り、インデントされたスペースの数は重要ではありません
  • 「#」はコメントを意味します

yamlを使用してk8sオブジェクトを説明するには、次の必須フィールドが必要です。

  • apiVersion-オブジェクトの作成に使用されるKubernetes APIのバージョン
  • 種類-作成するオブジェクトのタイプ
  • 名前文字列、UID、オプションの名前空間など、オブジェクトの一意性を識別するのに役立つメタデータ
  • spec-オブジェクトの望ましい状態(Desired State)を記述します。k8sクラスターは、オブジェクトが記述された状態を満たすことを保証し続けます。

Kubernetesオブジェクトを管理する

k8sオブジェクトを管理する方法は3つあります

命令型コマンド

これは、上記で使用した方法であり、コマンドラインで直接操作します。
など:

kubectl create deployment nginx --image nginx

オブジェクト構成と比較した利点:

  • コマンドはシンプルで、覚えやすく、覚えやすいです。
  • コマンドは、クラスターに変更を加えるために1つのステップのみを実行します。

オブジェクト構成と比較した短所:

  • 注文は変更レビュープロセスと統合されていません。
  • このコマンドは、変更に関連する監査証跡を提供しません。
  • リアルタイムコンテンツを除いて、コマンドはレコードソースを提供しません。
  • このコマンドは、新しいオブジェクトを作成するためのテンプレートを提供しません。

命令型オブジェクト構成

連携するには、操作手順書と設定ファイルが必要です。
など:

kubectl create -f nginx.yaml

命令型コマンドと比較した利点:

  • オブジェクト構成は、Gitなどのソース管理システムに保存できます。
  • オブジェクトの構成は、プッシュや監査の前に更新を確認するなどのプロセスと統合できます。
  • オブジェクト構成は、新しいオブジェクトを作成するためのテンプレートを提供します。

命令型コマンドと比較した短所:

  • オブジェクト構成には、オブジェクトアーキテクチャの基本的な理解が必要です。
  • オブジェクトの構成では、YAMLファイルを書き込むための追加の手順が必要です。

宣言型オブジェクト構成と比較した利点:

  • 命令型オブジェクト構成の動作は、よりシンプルで理解しやすくなっています。
  • Kubernetesバージョン1.5以降、命令型オブジェクト構成はより成熟しています。

宣言型オブジェクト構成と比較した短所:

  • 命令型オブジェクト構成は、ディレクトリよりもファイルに適しています。
  • アクティブなオブジェクトへの更新は構成ファイルに反映する必要があります。そうしないと、次の置換で失われます。

宣言的なオブジェクト構成

宣言型オブジェクト構成では、コマンドに示されている操作を指定する必要がないため、構成ファイルをディレクトリに配置し、ディレクトリ内のファイルに対してさまざまな操作を実行できます。

たとえば、次のとおりです。

kubectl apply -f configs/

命令型オブジェクト構成と比較した利点:

  • アクティブなオブジェクトに加えられた変更は、構成ファイルにマージされなくても保持されます。
  • 宣言的なオブジェクト構成は、ディレクトリの操作をより適切にサポートし、各ファイルの操作タイプ(作成、パッチ、削除)を自動的に検出します。

命令型オブジェクト構成と比較した短所:

  • 宣言的なオブジェクト構成はデバッグが難しく、例外が発生したときに結果を理解するのが困難です。
  • diffを使用して生成された部分的な更新は、複雑なマージおよびパッチ操作を作成します。

ハンズオン

配置を作成

node-deployment.yamlファイルを作成する

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-deployment
  labels:
    app: node
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node
  template:
    metadata:
      labels:
        app: node
    spec:
      containers:
      - name: node
        image: registry.cn-hangzhou.aliyuncs.com/larswang/hello-node:1.0
        ports:
        - containerPort: 80

作成する

kubectl apply -f node-deployment.yaml

展開を表示する

kubectl get deployments

ポッドを表示

kubectl get pods --show-labels

規模の展開

10部に拡張

kubectl scale deployment.v1.apps/node-deployment --replicas=10

展開とポッドを表示するための拡張が完了しました

kubectl get deployments

kubectl get pods --show-labels

3つのコピーに縮小

kubectl scale deployment.v1.apps/node-deployment --replicas=3

この時点で、7つのポッドが終了状態にあることがわかります。しばらくしてから、もう一度確認します。実行中のポッドは3つだけです。

自動回復

最初にポッドのリストを確認します

kubectl get pods --show-labels

ポッドの1つを選択して削除

kubectl delete pod node-deployment-57df45c5bf-d8xst

削除が成功したら、ポッドリストをもう一度確認します

kubectl get pods --show-labels

削除されたポッドが存在しないことがわかりますが、デプロイメントにより新しいポッドが作成されています。

これは、k8sが常にクラスターの実行状態と構成記述の状態の整合性を確保しようとする特性です。

デプロイメントの説明情報を取得する

kubectl describe deployment node-deployment

デプロイの現在の説明とポッドの変更履歴を確認できます。
NewReplicaSet:

  • Deploymentが最初に作成されたときに、ReplicaSet(node-deployment-57df45c5bf)を作成し、3つのコピーを作成しました。

イベント:

  • 最初に10ポッドに拡張
  • 3ポッドに削減
  • 1ポッドに削減
  • 3ポッドに拡張

展開ステータスを表示する

kubectl get deployment node-deployment -o yaml

デプロイメント構成と現在のステータスをyaml形式で表示する

まとめ

この記事では、k8sオブジェクトとは何か、yaml構成を使用してデプロイを作成する方法を紹介しました。
スケールを使用してデプロイメントをスケーリングし、ポッドを手動で削除する機能を実証した後、k8sは、説明に従って実行状態を説明と一致させます。

手術が終わった後、コンセプトを振り返ると、びっくりするような気分になります。

この記事の構成ファイルはAloofJrにあります。

その他の記事

私のブログを参照してください:https : //nc2era.com

AloofJrによって書かれた、ソースを示してください

おすすめ

転載: yq.aliyun.com/articles/756392