テストスキルの向上 - K8s のコアコンセプト

テストスキルの向上 - K8s のコアコンセプト

この記事では、k8s に関係する中核的な概念に焦点を当てています。これにより、読者は全体的な観点から k8s をすばやく理解でき、初心者が実際の業務で関連する作業に従事しやすくなります。

Docker と K8s

Docker は最も広く使用されているコンテナ テクノロジーです。イメージをパッケージ化し、コンテナを起動することでサービスを作成します。

k8s の正式名称は kubernetes です。包括的なクラスター管理機能を備えた完全な分散システム サポート プラットフォームです。

Kubernetes は、開発、展開、テスト、運用監視などの側面をカバーする包括的な管理ツールも提供します。

アプリケーションが複雑になるにつれて、コンテナの数も増加し続け、コンテナの管理と運用という重要な問題が生じます。クラウド コンピューティングの発展に伴い、コンテナ ドリフトもクラウドにおける最大の課題となっています。このビジネスを推進するために、k8s はコンテナ テクノロジーをベースとした一連の先進的な分散アーキテクチャ ソリューションを提案しました。これは、コンテナ テクノロジーの分野における大きな進歩と革新です。

k8s がコンテナ (docker) を管理および操作できることを理解するだけです。次の図は、k8s の全体的なアーキテクチャです。

k8sの重要な概念

マスターノード

マスター ノードは、クラスター内のすべてのコンテナーのスケジュール設定、さまざまなリソース オブジェクトの制御、クラスターからのすべての要求への応答を担当します。

ノード

Node は、ビジネス コンテナの実行を担当する Kubernetes ワーカー ノードです。

クラスタ

クラスターは、Kubernetes によって集中的に管理およびスケジュールされるノードのグループです。 Kubernetes によって管理されるノードは、物理マシンまたは仮想マシンです。クラスター内の一部のノードはマスター ノードとして機能し、クラスターのステータス管理と調整を担当します。一方、他のノードはノード ノードとして機能し、特定のタスクの実行や、ユーザー サービスの開始や停止などの機能の実現を担当します。

ラベル

ラベルはキーと値のペアのセットです。すべてのリソース オブジェクトにこのフィールドがあります。 Kubernetes では、ラベルを使用してリソースをマークし、ラベルに基づいてリソースを分類およびフィルタリングします。

名前空間

Kubernetes では、名前空間を使用してリソースの仮想化された分離を実装します。関連するリソースのグループを同じ名前空間に配置することで、異なるテナントのリソース間での名前の競合を回避し、複数のテナントのリソース分離を論理的に実装します。

ポッド

Pod は Kubernetes における最小のスケジューリング単位です。 1 つ以上のコンテナーで構成されます。 Pod 内のコンテナは同じネットワーク名前空間とストレージ ボリュームを共有します。 Pod は実際のビジネス プロセスの担い手です。 Pod が実行される前に、Kubernetes はまず Pause コンテナを起動してネットワーク名前空間を開き、ネットワークおよびストレージ関連のリソースの初期化を完了してから、ビジネス コンテナを実行します。つまり、各 Pod は Pause と呼ばれる特別なコンテナを実行し、その他のコンテナはビジネス コンテナです。これらのビジネス コンテナーは、一時停止コンテナーのネットワーク ボリュームとボリューム マウント ボリュームを共有します。後ほど引き続き重点的に取り上げます。

ステートレスデプロイメント

デプロイメントは、ポッドのグループを抽象化したものです。デプロイメントは、ステートレス サービスをデプロイするために使用されます。デプロイメント コントローラーは、ユーザーが指定した数のコンテナー レプリカの正常な動作を保証し、ローリング アップデートなどの高度な機能を実装します。ビジネス バージョンを更新する必要がある場合、Deployment は指定された戦略に従って、古いバージョンの Pod を自動的に強制終了し、新しいバージョンの Pod を起動します。

ステートフルセット

StatefulSet は基本的に Deployment のバリエーションであり、ステートフル サービスをデプロイするために使用されます。管理するポッドには、固定のポッド名と開始および停止の順序があります。 StatefulSet では、Pod 名はネットワーク識別子 (ホスト名) と呼ばれ、共有ストレージを使用する必要があります。

仕事

ジョブは、ポッドを作成し、ポッドの正常な終了を保証するのに役立ちます。 Pod の実行中にエラーが発生した場合、ジョブ コントローラーは、Pod が正常に実行されるか、指定された再試行回数に達するまで、新しい Pod の作成を手助けします。単純な使用例では、Pod を信頼性の高い方法で完了まで実行するための Job オブジェクトを作成します。最初の Pod が失敗するか削除されると (たとえば、ノードのハードウェア障害や再起動により)、Job オブジェクトは新しい Pod を開始します。

サービス

サービスは、一連の Pod にアクセスするための抽象化です。各ポッドには独自の IP アドレスがあります。複数のポッドが同じサービスを提供する場合は負荷分散が必要となり、ここでサービスが導入されます。

ポッド

ポッドを理解する

Pod: 1 つ以上のコンテナを含む、k8s によって管理される最小単位であり、実際のビジネス サービスを提供するコンポーネントです。 Pod は、アプリケーション コンテナ (または複数のコンテナ)、ストレージ リソース、独立したネットワーク IP、およびコンテナの実行方法を管理および制御するためのポリシー オプションをカプセル化します。 Pod はデプロイメントの単位を表します。Kubernetes 内の単一アプリケーションのインスタンスであり、単一のコンテナまたはリソースを共有する複数のコンテナで構成される場合があります。

コンテナはポッド内で実行されます。 「Pod ごとに 1 つのコンテナ」モデルは、Kubernetes の最も一般的な使用法です。この場合、Pod を単一のカプセル化されたコンテナと考えることができますが、Kubernetes はコンテナではなく Pod を直接管理します。ポッドは連携して動作する必要がある複数のコンテナを実行します。ポッドは密結合されたアプリケーションをカプセル化できます。リソースを共有できる複数のコンテナで構成する必要があります。これらのコンテナーは単一の内部サービス ユニットを形成できます。次の図に示すように、1 つのコンテナーがファイルを共有し、別の「サイドカー」コンテナーがこれらのファイルを更新します。 Pod はこれらのコンテナのストレージ リソースを単一のエンティティとして管理します。

ポッドは、ネットワークとストレージという 2 つの共有リソースを提供します。

ネットワーク

各ポッドには独立した IP アドレスが割り当てられ、ポッド内の各コンテナは IP アドレスやネットワーク ポートなどのネットワーク名前空間を共有します。 Pod 内のコンテナは、localhost を使用して相互に通信できます。 Pod 内のコンテナが Pod 外のコンテナと通信する場合、ポートなどの共有ネットワーク リソースの使用方法を調整する必要があります。

ストレージ

Pod は共有ストレージ ボリュームのセットを指定できます。 Pod 内のすべてのコンテナは共有ボリュームにアクセスできるため、それらのコンテナはデータを共有できます。ボリュームは、コンテナの 1 つを再起動する必要があり、データが失われた場合に備えて、ポッド内にデータを保持するためにも使用されます。

Podは実際の仕事で最もよく触れるものであり、特にpodのリソースリスト(対応するyamlファイル)については後で詳しく説明します

ReplicaSet(rs): Pod の管理および制御コンポーネントであり、Pod の健全性を監視し、Pod がユーザーの期待どおりに実行されるようにします。 rs は ReplicationController コンポーネントのアップグレード バージョンであり、ラベル セレクターの範囲選択機能が追加されています。

デプロイメント: RS と Pod を管理し、ローリング アップグレードとロールバック、Pod アプリケーションの拡張と縮小を実装できます。

サービス: Pod の論理グループにアクセスできる戦略です。サービスは通常、ラベル セレクターを通じて Pod グループにアクセスします。クラスター内のポッドの数とアクセス アドレスは変更される可能性があります。これらのポッド内のビジネス アプリケーションは外部サービスを提供する必要があります。統一されたサービス アドレスは、サービスを通じて提供できます。サービスは、ラベル セレクターを通じてサービスを提供する Pod のグループと一致し、バックエンド Pod の変更をクライアントから分離します。

ポッドのライフサイクル

1. 保留中: ポッドはシステムによって認識されていますが、内部コンテナーはまだ作成されていません。これには、ノードへのスケジュール時間と、短時間続くイメージのダウンロード時間が含まれます。

2. 実行中: ポッドがノードにバインドされ (スケジュールが成功)、ポッド内のすべてのコンテナが作成されました。少なくとも 1 つのコンテナが実行中であるか、コンテナ プロセスが開始または再起動中です。 --ここで注意すべき点は、ポッドはすでに実行されているものの、内部コンテナが完全には利用できない可能性があるということです。そのため、コンテナの状態をさらに検出する必要があります。

3. 成功: このステータスはまれに表示されますが、ポッド内のすべてのコンテナが正常に終了し、再起動されないことを示します。

4. 失敗: ポッド内のすべてのコンテナが終了し、少なくとも 1 つのコンテナが異常終了します。 (終了時にゼロ以外の値が返されたか、システムが直接終了しました)

5. 不明: 何らかの理由によりポッドのステータスを取得できません。通信の問題が原因と考えられます。

一般的に言えば、ポッドの最も一般的な状態は最初の 2 つです。また、実行時にはコンテナの状態にさらに注意を払う必要があります。コンテナの状態を見てみましょう

ポッドリソースリストの定義

apiVersion: v1 #必須、バージョン番号、例: v1

kind: Pod #必須、Podなどのリソースタイプ

メタデータ: #必須、メタデータ

name: 文字列 #必須、ポッド名

namespace: 文字列 #Pod が属する名前空間。デフォルトは "default" です。

ラベル: #カスタムラベルリスト

spec: #Pod 内のコンテナの必須の詳細な定義

コンテナ: #必須、Pod 内のコンテナのリスト

- name: 文字列 #必須、コンテナ名

image: 文字列 #必須、コンテナイメージ名

imagePullPolicy: [ Always|Never|IfNotPresent ] #画像を取得するためのポリシー

command: [文字列] #コンテナの起動コマンドリスト。指定しない場合は、パッケージ化時に使用された起動コマンドが使用されます。

args: [文字列] #コンテナ起動コマンドパラメータリスト

workingDir: 文字列 #コンテナの作業ディレクトリ

volumeMounts: #コンテナ内のストレージボリューム構成にマウントします

- name: 文字列 #ポッドによって定義された共有ストレージボリュームの名前を参照し、volumes[]部分で定義されたボリューム名を使用します

mountPath: 文字列 #コンテナー内でストレージ ボリュームがマウントされる絶対パス。 512 文字未満にする必要があります。

readOnly: boolean #読み取り専用モードですか?

ポート: #公開する必要があるポートライブラリ番号のリスト

- name: 文字列 #ポート名

containerPort: int #コンテナがリッスンする必要があるポート番号

hostPort: int #コンテナが配置されているホストがリッスンする必要があるポート番号。デフォルトはコンテナと同じです

protocol: 文字列 #ポートプロトコル、TCP と UDP をサポート、デフォルトは TCP

env: #コンテナを実行する前に設定する必要がある環境変数のリスト

- name: 文字列 #環境変数名

value: 文字列 #環境変数の値

リソース: #リソース制限とリクエスト設定

制限: #リソース制限設定

cpu: 文字列 #CPU 制限 (コア数) は docker run --cpu-shares パラメータに使用されます

memory: 文字列 #メモリ制限。単位は Mib/Gib で、docker run --memory パラメータに使用されます。

リクエスト: #リソースリクエスト設定

cpu: 文字列 #CPU 要求、開始されたコンテナの初期使用可能数

メモリ: 文字列 #メモリ要求、コンテナ起動時の初期使用可能量

ライフサイクル: #ライフサイクルフック

postStart: #このフックはコンテナの起動直後に実行されます。実行が失敗した場合は、再起動戦略に従って再起動されます。

preStop: #このフックはコンテナが終了する前に実行されます。結果に関係なく、コンテナは終了します

livenessProbe: #Pod 内の各コンテナのヘルスチェックを設定します。検出が複数回応答に失敗すると、コンテナは自動的に再起動されます。

exec: #Podコンテナの検査モードをexecモードに設定する

command: [文字列] #execメソッドで指定する必要があるコマンドまたはスクリプト

httpGet: #Pod内の各コンテナのヘルスチェック方法をHttpGetに設定し、パスとポートを指定します

パス: 文字列

ポート: 番号

ホスト: 文字列

スキーム: 文字列

HTTPヘッダー:

- 名前: 文字列

値: 文字列

tcpSocket: #Pod 内の各コンテナのヘルスチェックモードを tcpSocket モードに設定します

ポート: 番号

initialDelaySeconds: 0 #コンテナ起動後の最初の検出にかかる時間(秒)

timeoutSeconds: 0 #コンテナヘルスチェックプローブへの応答を待つタイムアウト(秒単位、デフォルトは1秒)

periodSeconds: 0 #コンテナ監視チェックの定期的な検出時間を秒単位で設定します。デフォルトは10秒です。

成功しきい値: 0

失敗しきい値: 0

セキュリティコンテキスト:

特権: false

再起動ポリシー: [常に |決して | OnFailure] #Pod 再起動ポリシー

nodeName: <文字列> #NodeName を設定すると、指定された名前のノードに Pod がスケジュールされます。

nodeSelector: obeject #NodeSelectorを設定すると、このラベルを含むノードにPodをスケジュールすることになります

imagePullSecrets: #イメージをプルするときに使用するシークレット名。key:secretkey の形式で指定します。

- 名前: 文字列

hostNetwork: false #ホストネットワークモードを使用するかどうか。デフォルトは false です。true に設定すると、ホストネットワークを使用することを意味します。

volumes: #このポッド上の共有ストレージボリュームのリストを定義します

- name: 文字列 #共有ストレージボリューム名(ボリュームには多くの種類があります)

emptyDir: {} #emtyDir タイプのストレージ ボリューム。Pod と同じライフ サイクルを持つ一時ディレクトリ。 NULL値です

hostPath: 文字列 # ポッドがマウントされているホストのディレクトリを示す、hostPath タイプのストレージ ボリューム

path: 文字列 #Podが配置されているホストのディレクトリ。同じ期間にマウントされるディレクトリとして使用されます。

secret: #ストレージボリュームタイプはシークレットなので、クラスターと定義されたシークレットオブジェクトをコンテナにマウントします

秘密名: 文字列

アイテム:

- キー: 文字列

パス: 文字列

configMap: #ストレージボリュームタイプはconfigMapで、定義済みのconfigMapオブジェクトをコンテナにマウントします

名前: 文字列

アイテム:

- キー: 文字列

パス: 文字列

<<:  Kubernetes (K8S) 管理、グラフィカル インターフェース、Web UI

>>:  5Gとエッジコンピューティングの関係

推薦する

コードの最適化はどのように実現されますか?

コード最適化とは、Web ページの HTML ソース コードに必要な調整を加えて、ページの有効性を向...

頼林鋒と彼の115のクラウドディスク:成功を収める前に亡くなった?

115 会長兼CEO 頼 林鋒シナテクノロジーはわずか400語の発表文が、115 Cloud Dis...

サーバーレスコンピューティングはビジネスの成功に必要

企業内のテクノロジーや運用方法は、頻繁に変化します。もちろん、大きな変化が起こるたびに市場の動向に追...

Sharktech-高防御サーバー 10% オフ/デュアルチャネル E5-2670/32g メモリ/ロサンゼルス データセンター

Sharktech (Shark Data Center) は、ロサンゼルス データ センターのデュ...

ウェブマスターネットワークニュース:ジャイアントが「全額包」を開始、アリババのPPTVへの投資は完了間近

1. 販売者もJD POPプラットフォームをサポートすべき理由昨日はJDオープンプラットフォームのゴ...

GenAI はクラウド コンピューティングの ROI を向上できますか?

既存の企業は、クラウド コンピューティングの導入を検討する際にジレンマに直面します。メリットは魅力的...

WeChatロケーションマーケティングの現状と解決策の分析

Weiboマーケティングが増加しており、WeChatマーケティングも本格化しています。しかし、大金を...

Googleの「江南スタイル」時代のGoogle PR大幅アップデート

Google PR 値は、ウェブマスターがフレンドリー リンクを交換するための基準の 1 つであるた...

2018 年のクラウドに関する 10 の予測

未来に焦点を当てるIT 環境が進化し、顧客が重要なアプリケーションとインフラストラクチャを大規模から...

ジュフアサンの総経理が拘束され、共同購入業界のグレーな利権連鎖が表面化

共同購入業界におけるグレーな利害関係の連鎖が明るみに出ている。アリババグループは昨日、杭州警察が巨華...

医療業界は「微博をコントロールする」から「微博をコントロールする」まで、ほんの数ステップで済む。

バスの中で携帯電話を手に持ち、自分の生活をライブストリーミングしている男女をよく見かけます。彼らは典...

WeChatは世界の未来です。それを掴めるかどうかはあなた次第です。

私たち中国人の多くは自慢するのが好きですが、本当に知識が豊富な人というのは、大抵あまり目立たない人た...

Google の外国貿易ウェブサイトにランキングがないときは、次の 7 つのことを行うだけです

多くの外商ウェブサイトはGoogleキーワードランキングを行いたいが、どのように始めればよいか分から...

anynode: 新しい OpenVZ7 シリーズ、1g メモリ VPS が年間わずか 12 ドル、Alipay が利用可能

anynode は、OpenVZ7 仮想 VPS をベースにした新しい製品シリーズをリリースしました...

事例分析:中小規模の観光ウェブサイトを最適化する方法

BaiduによるQunarへの投資、AlibabaによるQyer.comへの投資、CtripとeLo...