Kubernetes アーキテクチャ まとめ

Kubernetest アーキテクチャ

MLOpsを仕事で扱っていきたいので、その周辺の技術を学んでいくシリーズです。

また下記の書籍を参考にしています。
Kubernetes完全ガイド (impress top gear)
チュートリアル
Learn Kubernetes Basics

 

Kubernetestのアーキテクチャ

下記7つのコンポーネントからなり、・kube-apiserverを中心とした分散システムになっています。
・etcd
・kube-apiserver
・kube-scheduler
・kube-controller-manager
・kubelet
・kube-proxy
・kube-dns

下記が全体図になっています。
※下記の書籍を参考にした
Kubernetes完全ガイド (impress top gear)

 

etcd

オープンソフトKey-Valu-Store(KVS)です。
Kubernetesのクラスに入る情報がこのetcdにすべて格納されるので、etcdのデータを守ることが非常に重要になってきます。
アクセス制限や秘密情報の暗号化が必要になるようです。
etcdへのアクセスを制限しよう

 

kube-apiserver

KubernetesのAPIを提供するコンポーネントです。
kubectlコマンドは、このkube-apiserverに対してリクエストを送ることで、Deployment, Serviceといったリソースを作成・削除できています。

例:
①開発者がマニフェストを適応する
②kube-apiserverからetcdにリソースが登録される
③Podリソースの情報をnodeに割り当てる
④kubeletが自ノードへ割り当てられたPodを検知する
⑤kubeletが起動していないPodを作成する

 

kube-scheduler

起動するノード情報が未割り当てのPodを検出し、kube-apiserverにリクエストを送って、更新することでスケジューリングを行います。
Image from Gyazo

下記記事より引用
Kubernetes: スケジューラの動作

 

kubelet

Kubernetes Node上で動作するコンポーネントです。
Dockerのコンテナランタイムを連携し、実際にコンテナの起動や停止を行います。

 

kube-proxy

Serviceリソースで作られた際に、ClusterIP、NodePort宛のトラフィックがPodに転送されるようにします。

転送方式

①ユーザーベースで処理
②iptablesで処理
③IPVSで処理

 

kube-dns

Kubernetesクラスタ内部の名前解決やサービスディスカバリにに利用されています。
sample-service.default.svc.cluster.localのように指定できます。

 

参考にした記事

Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetes: 構成コンポーネント一覧