Kubernetesサービスの概要と実装方法

Service(サービス)とは何ですか? Service(サービス)は、Kubernetesで最も重要なリソースオブジェクトの1つであり、サービスはアクセスポイントのアドレスを定義し、フロントエンドのアプリケーション(Pod)はこのアクセスポイントを使用してその背後にある一連のPodレプリカで構成されるクラスターインスタンスにアクセスします。 ServiceとそのバックエンドのPodレプリカの間の関係は、ラベルセレクターを使用して “シームレスな接続”を実現します。そして、RCの役割は実際には、Serviceのサービス能力とサービス品質が予想される基準にあることを保証することです。 Kubernetesが提供するマイクロサービスネットワークアーキテクチャ すべてのサービスを分析、識別し、システム内のすべてのサービスをマイクロサービスとしてモデル化することにより—Kubernetesサービス、最終的には、私たちのシステムは異なるビジネス機能を提供し、お互いに独立している複数のマイクロサービスユニットで構成されます。サービス間の通信はTCP/IPを介して行われ、強力な分散能力、弾力性のある拡張能力、耐障害性を備えています。 各Podには個別のIPアドレスが割り当てられ、各Podはクライアントがアクセスするための独自のエンドポイント(Pod IP+コンテナポート)を提供します。現在、複数のPodレプリカがアクセスを提供するためにクラスターを形成しました。 Kubernetesは、各Nodeにkube-proxyをインストールする必要があります。kube-proxyプロセスは実際にはスマートなソフトウェアロードバランサーであり、Serviceへのリクエストをバックエンドの特定のPodインスタンスに転送し、サービスの負荷分散とセッション維持メカニズムを内部で実装します。 Kubernetesは、非常に巧妙なデザインを考案しました。Serviceは負荷分散器のIPアドレスを共有するのではなく、各Serviceにはグローバルでユニークな仮想IPアドレスが割り当てられます。この仮想IPはCluster IPと呼ばれます。これにより、各サービスは”通信ノード”として一意のIPアドレスを持つことになり、サービス呼び出しは最も基本的なTCPネットワーク通信の問題に変わります。 Podのエンドポイントアドレスは、Podが破棄され、再作成されるたびに変更されます。新しいPodアドレスは以前の古いPodとは異なります。一方、Serviceが作成されると、Kubernetesは自動的に使用可能なCluster IPを割り当て、Serviceのライフサイクル全体でそのCluster IPが変更されないようにします。したがって、Serviceの名前とServiceのCluster IPアドレスをDNSドメインマッピングとして使用するだけで問題が解決します。…

Read More

KubernetesのPodライフサイクルと再起動ポリシーの理解方法

Podライフサイクルと再起動ポリシー Podは、そのライフサイクル全体でシステムによって定義されたさまざまな状態を経験します。 ステート 説明 Pending APIサーバーがPodを作成しましたが、Pod内の1つ以上のコンテナイメージが正常に作成されていません。 Running Pod内のすべてのコンテナが作成され、少なくとも1つのコンテナが実行中、起動中、または再起動中の状態です。 Succeeded Pod内のすべてのコンテナが正常に終了し、再起動は行われません。 Failed Pod内のすべてのコンテナが終了しましたが、少なくとも1つのコンテナが失敗ステータスで終了しました。 Unknown 何らかの理由でPodの状態を取得できません。ネットワーク通信の問題による可能性があります。 Podの再起動ポリシー…

Read More

KubernetesでConfigMapを使用したPod構成管理のベストプラクティス

各ポッドには、「一時停止コンテナ」と呼ばれる特別なコンテナが含まれています。一時停止コンテナに対応するイメージは、Kubernetesプラットフォームの一部です。一時停止コンテナに加えて、各ポッドには1つ以上の関連するユーザービジネスコンテナも含まれています。 Kubernetesがこのような特別な構造を持つPodの新しい概念を設計した理由 理由1: 一時停止コンテナは、ポッド全体のコンテナグループの状態を表すポッドのルートコンテナとして機能します。 理由2: ポッド内の複数のビジネスコンテナは、一時停止コンテナのIPと一時停止コンテナにアタッチされたボリュームを共有します。 Kubernetesは、各ポッドに「Pod IP」と呼ばれる一意のIPアドレスを割り当てます。ポッド内の複数のコンテナがポッドIPを共有します。Kubernetesは、クラスタ内の任意の2つのポッド間でTCP/IP経由の直接通信を有効にするために、基盤となるネットワークサポートが必要です。これは、仮想レイヤー2ネットワーク技術を使用して実現され、ポッド内のコンテナが他のホスト上のコンテナと直接通信できるようにします。 静的ポッドと通常のポッド 通常のポッド: 作成されると、通常のポッドはetcdに保存され、その後、Kubernetesマスターによって特定のノードにスケジュールされ、バインドされます。その後、対応するノード上のkubeletプロセスによって、ポッドは関連する一連のDockerコンテナにインスタンス化されます。ポッド内のコンテナが停止した場合、Kubernetesは自動的に問題を検出し、ポッドを再起動します(ポッド内のすべてのコンテナを再起動します)。ポッドが存在するノードがクラッシュした場合、ポッドは他のノードに再スケジュールされます。 静的ポッド: 静的ポッドはkubeletによって管理され、特定のノードのみに存在します。 これらはAPIサーバーを介して管理することはできず、ReplicationController(RC)、Deployment、またはDaemonSetと関連付けることはできません。また、kubeletはこれらに対してヘルスチェックを実行できません。静的ポッドは常にkubeletによって作成され、kubeletが存在するノードで常に実行されます。 静的ポッドを作成する方法は2つあります:設定ファイルを使用する方法とHTTPを使用する方法。…

Read More

Kubernetesの理解:特徴、アーキテクチャ、コンポーネントの解説

Kubernetesとは? Kubernetesは包括的な分散システムサポートプラットフォームです。これには、マルチレイヤーセキュリティ保護や入場制御メカニズム、マルチテナントアプリケーションサポート、透過的なサービス登録および検出メカニズム、組み込みのインテリジェントな負荷分散器、強力な障害検出および自己修復機能、サービスのローリングアップグレードおよびオンラインスケーリング機能、スケーラブルなリソース自動スケジューリングメカニズム、細かいリソースクォータ管理機能など、堅牢なクラスター管理機能が含まれます。同時に、Kubernetesは、開発、テスト、展開、運用監視などの様々な段階をカバーする完全な管理ツールセットを提供しています。そのため、Kubernetesはコンテナ技術に基づく新しい分散アーキテクチャの解決策であり、包括的な分散システム開発およびサポートプラットフォームとして機能します。 Kubernetesアーキテクチャ図 Kubernetes基本サービスの紹介 ここでは、Kubernetesの基本コンポーネントを簡単に紹介します。詳細な説明は後続の記事で提供されます! Kubernetesサービスの紹介 サービスは、分散クラスターアーキテクチャの中心です。サービスオブジェクトには、次の主要な特徴があります: 現在、サービスのプロセスは、外部でサービスを提供するためにSocket通信メソッドに基づいています。たとえば、redis、memcache、MySQL、Webサーバー、または特定のTCPサーバープロセスが特定のビジネスを実装しています。サービスは通常、複数の関連するサービスプロセスによって提供されますが、各サービスプロセスには独立したエンドポイント(IP +ポート)アクセスポイントがあります。これにより、バックエンドのサービスプロセスの数や、サービスプロセスが障害により別のマシンに再デプロイされるかどうかに関係なく、サービスの正常な呼び出しに影響を与えません。さらに重要なことは、このサービスが作成されると、それ以上変更されないということです。これは、Kubernetesクラスター内で、もはやサービスのIPアドレスの変更の問題を心配する必要がないことを意味します。 サーバーアクセス図 Kubernetesポッドの紹介 ポッドの概念: ポッドは、ノードと呼ばれる環境で実行されます。これは、プライベートまたはパブリッククラウドの仮想マシンまたは物理マシンである可能性があります。通常、1つのノードで数百のポッドが実行されます。次に、各ポッドはPauseと呼ばれる特別なコンテナを実行し、他のコンテナはビジネスコンテナです。これらのビジネスコンテナはPauseコンテナのネットワークスタックとVolumeマウントボリュームを共有するため、それらの間の通信とデータ交換が効率的に行われます。設計時には、この特徴を十分に活用して、関連のある一連のサービスプロセスを同じポッドに配置することができます。 すべてのポッドとその内部で実行されるコンテナがサービスにマッピングされるわけではありません。サービスを提供するポッドのグループのみがサービスにマッピングされます。 サービスとポッドの関係…

Read More

Kubernetesの理解についての概要: 発音、アーキテクチャ、コアコンポーネント

Kubernetesの理解についての概要 まず、Kubernetesの発音を知る必要があります。 多くの人々がKubernetesの発音について不確かなままです。私自身も以前は間違った発音をしていました。正しい発音はで、第三音節にアクセントがあります。発音: koo-ber-nay-tees。関連する議論はGitHubの問題で見つけることができます: https://github.com/kubernetes/kubernetes/issues/44308。 公式の略称は、”K8s”で、”ubernete”という8つの文字を8つの文字で置き換えて派生させた略称です。 これは実際にはシリコンバレーの命名習慣に関連しています。彼らは単語を略語化する習慣があり、その際には、初期の文字とスキップする文字数を取って、それをより古い世代にとって理解しにくくする意図があります。例えば、アマゾンの「Algorithms」は「A9」と略され、Kubernetesは「k8s」と略されます。これは、「k」の後に8文字をスキップして「s」に到達するため、「k8s」となります。 Kubernetesは、Googleの内部システムであるBorgから派生し、コンテナ中心のクラスター展開および管理システムを提供しています。Kubernetesの目標は、物理/仮想コンピューティング、ネットワーキング、およびストレージインフラストラクチャーのオーケストレーションの負担を排除し、アプリケーションオペレーターと開発者が完全にコンテナ中心のプリミティブに集中して自己サービスオペレーションに焦点を当てることです。Kubernetesはまた、カスタマイズされたワークフローや高度な自動化タスクを構築するための安定した、互換性のある基盤(プラットフォーム)を提供します。 Kubernetesには、マルチレイヤーセキュリティ保護および入場制御メカニズム、マルチテナントアプリケーションサポート機能、透過的なサービス登録および検出メカニズム、組み込みの負荷分散器、障害検出および自己修復機能、サービスのローリングアップグレードおよびオンラインスケーリング、スケーラブルなリソースオートスケジューリングメカニズム、および細かいリソースクォータ管理機能を含む包括的なクラスタ管理機能があります。 Kubernetesはまた、開発、展開テスト、操作モニタリングなど、開発者、展開者、およびオペレーターが利用する包括的な管理ツールも提供しています。 クラウドネイティブアプリケーションの基盤として、Kubernetesはクラウドオペレーティングシステムとして機能し、その重要性は明らかです。 Kubernetesのアーキテクチャ Kubernetesは主に以下の主要なコアコンポーネントで構成されています: 主要なコアコンポーネントに加えて、いくつかの推奨されるアドオンがあります:(更新中)

Read More