Kubernetes in Docker で始めるお手軽 Kubernetes 環境 / cloudnativejp_09_kubernetes_in_docker_kind

Kubernetes in Docker で始めるお手軽 Kubernetes 環境 / cloudnativejp_09_kubernetes_in_docker_kind

Kubernetes の環境の選択でお困りですか?Docker for Mac、Minikube など色々な Kubernetes 環境がありますが、Kubernetes in Docker では 1 台のマシン上に複数台のからなるマルチノード Kubernetes クラスタを構築することが可能です。このセッションではkind でできることについてご紹介します。

De266761b955b2636e454a1bc7a99ed4?s=128

Masaya Aoyama (@amsy810)

August 07, 2019
Tweet

Transcript

  1. 1.

    Masaya Aoyama CyberAgent kind Ͱ࢝ΊΔ͓खܰ Kubernetes ؀ڥ ʙԶͨͪ͸งғؾͰ Local ͷ

    Kubernetes ؀ڥΛ࢖͍ͬͯΔʙ @Cloud Native Meetup Tokyo #9 amsy810 @amsy810
  2. 2.

    Publicity (一部抜粋)   書籍 『Kubernetes 完全ガイド』 『みんなの Docker/K8s』  基調講演 『Japan

    Container Days v18.04』 『Google Cloud K8s Day』   招待講演 『情報処理学会 コンピュータシステムシンポジウム』         『AWS Dev Day Tokyo』 『IBM Think Japan』 『JEITA 委員会』   登壇 『KubeCon + CNCon China 2019』 『Open Source Summit 2019』 等  資格 『CKAD #2』 『CKA #138』 Masaya Aoyama (@amsy810) Infrastructure Engineer Community   Co-chair 『Cloud Native Days Tokyo (旧 Japan Container Days)』  Organizer 『Cloud Native Meetup Tokyo』   『Kubernetes Meetup Tokyo』   『KubeCon Japanese exchange meeting』   Contribute to OpenStack and Kubernetes 主業務: K8s as a Service の実装 K8s / CloudNative 関連のアーキテクト + CREATIONLINE / DENSO - 技術アドバイザ + SAKURA Internet Research Center – 客員研究員
  3. 4.

    Local Kubernetes ͷબ୒ࢶ Docker for Mac https://docs.docker.com/ docker-for-mac/ microk8s https://microk8s.io/

    Minikube https://github.com/ kubernetes/minikube kind Kubernetes in Docker https://kind.sigs.k8s.io/
  4. 5.

    Docker for Mac by Docker, Inc. ワンクリックで Kubernetes を有効化可能 Mac

    上の Docker と同じレイヤに起動 •  = ビルド済みイメージがそのまま利⽤可能 •  spec.containers[].imagePullPolicy: Never/IfNotPresent “type: LoadBalancer” Service は localhost で binding •  1 Service のみ •  任意の 127.0.0.0/8 で binding してくれればいいのに…と思う
  5. 6.

    Docker for Mac by Docker, Inc. Mac 上の領域をコンテナにマウント可能 1 クラスタしか起動できない

    バージョンを選択できない •  Docker for Mac のバージョンに紐づく •  例) Docker 19.03.0-rc2 = Kubernetes v1.14.3
  6. 7.

    microk8s by Canonical Ltd. •  snap を利⽤するため Linux での利⽤前提 • 

    シングルノード Kubernetes を 1 コマンドでデプロイ •  バージョン指定可能 •  addon 機能 •  GPU Support
  7. 8.

    Minikube by Kubernetes SIG-Cluster-Lifecycle •  Node に VM を⽤いてシングルノード K8s

    を起動 •  マルチクラスタ対応 •  minikube start –p NAME •  Tunneling して ClusterIP Service に接続可能 •  minikube tunnel •  type: LB の場合は ClusterIP のエントリが書き込まれる •  Addon 機能 •  GPU サポート
  8. 9.

    kind by Kubernetes SIG-Testing •  マルチノード Kubernetes クラスタが構築可能 •  Node

    にVM ではなくコンテナを利⽤可能 •  googlability が最悪
  9. 11.

    dind – Docker in Docker •  Docker in Docker OS

    Docker Container Docker Container Container Docker Container Container Inner Outer
  10. 15.

    Kubernetes in Docker ͷ֓ཁ (3/4) OS Docker Container Docker /

    kubelet Container Docker / kubelet コンテナ上で Docker や kubelet などを起動し、 kubeadm を⽤いてクラスタを構成
  11. 16.

    Kubernetes in Docker ͷ֓ཁ (4/4) 構築した Kubernetes 上でコンテナを起動可能 OS Docker

    Container Docker / kubelet Container Container Docker / kubelet Container Container
  12. 19.

    ϊʔυҰཡͷදࣔ 各クラスタに割り当てられているノードを確認可能 # kind get nodes --name NAME sample-k8s-control-plane #

    kubectl get nodes \ --kubeconfig ~/.kube/kind-config-sample-k8s NAME STATUS ROLES AGE VERSION sample-k8s-control-plane Ready master 55s v1.15.0
  13. 20.

    ϚϧνϊʔυΫϥελͷߏங kind: Cluster apiVersion: kind.sigs.k8s.io/v1alpha3 nodes: - role: control-plane -

    role: control-plane - role: control-plane - role: worker - role: worker - role: worker https://github.com/kubernetes-sigs/kind/blob/master/pkg/apis/config/v1alpha3/types.go cluster.yaml # kind create cluster --config cluster.yaml # kind get nodes kind-control-plane kind-control-plane2 kind-control-plane3 kind-worker kind-worker2 kind-worker3 kind-external-load-balancer
  14. 22.

    ϩʔΧϧΠϝʔδΛ kind ʹΠϯϙʔτ # kind load docker-image IMAGE:TAG \ --name

    NAME --nodes a,b,c OS Docker Container Docker / kubelet Container Container Docker / kubelet Container Container img img img
  15. 23.

    extraPortMapping ホスト上のPort と NodeのPort のマッピングを⾏う = NodePort の利⽤が可能 kind: Cluster

    apiVersion: kind.sigs.k8s.io/v1alpha3 nodes: - role: control-plane - role: worker extraPortMappings: - containerPort: 8080 hostPort: 8181 listenAddress: ”0.0.0.0” protocol: tcp OS Docker Container Docker / kubelet Container Container 8080 8181
  16. 24.

    kubeadm config ͷมߋ kubeadm の設定を上書き可能 内部的には kustomize の Patch -

    kubeadmConfigPatches strategic merge patch - kubeadmConfigPatchesJson6902 https://tools.ietf.org/html/rfc6902 kind: Cluster apiVersion: kind.sigs.k8s.io/v1alpha3 kubeadmConfigPatches: - | apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration metadata: name: config apiServer: extraArgs: "feature-gates": ”..." scheduler: extraArgs: …
  17. 25.

    base-image / node-image # kind build node-image \ --kube-root ./kubernetes

    --image new-image:0.1 base-image   containerd や CNI Plugins などが含まれている   https://github.com/kubernetes-sigs/kind/blob/master/images/base/Dockerfile node-image base-image を元に任意の Kubernetes Release でビルド可能
  18. 26.

    Advantage Points •  マルチノードクラスタを構成可能 •  ソースコードからKubernetesリリースをビルド可能 •  make, bask, docker,

    bazel, apt(depricated) •  Kubernetes ⾃体の E2E でも利⽤可能 •  Go ⾔語で実装されおり、ライブラリとしても利⽤可能
  19. 28.
  20. 29.

    Conclusion of local 主な Local Kubernetes 環境の選択肢は 4 つ kind

    Minikube Docker for Mac MicroK8s バージョンの選択 ◎ ◦ × ◦ マルチクラスタ ◦ ◦ × × マルチノード ◦ × × × 機能性 ◦ ◎ △ ◎ シンプルさ ◦ ◦ ◎ ◦
  21. 31.