どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

【読んでみた】しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識(その1:理論)

前にDockerの勉強の延長線上で、ちょっとだけKubernetes (k8s)を勉強していました。

nogawanogawa.hatenablog.com

ただ、やっぱり一日本読んだくらいだとなかなか理解が足りていない部分が多かったので、今回はk8sだけに絞っておかわりします。 参考にしたのはこちら。選んだ理由は単純にAmazonの評価が良かったから。以上!!

しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識

しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識

Kubernetesの概要

導入とかも、上の本には書いてありますので詳しくは本をご参照ください。

コンセプト

k8sの大目標

本書の内容を引用すれば

  • システム構築の手作業を減らす
  • システムをセルフサービスで運用する

っていうのがk8sの開発者の思想らしく、これらを実現するための機能が実装されていると考えてください。

k8sの思想として特徴的なのは

  • Immutable Infrastructure
  • 宣言的設定
  • 自己修復機能

のようです。

コンポーネント

k8s公式の図を拝借すると、コンポーネントの概念はこんな感じになるそうです。

f:id:nogawanogawa:20190813223402p:plain

(引用: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

複数のコンテナの集合体。

f:id:nogawanogawa:20190804114619j:plain:w500

ReplicaSet

複数のPodの集合体。

Deployment

アプリケーションの配布単位を管理するもの。ReplicaSetとの大きな違いは、Deploymentでは世代管理ができる。

f:id:nogawanogawa:20190813230323p:plain:w500

(引用: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: 
[リソースの詳細]

このようなマニフェストファイルを使用してリソースのあるべき姿の設定をしていきます。

感想

先週はとりあえず使ってみるという感じの勉強をしていましたが、今回はもう少し体系的に勉強できました。 引き続き読み進めていきたいと思います。