Slide 1

Slide 1 text

Masaya Aoyama CyberAgent kind Ͱ࢝ΊΔ͓खܰ Kubernetes ؀ڥ ʙԶͨͪ͸งғؾͰ Local ͷ Kubernetes ؀ڥΛ࢖͍ͬͯΔʙ @Cloud Native Meetup Tokyo #9 amsy810 @amsy810

Slide 2

Slide 2 text

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 – 客員研究員

Slide 3

Slide 3 text

Local Kubernetes

Slide 4

Slide 4 text

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/

Slide 5

Slide 5 text

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 してくれればいいのに…と思う

Slide 6

Slide 6 text

Docker for Mac by Docker, Inc. Mac 上の領域をコンテナにマウント可能 1 クラスタしか起動できない バージョンを選択できない •  Docker for Mac のバージョンに紐づく •  例) Docker 19.03.0-rc2 = Kubernetes v1.14.3

Slide 7

Slide 7 text

microk8s by Canonical Ltd. •  snap を利⽤するため Linux での利⽤前提 •  シングルノード Kubernetes を 1 コマンドでデプロイ •  バージョン指定可能 •  addon 機能 •  GPU Support

Slide 8

Slide 8 text

Minikube by Kubernetes SIG-Cluster-Lifecycle •  Node に VM を⽤いてシングルノード K8s を起動 •  マルチクラスタ対応 •  minikube start –p NAME •  Tunneling して ClusterIP Service に接続可能 •  minikube tunnel •  type: LB の場合は ClusterIP のエントリが書き込まれる •  Addon 機能 •  GPU サポート

Slide 9

Slide 9 text

kind by Kubernetes SIG-Testing •  マルチノード Kubernetes クラスタが構築可能 •  Node にVM ではなくコンテナを利⽤可能 •  googlability が最悪

Slide 10

Slide 10 text

Retired: kubeadm-dind-cluster https://github.com/kubernetes-retired/kubeadm-dind-cluster いわゆる kind と同等のプロダクト

Slide 11

Slide 11 text

dind – Docker in Docker •  Docker in Docker OS Docker Container Docker Container Container Docker Container Container Inner Outer

Slide 12

Slide 12 text

Kind (Kubernetes in Docker)

Slide 13

Slide 13 text

Kubernetes in Docker ͷ֓ཁ (1/4) Docker がインストールされたマシンを⽤意 OS Docker

Slide 14

Slide 14 text

Kubernetes in Docker ͷ֓ཁ (2/4) その上でコンテナを起動 OS Docker Container Container

Slide 15

Slide 15 text

Kubernetes in Docker ͷ֓ཁ (3/4) OS Docker Container Docker / kubelet Container Docker / kubelet コンテナ上で Docker や kubelet などを起動し、 kubeadm を⽤いてクラスタを構成

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

γϯάϧϊʔυΫϥελͷߏங kubeconfig は ~/.kube/kind-config-NAME •  kind get kubeconfig-path --name NAME でも確認可能 # kind create cluster --name NAME

Slide 18

Slide 18 text

ΫϥελͷҰཡදࣔ # kind get clusters sample-k8s ... kind で作成されているクラスタ⼀覧を確認可能 kind [create|delete] cluster --name NAME で作成|削除

Slide 19

Slide 19 text

ϊʔυҰཡͷදࣔ 各クラスタに割り当てられているノードを確認可能 # 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

Slide 20

Slide 20 text

ϚϧνϊʔυΫϥελͷߏங 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

Slide 21

Slide 21 text

ホスト OS との繋ぎこみ

Slide 22

Slide 22 text

ϩʔΧϧΠϝʔδΛ 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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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: …

Slide 25

Slide 25 text

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 でビルド可能

Slide 26

Slide 26 text

Advantage Points •  マルチノードクラスタを構成可能 •  ソースコードからKubernetesリリースをビルド可能 •  make, bask, docker, bazel, apt(depricated) •  Kubernetes ⾃体の E2E でも利⽤可能 •  Go ⾔語で実装されおり、ライブラリとしても利⽤可能

Slide 27

Slide 27 text

Note •  現状は docker のみをサポート

Slide 28

Slide 28 text

DEMO

Slide 29

Slide 29 text

Conclusion of local 主な Local Kubernetes 環境の選択肢は 4 つ kind Minikube Docker for Mac MicroK8s バージョンの選択 ◎ ○ × ○ マルチクラスタ ○ ○ × × マルチノード ○ × × × 機能性 ○ ◎ △ ◎ シンプルさ ○ ○ ◎ ○

Slide 30

Slide 30 text

Thank you for your attention Let’s enjoy with Kubernetes follow me: @amsy810

Slide 31

Slide 31 text

No content