• 検索結果がありません。

OpenStack 環境における Container as a Service の提供と課題 株式会社サイバーエージェント アドテク本部 技術戦略室 Central Infrastructure Agency 青山 真也

N/A
N/A
Protected

Academic year: 2021

シェア "OpenStack 環境における Container as a Service の提供と課題 株式会社サイバーエージェント アドテク本部 技術戦略室 Central Infrastructure Agency 青山 真也"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

OpenStack 環境における

Container as a Service の提供と課題

株式会社サイバーエージェント

アドテク本部 技術戦略室 

Central Infrastructure Agency

青山 真也

(2)

自己紹介

•  青山 真也 (あおやま まさや) –  2016 年 4 月 サイバーエージェントに新卒入社 –  同 6 月 アドテク本部 技術戦略室 CIA へ配属 •  最近の業務内容 –  Container 周り –  OpenStack 周り •  OpenStack Summit Barcelona 2016

(3)

OpenStack Summit Barcelona 2016 について

参加レポートをまとめています

•  [OpenStack Summit Barcelona 2016] 新卒がミタ! コンテナ技術編 •  [OpenStack Summit Barcelona 2016] 新卒がミタ! 運用改善編 •  [OpenStack Summit Barcelona 2016] 新卒がミタ!先輩 OpenStackerと OpenStack コミュニティ編

hBp://adtech.cyberagent.io/techblog/

(4)

目次

•  弊社の現状の環境 •  様々なコンテナ技術と問題点 –  Docker, LXC (LXD) –  Kubernetes, COE –  Magnum, Kuryr, Midonet, Calico, ConPv •  弊社の要件と CaaS の構想

(5)

弊社の現状の環境

OpenStack によるプライベートクラウド(弊社アドテク本部単体) –  Over 25000 vCPUs •  シビアな性能を求められるのでオーバコミットはしていません –  Over 3500 VMs (with KVM) –  Over 500 Hosts コンテナ環境は 各テナントが VM 上に Kubernetes などのクラスタを構築 ↓ CaaS 環境の提供が必要

(6)

様々なコンテナ技術

•  Docker •  LXC (LXD) •  FreeBSD Jail •  etc. 現状では  アプリケーションコンテナ = Docker  システムコンテナ = LXC (LXD)

(7)

Docker って?

•  Docker Image をもとにしたアプリケーションコンテナ –  アプリケーション + 実行環境 •  ポータビリティ性が高い –  手元の開発環境のイメージをリモートのサーバにデプロイ –  Docker Hub(イメージ保管 + バージョン管理) •  高速なデプロイ –  数秒で起動 基本的にはスケールさせられるものでの利用が多い …どうやってスケールさせるか?

(8)

Container OrchestraPon Engine (COE)

Docker コンテナのオーケストレーションを行う –  スケールアウト、スケールイン、リソース管理 –  ロードバランシング、ヘルスチェック –  再デプロイ、ローリングアップデート 様々な Container OrchestraPon Engine –  Kubernetes –  Swarm –  Mesos –  etc.

(9)

ちなみに

… GCP GKE と AWS ECS

•  Google Container Engine (GKE) –  Google Compute Engine 上に Kubernetes クラスタを構築 •  Amazon EC2 Container Service (ECS) –  EC2 上に ECS クラスタを構築(独自のオーケストレーションツール) Google も Amazon も同様に COE を使った環境を提供している スケールさせない 1 コンテナの場合も COE に任せればいい

(10)

Kubernetes 仮想ネットワーク

NIC NIC External network docker0 docker0 Container-B Container-B Container-A Container-A 192.168.1.1 192.168.1.2 Kubernetes のコンテナクラスタへのアクセス方法は主に2パターン  (ReplicaPonController で作成される Pod への Service は主に 2 パターン)

(11)

コンテナクラスタへのアクセス

(1)

flannel internal network NIC NIC flannel.1 flannel.1 External network docker0 docker0 minion minion Container-B Container-B Container-A Container-A

flannel Internal network の VIP を利用(ClusterIP)

 ただし疎通する範囲は Kubenetes のクラスタ内からのみ  = 外部公開はできない 10.254.0.y:80 > Container-A:80 への LB 10.254.0.z:80 > Container-B:80 への LB 192.168.1.1 192.168.1.2

(12)

コンテナクラスタへのアクセス

(2)

NIC NIC External network docker0 docker0 Container-B Container-B Container-A Container-A External network を利用(ExternalIP, NodePort)  ポートフォワーディングする形  = 同じポート番号を使用できない 192.168.1.1 192.168.1.2 192.168.1.1:80 192.168.1.2:80 > Container-A:80 への LB 192.168.1.1:8080 192.168.1.2:8080 > Container-B:80 への LB

(13)

素の

Kubernetes で満たせない要件

•  ネットワーク的な機能要件 –  任意のポートが必要 –  外部疎通性のある IP が必要 –  コンテナごとに外部疎通性のある IP は必要ない? •  但し、コンテナごとにログイン or シェルが起動できることが望ましい •  その他必要そうな機能要件 –  認証 –  Quota –  セキュリティグループ –  Block Device 外部疎通性のある VIP が必要

(14)

弊社の要件

•  外部疎通性のある VIP が欲しい –  ポートは任意のものが使えるように •  積極的に L3 agent を使う理由はまだない •  各コンテナに入りたい –  SSH じゃなくても COE のノードにログインできればいい •  NW 分離、Security Group、認証、Quota、BlockDevice •  COE on VM は出来れば避けたい

(15)

有名どころな技術

CaaS の提供方法はいくつか存在 •  OpenStack 環境用 –  Magnum (Zun) + (Heat + Midonet) •  Internal Network の VIP に外部疎通性を持たせる方法 –  Kuryr + Midonet –  Calico •  その他検討した方式 –  ConPv –  Large Kubernetes Cluster

(16)
(17)

Magnum (+ Heat + Midonet)

Heat と L3 Network を使って COE クラスタを構築 –  インスタンスを作って Ansible/Chef で自動構築に近い ※ Heat: AWS CloudFormaPon に近いコンポーネント ※ 以前までコンテナの作成なども Magnum で行っていましたが、 Newton 以降方針が変わり、kubectl や docker swarm などの CLI で操作するか、 Zun を使って操作するようになりました。 nova-VM nova-VM nova-VM ・・・ COE クラスタ(k8s, swarm, etc)

(18)

Internal Network の VIP に

外部疎通性を持たせる方法

(19)

Midonet + Kuryr

Kubernetes クラスタへの変更を検知して Neutron を操作   外部からの疎通性がなかった VIP に FloaPng IP を利用可能 flannel internal network NIC NIC flannel.1 flannel.1 External network docker0 docker0 minion minion Container-B Container-B Container-A Container-A 192.168.1.1 192.168.1.2 VIP に対して FloaPngIP を利用可能

(20)

Internal Network の VIP を BGP 伝搬して外部から疎通性を持たせる

Calico

NIC NIC Kube-proxy External network BGP Peer docker0 Container-B Container-A docker0 Container-B Container-A VIP を External NW の BGP Routerに広報 BGP Router

(21)
(22)

ConPv (L2 mode)

コンテナの内部 NW を L2 透過で見せる  OpenStack 環境では難しい可能性も(未検証) Bridge Container Bridge Container AggrigaPon SW

(23)

Large Kubernetes Cluster

Kubernetes で巨大な1つの物理クラスタを構築

–  OK: Quota, 認証 (Keystone 連携) •  kubernetes の namespace 機能

–  NG: NW の分離, Security Group, Block Storage

•  ポートの奪い合いは前段に LB を配置して解決 Overlay (flannel + iptables + VXLAN) Container-B Container-A Container-B Container-C Container-C Container-A :10001 > Container-A:80 :10002 > Container-B:80 :10003 > Container-C:53 10.0.0.1:80 (VIP) > 192.168.0.1:10001 > 192.168.0.2:10001 > 192.168.0.3:10001 10.0.0.2:80 (VIP) > 192.168.0.1:10002 > 192.168.0.2:10002 > 192.168.0.3:10002 10.0.0.1:53 (VIP) > 192.168.0.1:10003 > 192.168.0.2:10003 > 192.168.0.3:10003

(24)

有名どころな解決方法

CaaS の提供方法はいくつか存在 •  OpenStack 環境用 –  Magnum (Zun) + (Heat + Midonet) Magnum 単体では k8s が構築できるだけ •  Internal Network の VIP に外部疎通性を持たせる方法 –  Kuryr + Midonet 機能的には十分だがまだ敷居が高い –  Calico 機能的には十分だがまだ敷居が高い •  その他検討した方式 障害時のデバッグが大変 情報が少なめ ProducPon Ready?

(25)

弊社の

CaaS 環境の構想

Overlay (flannel + iptables + VXLAN) Overlay (LVS+ iptables + VXLAN) Overlay (flannel + iptables + VXLAN) Container-B Container-A Container-B Container-C Container-C Container-A Overlay (LVS+ iptables + VXLAN) Container-B Container-A Container-B Container-C Container-C Container-A Tenant A Tenant B SNAT の LB を利用した 外部疎通性のある VIP OpenStack 上の各テナント毎に任意の COE クラスタ on nova-lxd Container ※ Docker Image は Swin バックエンドの docker-registry

(26)

弊社の要件

•  外部疎通性のある VIP が欲しい –  ポートは任意のものが使えるように •  積極的に L3 agent を使う理由はまだない •  各コンテナに入りたい –  SSH じゃなくても COE のノードにログインできればいい •  NW 分離、Security Group、認証、Quota、BlockDevice •  COE on VM は避けたい 物理の SNAT LB を利用 テナント毎に OpenStack 上に クラスタ構築 nova-lxd 上に構築

(27)

次期

OpenStack 環境に向けて

アプリケーション的な用途  Docker のアプリケーションコンテナ on nova-lxd 従来通りの VM 的用途  nova-lxd のシステムコンテナ KVM docker nova-lxd nova-lxd 【現状】 【次期環境】

(28)

まとめ

OpenStack では FloaPng IP が k8s の Service に bind できるのが自然 –  Kuryr + Midonet がコンセプト的には好み とはいえ、障害時のデバッグとかは大変そう… コードを追えるようになるには時間が足りない VIP/LB 周りとかは信頼性のある LB に任せたい 大幅なリスク低減、疎結合なアーキテクチャ

(29)

参照

関連したドキュメント

   (1)  取扱説明書、 仕様書、 弊社製品カタログなどに記載された以外の不当な条件、 環境、 取り扱い、 使用方法による場合   

このような情念の側面を取り扱わないことには それなりの理由がある。しかし、リードもまた

① 新株予約権行使時にお いて、当社または当社 子会社の取締役または 従業員その他これに準 ずる地位にあることを

ㅡ故障の内容によりまして、弊社の都合により「一部代替部品を使わ

「欲求とはけっしてある特定のモノへの欲求で はなくて、差異への欲求(社会的な意味への 欲望)であることを認めるなら、完全な満足な どというものは存在しない

○事業者 今回のアセスの図書の中で、現況並みに風環境を抑えるということを目標に、ま ずは、 この 80 番の青山の、国道 246 号沿いの風環境を

いてもらう権利﹂に関するものである︒また︑多数意見は本件の争点を歪曲した︒というのは︑第一に︑多数意見は

ぎり︑第三文の効力について疑問を唱えるものは見当たらないのは︑実質的には右のような理由によるものと思われ