Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プライベートクラウドにおける Kubernetes デプロイパターン

O. Yuanying
September 07, 2018

プライベートクラウドにおける Kubernetes デプロイパターン

プライベートクラウドにおいて Kubernetes control plane を自前でデプロイする際のパターンです。

O. Yuanying

September 07, 2018
Tweet

More Decks by O. Yuanying

Other Decks in Technology

Transcript

  1. Who am I ? • OTSUKA, Motohiro / Yuanying ◦

    Z Lab Corporation ◦ 言語 ▪ Ruby (2007 - ) ▪ Python (2014 - ) ▪ Go (2017 - ) ◦ 趣味 ▪ ロードバイク (2009 - ) ▪ トライアスロン (2010 - )
  2. Server Server Server Server App App App App App App

    App App コンテナ (App+Env) を管理、配布。 (どちらかというと Ansible, Chef, Puppet が競合ソフトウェア?)
  3. apiserver etcd scheduler Pod name: hoge node: 01 Pod name:

    hoge Pod name: hoge Pod name: hoge node: 01
  4. apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name:

    fuga replica: 2 controller manager Pod name: hoge Pod name: hoge
  5. 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
  6. 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
  7. apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet controller manager

    cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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)
  13. 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)
  14. 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 に到達可能でなければならない!
  15. 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 などの ツールにて各コンポーネント をデプロイ。
  16. 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 を同居させてサーバ台 数削減。
  17. 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
  18. 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 にしただけ。
  19. 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
  20. 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 の機能を利用可能。
  21. 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. ローカルのマニフェストディレクトリ
  22. 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
  23. 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 外で行うことになる。
  24. 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
  25. 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 で動かすのが現在のスタンダード。
  26. 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 いくつかのデプロイツールでサポート。
  27. Self-hosted Kubernetes 化によるメリット 1. Small dependencies 2. Deployment consistency 3.

    Introspection 4. Cluster Upgrades 5. Easier Highly-Available Configurations
  28. Self-hosted Kubernetes 化によるメリット • Kubernetes の control plane を Kubernetes

    によって管理させることで、その他のデ プロイツールへの依存を排除し、インフラを含めた全てのアプリケーションの管理を Kubernetes へと一元化。 ◦ Kubernetes 上のアプリケーション管理のノウハウをそのままインフラである Kubernetes の管理に適 用可能。 ▪ HPA によるオートスケール ▪ オートヒーリング ▪ ロードバランシグ ▪ ローリングアップデート • アプリケーションをクラウドネイティブにするだけでなく、そのインフラもクラウドネイ ティブに。
  29. まとめ • アプリケーションはクラウドネイティブなアーキテクチャに。 ◦ Kubernetes 上で動かそう。 • Kubernetes のデプロイは? ◦

    トラディショナルに VM/ サーバ 上にペットのように可愛がる? ◦ パッケージマネージャでインストールして依存関係地獄に陥らないようにコンテナ化? ◦ 簡単に Kubernetes 上に乗せられるコンポーネントは Kubernetes で管理? ◦ 全てを Kubernetes で管理?