Kubernetes
-
master-slaveモデル
- masterが死んでも動き続ける
-
Control Plane: クラスタ全体の管理
- kube-apiserver
- etcd
- Raft を使った分散KVS, 設定情報が保存されている
- kube-controller-manager
- kube-scheduler
- addons
-
Node: コンテナの稼働場所
component

構成
Node: コンテナが走るマシン- kubelet:
Podを起動する kube-proxy: 設定されたserviceに応じて、TCP/UDP通信を適切なpodにforwardするproxy
- kubelet:
Pod: コンテナの集合でデプロイの最小単位ReplicaSet: 指定数のPodを維持する(Control Loop)Deployment: ReplicaSetの管理, Podのローリングアップデート, ロールバックService: 外部向けIF, Podはipが変動するのでClusterIP: Pod同士のprivate addrNodePort: NodeのIP addrにポート番号を開放してクラスタ外からアクセスできるようにするLoadBalancer: 公開 + 各ノードに振り分けExternalName: Pod内から外部を参照したいとき- ex. DBはクラウドを使いたいなど
- Ingress
- 外部からのHTTPをServiceにルーティング, L7 LB(パスベース, TLS終端)
- ConfigMap
- 設定情報をコンテナに渡すために使用
- 2021-09-22 カスタムコントローラーの基礎
- コントローラ:リソース(eg. Pod)をあるべき状態に保つ
やりたい
manifest
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # Deployment名
labels:
app: nginx
spec:
replicas: 3 # Podの個数
selector:
matchLabels:
app: nginx # Deploymentが管理するPodのラベル
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2 # from DockerHub
ports:
- containerPort: 80kubectl apply -f deployment.yaml
kubectl get deploymentsで Deployment が作成される.