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
  • Pod: コンテナの集合でデプロイの最小単位
    • ReplicaSet: 指定数のPodを維持する(Control Loop)
    • Deployment: ReplicaSetの管理, Podのローリングアップデート, ロールバック
    • Service: 外部向けIF, Podはipが変動するので
      • ClusterIP: Pod同士のprivate addr
      • NodePort: 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: 80
kubectl apply -f deployment.yaml
kubectl get deployments

Deployment が作成される.

リンク