この記事では、k8s に関係する中核的な概念に焦点を当てています。これにより、読者は全体的な観点から k8s をすばやく理解でき、初心者が実際の業務で関連する作業に従事しやすくなります。 Docker と K8sDocker は最も広く使用されているコンテナ テクノロジーです。イメージをパッケージ化し、コンテナを起動することでサービスを作成します。 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
Google Cloud は最近、自社のクラウド プラットフォーム ユーザーが競合他社のクラウド プ...
最近、多くの人から次のような質問を受けています。先生、操作についてはある程度理解しているのですが、ま...
holderhostがHostcatに登場するのは今回が初めてです。簡単に説明すると、コンピュータル...
2012 年 3 月 5 日月曜日、著者は医療業界のウェブサイトの最適化方法を分析し、共通の特徴を発...
木は静かになりたいのに、風は止まない。ウェブマスターたちは百度からの攻撃に次から次へと直面し、対処に...
書くことはあまりないので、メモリの少ないVPSでメモリ不足の問題を解決する方法についてお話ししましょ...
A5 の Web サイトで「SEO は終わり、ソーシャル リアルタイム コンテンツが流行っている」と...
最近、私がSEOの基礎知識について語っていることに気づいた人もいるかもしれません。実は、SEOは基礎...
組織が単純なパブリック クラウド アーキテクチャを採用している場合でも、クラウド コンピューティング...
ASO は本当に難しいのでしょうか? たとえば、最近ある人が私に「 5,000 個のキーワードをカバ...
多くの人が、自分の夢はすべて「お金ができるまで待って」に基づいていると冗談を言うのと同じように、We...
URL 正規化について書いた後、Shangqi Company の Liu 氏は、301 リダイレク...
Dedipath の米国サーバーでは特別プロモーションを実施しており、西海岸のロサンゼルスと東海岸の...
最近、Cloud Native Computing Foundation (CNCF) 技術監視委員...
大王データは最新のプロモーションを実施しました。湖北省(武漢市十堰)と浙江省紹興市の高防御クラウドサ...