Share
Embed
プライベートクラウドにおける Kubernetes デプロイパターン
プライベートクラウドにおいて Kubernetes control plane を自前でデプロイする際のパターンです。
O. Yuanying
September 07, 2018
Transcript
67 slides
-
プライベートクラウドにおける Kubernetes デプロイパターン OTSUKA, Motohiro / Yuanying Z Lab Corporation
Tech-on Meet Up #02 -
Agenda 1. 私 2. Kubernetes 3. Kubernetes アーキテクチャ 4. Kubernetes
デプロイパターン 5. まとめ -
Who am I ? • OTSUKA, Motohiro / Yuanying ◦
Z Lab Corporation ◦ 言語 ▪ Ruby (2007 - ) ▪ Python (2014 - ) ▪ Go (2017 - ) ◦ 趣味 ▪ ロードバイク (2009 - ) ▪ トライアスロン (2010 - ) -
Server Server Server Server App App App App App App
App App コンテナ (App+Env) を管理、配布。 (どちらかというと Ansible, Chef, Puppet が競合ソフトウェア?) -
apiserver etcd Pod name: hoge Pod name: hoge Pod name:
hoge Pod name: hoge -
apiserver etcd scheduler Pod name: hoge node: 01 Pod name:
hoge Pod name: hoge Pod name: hoge node: 01 -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name:
fuga replica: 2 controller manager -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name:
fuga replica: 2 controller manager Pod name: hoge Pod name: hoge -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name:
fuga replica: 2 controller manager Pod name: hoge node: 03 Pod name: hoge node: 04 -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name:
fuga replica: 2 controller manager Pod name: hoge node: 03 Pod name: hoge node: 04 -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet controller manager
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin -
apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet controller manager
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector • all containers can communicate with all other containers without NAT • all nodes can communicate with all containers (and vice-versa) without NAT • the IP that a container sees itself as is the same IP that others see it as 1. Cluster Networking -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 2. API Server (REST) -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 3. etcd (gRPC) -
apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet
cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 4. apiserver -> kubelet (REST) • apiserver から各 kubelet の REST の endpoint に到達可能でなければならない! -
master apiserver scheduler cm master apiserver scheduler cm node kubelet
node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin etcd etcd etcd etcd etcd etcd サーバには etcd/master などのロール が割り当てられる。 各コンポーネントはパッケージマネー ジャにてインストールされ、 init によっ て管理。 chef/ansible/puppet などの ツールにて各コンポーネント をデプロイ。 -
master apiserver scheduler cm master apiserver scheduler cm etcd etcd
master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin etcd と master を同居させてサーバ台 数削減。 -
master apiserver scheduler cm master apiserver scheduler cm etcd etcd
master apiserver scheduler cm etcd addons metrics-s ingress-c dns dashboad addons metrics-s ingress-c dns dashboad node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin -
master apiserver scheduler cm master apiserver scheduler cm etcd etcd
master apiserver scheduler cm etcd addons metrics-s ingress-c dns dashboad addons metrics-s ingress-c dns dashboad node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin 単に systemd の unit ファイル中の Exec を docker run にしただけ。 -
master apiserver scheduler cm master apiserver scheduler cm etcd etcd
master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c -
master apiserver scheduler cm master apiserver scheduler cm etcd etcd
master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c addon が Kubernetes の管理下になることで、 k8s エコシステム上での管理が可能に。 • Prometheus での監視を一元化。 • ログ収集を一元化。 • オートヒーリングやロードバランシングなど k8s の機能を利用可能。 -
Static Pods Node kubelet kube-apiserver Pod Manifest Pod Manifest IPC
Network PID Hostname cgroup cgroup Nginx Confd manifest directory Kubelet が Pod のマニフェストを読み込む場所 1. kube-apiserver 2. ローカルのマニフェストディレクトリ -
node kubelet node kubelet node kubelet node kubelet node kubelet
node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin -
node kubelet node kubelet node kubelet node kubelet node kubelet
node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin Kubernetes API で各コンポーネントの状態が把握可能。 ただし、ローリングアップデートなどは不可能、デプロイ自体 は k8s 外で行うことになる。 -
node kubelet node kubelet node kubelet node kubelet node kubelet
node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod Static Pod Static Pod DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin -
node kubelet node kubelet node kubelet node kubelet node kubelet
node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod Static Pod Static Pod DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin 必須 addons を k8s 上で動かし、コアコンポーネントを Static Pod で動かすのが現在のスタンダード。 -
node kubelet node kubelet node kubelet node kubelet node kubelet
node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment etcd etcd etcd DS apiserver apiserver apiserver Deployment scheduler scheduler Deployment cm cm いくつかのデプロイツールでサポート。 -
Self-hosted Kubernetes 化によるメリット 1. Small dependencies 2. Deployment consistency 3.
Introspection 4. Cluster Upgrades 5. Easier Highly-Available Configurations -
Self-hosted Kubernetes 化によるメリット • Kubernetes の control plane を Kubernetes
によって管理させることで、その他のデ プロイツールへの依存を排除し、インフラを含めた全てのアプリケーションの管理を Kubernetes へと一元化。 ◦ Kubernetes 上のアプリケーション管理のノウハウをそのままインフラである Kubernetes の管理に適 用可能。 ▪ HPA によるオートスケール ▪ オートヒーリング ▪ ロードバランシグ ▪ ローリングアップデート • アプリケーションをクラウドネイティブにするだけでなく、そのインフラもクラウドネイ ティブに。 -
まとめ • アプリケーションはクラウドネイティブなアーキテクチャに。 ◦ Kubernetes 上で動かそう。 • Kubernetes のデプロイは? ◦
トラディショナルに VM/ サーバ 上にペットのように可愛がる? ◦ パッケージマネージャでインストールして依存関係地獄に陥らないようにコンテナ化? ◦ 簡単に Kubernetes 上に乗せられるコンポーネントは Kubernetes で管理? ◦ 全てを Kubernetes で管理?