Kubernetes basic glossary — PartII

Kubernetes基本的な単語集 — PartII

gavin.zhou
7 min readJan 21, 2020

Kubernetesのコンセプトを理解するために知っておくべきKubernetes単語集です。

長いので2つに分けて投稿しています。

今回は2回目(最終章)です。Pod、ReplicaSet、デプロイメントのような用語を解説しています。

Pod

読者のみなさんは、既にコンテナのことをよく理解されていると思います。 問題は、Kubernetesはコンテナを直接実行しないため、どこかで実行される必要があるということです。 1つのコンテナ、複数のコンテナ、ただし同じイメージ、または複数の異なるイメージのコンテナを包んでいる構造は、ポッドと呼ばれます。

Podは、共有ストレージ(ボリューム)とネットワークを持つ1つ以上のコンテナーのグループと考えることができます。 IPアドレスとポートスペースを共有し、localhostを介してお互いを見つけることができます。 ただし、通常はポッドIPアドレスを介して相互にコミュニケーションを取っています。

Podは、デプロイメントの単位を表します。Kubernetes上のアプリケーションの単一インスタンスは、単一のコンテナ、または密接に結合されていてソースを共有する少数のコンテナで構成される場合があります。Podは基本的にクラスターで実行中のプロセスです。

複数のコンテナを単一のPodにグループ化することは、比較的高度な使用例だということを覚えておいてください。 このパターンは、コンテナが密結合されている特定のインスタンスでのみ使用してください。 たとえば、共有ボリューム内のファイルのWebサーバーとして機能するコンテナと、リモートソースからそれらのファイルをアップデートする別の「サイドカー」コンテナがあるような場合です。

ReplicaSet

各Podは、特定のアプリケーションの単一のインスタンスを実行することを目的としています。 アプリケーションを水平にスケーリングする(たとえば、複数のインスタンスを実行する)場合は、インスタンスごとに1つずつ、複数のPodを使用する必要があります。 Kubernetesでは、これは一般にreplicatioと呼ばれます。

ReplicaSetは、指定された数のPodが常に確実に実行されるようにします。 目的の数に達するために必要に応じてPodを作成および削除することにより、目的を果たします。 ReplicaSetが新しいPodを作成する必要がある場合、Podテンプレートを使用します。

Deployment

デプロイメントは、ReplicaSetを管理し、他の多くの便利な機能とともにポッドへ対しデクレラティブなアップデートをしてくれる上位概念です。 ReplicaSetsを直接使用する代わりに、Deploymentsを使用することをお勧めします。

デプロイメントは、ReplicaSetを持っており、デクレラティブなサーバー側のローリングアップデートを介してReplicaSetとそのPodを更新できるオブジェクトです。 ReplicaSetは独立して使用できますが、今日では主にポッドの作成、削除、アップデートをオーケストレーションするメカニズムとしてデプロイメントによって使用されています。 デプロイメントを使用する場合、デプロイメントが作成するReplicaSetの管理について心配する必要はありません。 デプロイメントはReplicaSetを所有および管理します。 そのため、ReplicaSetが必要な場合はDeploymentsを使用することをお勧めします。

さきほどの構造:

最後に、残りの概念を説明して、アプリケーションを運用環境にデプロイメントし、外部にエクスポーズするために必要なすべてを最終的に理解するときが来ました。

Service

Kubernetesのサービスは、Podのlogical set とそれらにアクセスするためのポリシーを定義するアブストラクションです。 サービスにより、ディペンデントPod間に疎結合を持つようになります。 サービスによって対象とされているPodのセットは通常、ラベル(グループ化のためにオブジェクトに付加されたキー/値のペア)によって決定されます。

各PodはユニークなIPアドレスを持っていますが、これらのIPはサービスなしではクラスターの外部に公開されません。 デフォルトでは、ポッドは基本的に他の世界から隔離されています。 サービスがあると、アプリケーションがトラフィックを受信できるようになります。

NodePort

NodePortは、クラスターのすべてのノード上で特定のポートを開きます。 ノードのIPアドレスのスタティックなポートでサービスを公開します。 その後、<NodeIp>:<NodePort>を要求することでそれにアクセスできます。 Kubernetesは、NodePort上の今から来るトラフィックをコンテナに透過的にルーティングします。

NodePortをコンフィギュアするとき、どのポートでそれが開き、どのポートがすべての要求を転送するターゲットポートであるかを指定する必要があります。 通常、ターゲットポートは、エクスポーズするコンテナのポートです。

Ingress

Ingressはアプリケーションへの外部トラフィックを許可します。 Kubernetesはpodと外部の世界を分離するため、実行中のポッドとコミュニケーションをとるためには通信用のチャネルを開く必要があるからです。 Ingressは、Kubernetesクラスターで実行されているサービスへの外部ユーザーのアクセス方法を管理するルーティングルールの収集物です。

Ingressは、クラスターの外部からクラスター内のサービスへのHTTPおよびHTTPSルートをエクスポーズします。 トラフィックルーティングは、Ingressで設定されたルールによってコントロールされます。 Ingressは、外部から接続可能なURLやロードバランストラフィックを提供し、トラフィックの負荷を分散し、SSLを終了し、ネームベースの仮想ホスティングを提供するようにコンフィギュアされます。

ClusterIssuer

Issuer(発行者)は、Let’s Encryptなどの署名済みx509証明書を取得できる認証局を表します。 クラスター内で証明書の発行を開始するには、少なくとも1つのClusterIssuerが必要です。

They are particularly useful when you want to provide the ability to obtain certificates from a central authority (e.g. Letsencrypt, or your internal CA) and you run single-tenant clusters.

中央機関(Letsencrypt、または内部CAなど)から証明書を取得する機能を提供する場合、および単一テナントクラスターを実行する場合に特に役立ちます。

説明したコンポーネントの階層は次のとおりです。

まとめ

ここまで読んでいただいたので、Kubernetesの基本的な概念にかなりご理解して頂いたと思います。まだまだ多くの要素がありますが、アプリケーションを実際にデプロイするための重要な要素はすでに理解して頂いたことでしょう。

それではいよいよこれらのコンポーネントをプログラムで使用して、最初のKubernetes設定を実装するときが来ました。 みなさんはもう理論をよく理解していだたいているので、コードの観点からKubernetes設定を行う方法を学び始める準備ができています。

Kubernetesの技術的な部分に関しても頑張って学んできましょう!

Orangesys.ioでは、kuberneteの運用、DevOps、監視のお手伝いをさせていただいています。ぜひ私たちにおまかせください。

--

--

No responses yet