Member-only story
つまりKubernetesの役割って?Part4
今回は Kubernetesの役割についての記事です。長い記事なので、5回に分けて投稿いたします。今回は第4回目です。
Other Kubernetes objects
ここまでで、Kubernetesの基礎知識として、2つの共通オブジェクトを取り上げました。PodsとDeploymentsです。しかし、Kubernetesを扱う際には、さらに多くのオブジェクトを扱うことになります。ここでは網羅的なリストは作成しませんが、Kubernetesの一般的なオブジェクトをいくつか見てみましょう。
Services
自分のPodの中で動作するコンテナのコレクションができました。さて、どうしましょう?
一般的には、何らかの方法でPodにアクセスしたいと思いますが、そのためにはPodのアドレスを特定できる必要があります。
ポッドのIPアドレスを調べて、それを使ってポッドにアクセスすることができます。しかし、それにはいくつかの問題があります。まず、Podは出入りが激しいので、IPアドレスも変わってしまいます。ポッドのIPアドレスが変わるたびに手動で追跡するのは不可能です。その代わりに、何らかの形でサービスを発見する必要があります。第二に、Podのデプロイメントを活用するためには、Pod間でトラフィックのロードバランスを取る必要があります。
サービスは、これらの活動を代行します。サービスは、ポッドの論理的な集合体と、それらにアクセスするためのポリシーを定義する軽量のk8sオブジェクトです。言い換えれば、サービスはPodやPodのグループに安定したアドレッシングが利用できるということです。サービスには主に2つのタイプがあります。
- ClusterIP Servicesは、Kubernetesクラスタ内のアクセスを提供します。つまり、同じクラスター内の異なるPodがお互いに見つけて通信できるようにするものです。
- NodePort Serviceは、クラスタの外部からのアクセスを提供します。例えば、NodePortサービスを使用すると、ローカルのWebブラウザを使って、クラスタ内に配備されたWebアプリケーションにアクセスすることができます。
他の k8s オブジェクトと同様に、YAML ファイル内で Service を定義し、kubectl を使って適用します。さらに、サービスは、アドレスを提供するPodを特定するために、上で見た「セレクタ」パターンに依存します。小さなYAMLファイルのサンプルは次のようなものです。
apiVersion: v1kind: Servicemetadata:name: my-app-external-servicespec:type: NodePort