前にDockerの勉強の延長線上で、ちょっとだけKubernetes (k8s)を勉強していました。
ただ、やっぱり一日本読んだくらいだとなかなか理解が足りていない部分が多かったので、今回はk8sだけに絞っておかわりします。 参考にしたのはこちら。選んだ理由は単純にAmazonの評価が良かったから。以上!!
しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識
- 作者: 阿佐志保,真壁徹
- 出版社/メーカー: 翔泳社
- 発売日: 2019/01/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの概要
導入とかも、上の本には書いてありますので詳しくは本をご参照ください。
コンセプト
k8sの大目標
本書の内容を引用すれば
- システム構築の手作業を減らす
- システムをセルフサービスで運用する
っていうのがk8sの開発者の思想らしく、これらを実現するための機能が実装されていると考えてください。
k8sの思想として特徴的なのは
- Immutable Infrastructure
- 宣言的設定
- 自己修復機能
のようです。
コンポーネント
k8s公式の図を拝借すると、コンポーネントの概念はこんな感じになるそうです。
(引用:https://kubernetes.io/docs/concepts/architecture/cloud-controller/)
APIサーバー
k8sのリソース情報を管理するためのAPI。
Scheduler
PodをどのNodeで動かすかを制御するbackend API 。
Controller
k8sクラスタの状態を監視し、あるべき状態を維持するbackend API。
etcd
k8sクラスタの構成を保持する分散KVS(Key Value Store)。
kubelet
Nodeで動作するエージェント。
kube-proxy
中継・変換を行うネットワークプロキシ。
リソース
k8sのDocumentによれば
A Kubernetes object is a “record of intent”–once you create the object, the Kubernetes system will constantly work to ensure that object exists.
とあります。"あるべき姿とその実体を抽象化したもの"とでも言うんでしょうかね。
実行に関するリソース
とりあえず本にかかれているリソースを挙げときます。 とりあえず一言コメントだけ残します。詳しくは本読んでください。
Pod
複数のコンテナの集合体。
ReplicaSet
複数のPodの集合体。
Deployment
アプリケーションの配布単位を管理するもの。ReplicaSetとの大きな違いは、Deploymentでは世代管理ができる。
(引用:https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/)
DaemonSet
Nodeごとに管理するデーモン。
StatefulSet
コンテナ内部の状態を保持するもの。
ネットワーク管理に関するリソース
クラスタ内外のネットワークに関するリソースもあります。
Service
k8s外部との接続を管理するリソース。ただし、L4層までの定義が行われる。
Ingress
k8s外部との接続を管理するリソース。Serviceとは異なり、L7層までの定義が行われるため、Httpでのアクセスも可能。
アプリケーション設定情報
ConfigMap
port番号やコマンド引数、構成ファイルなどをpodから参照できるように管理するリソース。
Secrets
特に暗号化したいデータを管理するリソース。
バッチジョブの管理
Job
1回限りで完了するバッチジョブを実行するためのリソース。
CronJob
決まったタイミングで繰り返すJobの実行に使われるリソース。
マニフェストファイル
上で紹介したリソースの"あるべき姿"はマニフェストファイルとして記述し、それを適用させていくやり方が一般的です。 マニフェストファイルは、こんな構成をしたyamlファイルです。
apiVersion: [APIバージョン情報] kind: [リソースの種類] metadata: name: [リソースの名前] spec: [リソースの詳細]
このようなマニフェストファイルを使用してリソースのあるべき姿の設定をしていきます。
感想
先週はとりあえず使ってみるという感じの勉強をしていましたが、今回はもう少し体系的に勉強できました。 引き続き読み進めていきたいと思います。