Kubernetes(AKS)をやさしく学ぶ旅 その5
今回はハンズオンなしです
前回、割とガッツリなハンズオンだったので今回は要点を押さえた座学?形式でまとめようと思います。
Kubernetes の仕組みを覚える為の用語たち
スケジューリングとディスカバリー
スケジューリング
アプリケーションを適切なところにデプロイする仕組みで個別の要件に合わせたものをマニフェストファイルで定義しクラスター内サーバーに(独自アルゴリズムで)デプロイする。
サービスディスカバリー
デプロイされたアプリケーションがどこにあるかを見つけだす仕組み。Kubernetes とセットのキーワードで良く挙げられる「マイクロサービス」型のアプリケーションでは小さな機能を提供する多数のサービスで組み合わされシステムを作る。その際のサービス間のやり取りを担う。サービスディスカバリーの種類としては「固定IPアドレス」や「構成レジストリ」が挙げられる。
Kubernetesのサーバー構成
Master
Kubernetes のクラスター全体を管理する役割を担う。Master は etcd と呼ばれる分散キーバリューストア(KVS)を使ってクラスターの構成情報を管理している。
Node
コンテナーアプリケーションを動作させるサーバー群。通常は Node を複数用意して、クラスターを構成する。クラウドでは仮想マシン(VM)インスタンスが Node になることが一般的。
と、ここまでをまとめるとこんな感じです。
図のように Master の API がクラスター全体を制御します。
Kubernetes のコンポーネントたち
Master
API Server
Kubernetes のリソース情報を管理するためのフロントエンドの REST API。各コンポーネントからリソース情報を受け取り、データストアである etcd に格納する役目を持っている。他のコンポーネントは etcd の情報に API Server を介してアクセスし、開発者/システム管理者がこの API Server にアクセスする際には kubectl コマンドを利用する。
Scheduler
Pod をどの Node で動かすかを制御するためのバックエンドコンポーネント。前回のその4 計5つの Pod をクラスターで動作させましたが、Kubernetes 内部では Scheduler によって Pod の配置先を割り当てていました。
Controller Manager
Controller Manager は Kubernetes クラスターの状態を監視し、あるべき状態の維持に努めるバックエンドコンポーネント。
データストア(etcd)
Kubernetes クラスターの構成を保持する分散KVS。Key - Value型でデータを管理する。マニフェストの内容が保存されるイメージを持つとよい。
Node
Kubelet
Node では kubelet というエージェントが動作しており、Pod の定義ファイルに従ってコンテナーを実行したりストレージをマウントしたりする機能を持つ。
kube-proxy
さまざまな中継、変換を行うネットワークプロキシ。
Kubernetes のリソースたち
アプリケーションの実行
Pod
Kubernetesでは複数のコンテナーをまとめて Pod という単位として管理する。Pod は Kubernetes においてアプリケーションのデプロイの単位となり、Pod の単位で作成や開始、停止や削除などを行う。
ReplicaSet
ReplicaSetはクラスター内で指定された Pod を起動しておく仕組み。起動中の Pod を監視し、何かしらの理由で停止してしまった場合に該当の Pod を削除し新たな Pod を起動するようにする。
Deployment
アプリケーションの配布単位を管理するもの。Deployment は ReplicaSet の履歴を持ち、Pod 内のコンテナーのバージョンアップを行いたい時に停止することなくローリングアップデートできる。また、ロールバック(1つ前の世代に戻す)もできる。
DaemonSet
ReplicaSet で Pod を配置する際には Node の選択ができないものの、「各 Node に Pod を1つずつ配置する」といった場合には DaemonSet で要件を叶える。
StatefulSet
基本的にコンテナーアプリケーションはステートレスであるが、データベースなど永続データと連携する場合は状態を保持する必要がある。その際に利用するのが StatefulSet。
ネットワークの管理
Service
Kubernetes クラスター内で起動した Pod に対してアクセスするときは Service を定義する。
Ingress
クラスター外部のネットワークからアクセスを受け付けるためのオブジェクト。
アプリケーション設定情報の管理
ConfigMap
アプリケーションの設定情報や構成ファイル等の固有識別情報を Pod から参照できる仕組み。
Secrets
ConfigMap と同様に構成情報をコンテナーアプリケーションに渡すものだが、DBに接続するときのパスワード他、秘匿性の高い情報を管理するときに利用。
バッチジョブの管理
Job
1つまたは複数の Pod で処理されるバッチ的なジョブ。
CronJob
決まったタイミングで繰り返す Job の実行に使われるリソース。
マニフェストファイル
Kubernetes は宣言的設定を行うときにマニフェストファイルを使用します。
マニフェストファイルの基本
Kubernetes ではクラスター内で動かすコンテナーアプリケーションやネットワークの設定、バッチ実行するジョブなどのリソースを作成します。リソースの具体的な設定情報はファイルで管理しておりそのファイルがマニフェストファイルです。(YAML形式)
ちなみに、マニフェストファイルをクラスターに登録する際は kubectl コマンドを利用します。
$ kubectl apply -f webserver.yaml
クライアントから受け取った命令をベースに Kubernetes Master の API Server が構成情報である etcd に書き込みます。ちなみに、クラスターから削除する場合は その4 でも実行しておりますが下記のコマンドで実現できます。
$ kubectl delete -f webserver.yaml
ちなみに、マニフェストファイルの書き方は下記が参考になります。
YAML はインデントでデータの階層構造を表すのでインデントが正常な形式でないとエラーになるので注意しましょう!私はそこで少しはまりました。。
その他、、
他にも Pod の管理に最適なラベル設定やリソースをまとめて仮想的に分離する Namespace という機能がありますがこれ以上書くと長くなってしまうので今回は割愛します・・・・。