Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kubernetes on Mesos Deep Dive [Japanese]

Mesos Meetup Tokyo #5 での発表資料です。主にMesosphere DC/OS 1.11のKubernetesパッケージについて。

  • Login to see the comments

Kubernetes on Mesos Deep Dive [Japanese]

  1. 1. Kubernetes on Mesos Deep Dive @jyoshise
  2. 2. おしながき • なぜMesosでKubernetesか • Kubernetes on Mesosの過去と現在 • どうデプロイされるか • セキュリティ • ネットワーク • 現時点での制約 • どんな人におすすめか • Marathonはどうなる
  3. 3. Kubernetes使ってますか? • 猫も杓子もk8sな昨今 • 私はMesos/Marathon勢ですが、k8s勢でもあります • 私ほどいろんなk8sを触ってる人もあんまいない気がする • 手作りクラスタ、minikube、kubeadm、GKE、EKS、AKS、SUSE CaaSP、 OpenShift、Docker EE、Rancher、Tectonic、Stackato4 • 触ったことはないけどPKS、CDK、などなど • いったいどれがええねん、て話は8月のCloud Native Daysでやります • でもぶっちゃけ難しくない?
  4. 4. なぜMesosでKubernetesか
  5. 5. なぜMesosでKubernetesか • そこにMesosがあるから
  6. 6. なぜMesosでKubernetesか • そこにMesosがあるから • Mesosは分散システムをうまいこと実行管理するためのもので • Kubernetesは分散システムだから • このセッションが終わるころにはなにかが見えてくるかも?
  7. 7. Kubernetes on Mesosの過去と 現在
  8. 8. かつて、kube-mesos-frameworkというものが あったそうじゃ • いちおうKubernetes公 式だった • IBMが中心になって開 発していた • 2016年公開 • 2017年、諸般の事情 によりアルファのま ま糸冬 了
  9. 9. 旧kube-mesos-frameworkが目指していた もの • ノードレベルのオートス ケーリング • ネットワークレイヤーの 分離 • コンテナサービスとビッ グデータサービスのリソ ースシェアリング • Myriad(YARN on Mesos)っ てありましたね Kubernetes on Mesos: Not Just Another Mesos Framework - Klaus Ma, IBM MesosCon Asia 2016
  10. 10. Mesosphereが本気を出したようだ • 2017年9月、DC/OSでK8sをサポ ートすると発表 • 2018年3月、DC/OS 1.11で KubernetesパッケージがGA • CNCFのCertified Kubernetes Installer
  11. 11. というわけで • ここから先はDC/OS 1.11のUniverseカタログになっている Kubernetesフレームワークの実装をベースに話をします。 • ちゃんとMesosのフレームワークになってます。
  12. 12. どうデプロイされるか
  13. 13. そもそもKubernetesって API server etcd Scheduler Controller Kubelet Docker Pod Kube-Proxy kubectl API User
  14. 14. ありがちな構成 (kubeadmとか) API server etcd Scheduler Controller Kubelet Docker Pod Kube-Proxy kubectl API User Master Node Worker Node
  15. 15. ありがちなHA (kubeadmとか) API server etcd Scheduler Controller Kubelet Docker Kube-Proxy Master Node Worker Node API server etcd Scheduler Controller Master Node API server etcd Scheduler Controller Master Node Kubelet Docker Kube-Proxy Worker Node LB LB
  16. 16. 要するに、Kubernetes自体が分散サービ スです。
  17. 17. ここにMesosのクラスタがあるじゃろ? (Masterはややこしいので割愛) Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave
  18. 18. そこにKubernetesを Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave API server etcd Scheduler Controller Kubelet Kube-Proxy
  19. 19. こうして Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave API server etcd Controller API server API server Scheduler Scheduler Scheduler Controller Controller etcd etcd Kubelet Kube-Proxy CoreDNS Kubelet Kube-Proxy CoreDNS Kubelet Kube-Proxy CoreDNS
  20. 20. こうじゃ! Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave Docker Mesos Slave API server etcd Controller API server API serverScheduler Scheduler Scheduler Controller Controller etcd etcd Kubelet Kube-Proxy CoreDNS Kubelet Kube-Proxy CoreDNS Kubelet Kube-Proxy CoreDNS
  21. 21. Kubernetesパッケージのインストール
  22. 22. Deploy Plan $ dcos kubernetes plan status deploy deploy (serial strategy) (IN_PROGRESS) ├─ etcd (serial strategy) (COMPLETE) │ ├─ etcd-0:[peer] (COMPLETE) │ ├─ etcd-1:[peer] (COMPLETE) │ └─ etcd-2:[peer] (COMPLETE) ├─ apiserver (parallel strategy) (STARTING) │ ├─ kube-apiserver-0:[instance] (STARTING) │ ├─ kube-apiserver-1:[instance] (STARTING) │ └─ kube-apiserver-2:[instance] (STARTING) ├─ mandatory-addons (serial strategy) (PENDING) │ ├─ mandatory-addons-0:[additional-cluster-role-bindings] (PENDING) │ ├─ mandatory-addons-0:[kube-dns] (PENDING) │ ├─ mandatory-addons-0:[metrics-server] (PENDING) │ ├─ mandatory-addons-0:[dashboard] (PENDING) │ └─ mandatory-addons-0:[ark] (PENDING) ├─ kubernetes-api-proxy (parallel strategy) (PENDING) │ └─ kubernetes-api-proxy-0:[install] (PENDING) ├─ controller-manager (parallel strategy) (PENDING) │ ├─ kube-controller-manager-0:[instance] (PENDING) │ ├─ kube-controller-manager-1:[instance] (PENDING) │ └─ kube-controller-manager-2:[instance] (PENDING) ├─ scheduler (parallel strategy) (PENDING) │ ├─ kube-scheduler-0:[instance] (PENDING) │ ├─ kube-scheduler-1:[instance] (PENDING) │ └─ kube-scheduler-2:[instance] (PENDING) ├─ node (parallel strategy) (PENDING) │ ├─ kube-node-0:[kube-proxy, coredns, kubelet] (PENDING) │ ├─ kube-node-1:[kube-proxy, coredns, kubelet] (PENDING) │ └─ kube-node-2:[kube-proxy, coredns, kubelet] (PENDING) └─ public-node (parallel strategy) (COMPLETE)
  23. 23. セキュリティ
  24. 24. TLS (コンポーネント間の認証と通信の暗号化) • etcdクラスタのピア間 • 暗号化は有効。相互認証は無効。 • etcdの証明書検証はホスト名ではなくIPアドレスで行われるため • etcd⇔kube-apiserver • 暗号化、相互認証ともに有効。 • その他
  25. 25. ユーザー管理、RBAC • Kubernetesパッケージをデプロイする際にauthentication modeを 指定 • AlwaysAllow (デフォルト) • RBAC • DC/OSのユーザーとKubernetesのRBACは統合されない • DC/OS側で用意するアカウントはKubernetesのサービスアカウントのみ • Kubernetes APIの”User” は、Kubernetes側で管理
  26. 26. ネットワーク
  27. 27. オーバーレイネットワーク • デフォルトのdcosネットワーク • CNIのサポート • CalicoはDC/OSパッケージとしても用意されているので導入 しやすい • ただしPolicy Enforcementを行うためにはDC/OS Enterpriseの認証機能と統合 する必要あり • その他、FlannelやWeaveなども使えるはず
  28. 28. クラスタ外からKube-APIへのアクセス • Public Network側にAPI を晒すにはPublic Agent でHAProxyを立てれば よい • ただし当然セキュリテ ィの考慮は必要 • ふつうのKubernetesと いうこと。 Public Agent Private Agent Private Agent API server クラスタ内ネットワークからはMesos DNS名でアクセスできる apiserver.kubernetes.l4lb.thisdcos.directory:6443 てきな HA Proxy
  29. 29. クラスタ外からPodへのアクセス • Kubernetes上でIngress Controllerを作成し、 Public Agent上にLBが展開 されるようにする • 各種Ingress Controllerが 利用可能 • Traefik • NGINX • HAProxy • Envoy • Istio • ALB • ふつうのKubernetesとい うこと。 Public Agent Private Agent Private Agent Ingress-LB Pod
  30. 30. 現時点での制約
  31. 31. 現時点での制約 (DC/OS Kubernetes 1.1.1-1.10.4) • 100ノードまで • ひとつのDC/OSクラスタ上にデプロイできるk8sクラスタはひと つだけ • Mesosの”role”とk8sのRBACを紐づけできない • 他のDC/OSやMesosのタスクからは、同じノードのkube-proxyに しかアクセスできない • 外部etcdクラスタは使えない • Cloud-providerはAWSだけ • GPUは非サポート
  32. 32. ハマったこと • 時刻同期すげー大事 • zookeeperに加えてetcdが動くので一瞬でも時刻がずれるとおかしなこ とになります。ローカルでピアを張りましょう • 社内Proxyすげー邪魔 • いろんなひとがインターネットにアクセスしに行くので、Proxyとか NoProxyとか設定が大変です。中間Transparent Proxyを立てましょう
  33. 33. どんな人におすすめか
  34. 34. どんな人におすすめか • 既にDC/OSを使っていてk8sも使ってみたい • k8sのデプロイとクラスタ管理がだるい。ちゃんとHAでサポー トされるk8sがほしい • k8s以外の分散ワークロードも動かしたいが個別にクラスタ管理 は大変 • k8sで動かすアプリケーションのバックエンドサービスとして cassandraとかHDFSとかkafkaとかsparkとか使いたい
  35. 35. Marathonはどうなる
  36. 36. Marathonはどうなる • そもそもMarathonはコンテナだけのためのものではない • Mesosネイティブな汎用タスクスケジューラー/エグゼキュータ ー • DC/OSの汎用フレームワークとしてたぶん今後も使われ続ける • コンテナ用途でも単純にスケールさせるだけならk8sよりお手軽 • ただし今後はどちらかというとDC/OSの機能のひとつとしてメ ンテナンスされていくようなので、コンテナオーケストレーシ ョンのエコシステムとしてはk8sのほうがより発展していくと思 われます
  37. 37. あざっした

×