Slide 1

Slide 1 text

Kubernetes on OpenStack におけるハマりどころ 株式会社アイリッジ 斎藤辰徳

Slide 2

Slide 2 text

斎藤辰徳 (iRidge, Inc., HN: bbrfkr) Hello! 2 大手SIerにて以下を経験し、現職へ ● VMwareを基礎とした仮想化基盤構築 ● IaCやコンテナ技術の案件適用推進 現職ではAWSに基軸をおき、以下のミッションを担う ● FargateやAuroraなどマネージドサービスを中心に Mobile Appインフラ開発・運用

Slide 3

Slide 3 text

? ◉ 事業 ○ O2O(Online to Offline)ソリューション開発 ○ O2Oアプリの企画・開発 ◉ 技術 ○ インフラ開発・運用 → AWS × コンテナ がメイン ○ Managed Serviceを積極活用したCloud Architecture ○ ECS CLIの国内トップレベルでの利用 AWS Fargate 3 Amazon ECS Amazon ECR Amazon Aurora Amazon Cognito AWS Lambda

Slide 4

Slide 4 text

Background 4 オンプレミスでKubernetesの機能を 最大限に活かしたい

Slide 5

Slide 5 text

Agenda ◉ マネージドKubernetesとセルフホストKubernetes ◉ セルフホストKubernetesとクラウド連携 ◉ ??? マネージドKubernetes ◉ デモ 5

Slide 6

Slide 6 text

パブリックマネージドKubernetes 6 EKS GKE AKS

Slide 7

Slide 7 text

AWS Cloud 7 ◉ Masterノードの管理が不要 ◉ クラウド上のリソースと連携が可能 ELB EFS ASG EBS cluster auto scaling provision, destroy provision, destroy, mount provision, destroy, mount パブリックマネージドKubernetes

Slide 8

Slide 8 text

パブリック セルフホスト Kubernetes プライベート マネージド Kubernetes 8 非パブリックマネージドKubernetes プライベート セルフホスト Kubernetes EC2 + GCE + VMware vSphere OpenStack Nova + + OpenStack Magnum ?

Slide 9

Slide 9 text

AWS Cloud 9 ◉ Masterノードの管理が必要 ◉ クラウド上のリソースと連携が可能 ELB EFS ASG EBS cluster auto scaling provision, destroy provision, destroy, mount provision, destroy, mount パブリックセルフホストKubernetes

Slide 10

Slide 10 text

VMware vSphere Infrastructure 10 ◉ Masterノードの管理が必要 ◉ クラウド上のリソースと連携が不可能な場合も cluster auto scaling provision, destroy provision, destroy, mount provision, destroy, mount プライベー卜セルフホストKubernetes ? ? ? ?

Slide 11

Slide 11 text

11 オンプレミスでは諦めるしかない…? 要はオンプレミスにクラウドが作れればいい

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

OpenStack Cloud 13 ◉ Masterノードの管理が必要 ◉ クラウド上のリソースと連携が可能な場合も provision, destroy,mount provision, destroy, mount プライベートセルフホストKubernetes provision, destroy Octavia Cinder Manila ?

Slide 14

Slide 14 text

14 ◉ kubeadm製の場合、以下の機能は使えないはず…! ○ type LoadBalancer Serviceの作成 ○ PersistentVolumeの動的なプロビジョニング ○ クラスタのオートスケーリング セルフホストKubernetesとクラウド連携 Kubernetesのリソースを監視し 必要に応じてクラウドリソースを作ったり消したりできればいい Cloud Controller Manager

Slide 15

Slide 15 text

15 ◉ --cloud-provider=externalオプション ○ 最近はcloud-providerを外だしする傾向に ○ 以下のコンポーネントで設定が必要 ■ kube-apiserver ■ kube-controller-manager ■ kubelet Cloud Controller Managerの設定

Slide 16

Slide 16 text

16 ◉ 以下のリポジトリをgit clone ○ https://github.com/kubernetes/cloud-provider-openstack Cloud Controller Managerの設定 ◉ cloud-configファイルを編集 & Secretに追加 $ cd manifests/controller-manager $ vi cloud-config $ sed -i "s/cloud.conf:.*/cloud.conf: $(base64 -w 0 cloud-config)/g" \ > cloud-config-secret.yaml $ kubectl apply -f .

Slide 17

Slide 17 text

17 ◉ cloud-configファイルのサンプル Cloud Controller Managerの設定 [Global] region=RegionOne username=admin password=password auth-url=https:/ /os-controller.iridge.bbrfkr:5000/v3 tenant-id=792f17824f504c17bf874ef07cb68db8 domain-id=default ca-file=/etc/ssl/certs/openstack-ca.crt [LoadBalancer] subnet-id=7f951334-e4a9-4e98-a914-7bea9feb42d3 floating-network-id=f8c7e902-afa5-4c94-a15a-a7c9241 0c4c6 use-octavia=true [BlockStorage] bs-version=auto 各サービスのエンドポイント にHTTPSでアクセスする場 合、CA証明書の指定が必 要 ロードバランサにOctaviaを 使う場合は必要

Slide 18

Slide 18 text

18 ◉ CSI Cinderドライバ ○ CinderでPVをDynamic Provisioning可能にする ○ 以下のコンポーネントで構成 (Kubernetes 1.14時代) ■ csi-attacher ■ csi-nodeplugin ■ csi-provisioner Cloud Controller Managerの設定

Slide 19

Slide 19 text

19 が、私の経験上 CSI Cinderが公式手順で動いたことは 一度もありません。。。!!

Slide 20

Slide 20 text

20 CSI CinderのCA証明書非対応問題

Slide 21

Slide 21 text

21 https:/ /github.com/bbrfkr/cloud-provider-openstack (stein-testブランチ)

Slide 22

Slide 22 text

パブリック セルフホスト Kubernetes プライベート マネージド Kubernetes 22 非パブリックマネージドKubernetes プライベート セルフホスト Kubernetes EC2 + GCE + VMware vSphere OpenStack Nova + + OpenStack Magnum

Slide 23

Slide 23 text

OpenStack Cloud 23 ◉ Masterノードの管理が不要(誰もやらないとはいってない ) ◉ クラウド上のリソースと連携が可能 cluster auto scaling provision, destroy provision, destroy, mount provision, destroy, mount プライベートマネージドKubernetes Magnum Octavia Cinder Manila

Slide 24

Slide 24 text

24 ◉ Heat(AWSにおけるCFn)のテンプレート集 Magnumの実体

Slide 25

Slide 25 text

25 Heat(とちょっとPython)知ってれば 自分でCluster driver作れるのでは?? Magnumもじゃじゃ馬。。。 (既存Cluster driverを動かすのに苦労)

Slide 26

Slide 26 text

26 https://github.com/bbrfkr/magnum (stein-testブランチ)

Slide 27

Slide 27 text

27 ◉ CentOS7/Kubernetes the Hard Wayベース ◉ 以下をプリインストール ○ CNI(flannel or calico) ○ CoreDNS ○ Cloud Controller Manager ◉ ただひたすらbashスクリプトで頑張る!(?) 自作Cluster driver

Slide 28

Slide 28 text

28 ◉ 作り方 1. driver.pyを書く 2. template_def.pyを書く 3. Heatテンプレートを書く 4. 構築用bashスクリプトを書く 5. version.pyを書く 自作Cluster driver ◉ 作り方 1. driver.pyを書く 2. template_def.pyを書く 3. Heatテンプレートを書く 4. 構築用bashスクリプトを書く 5. version.pyを書く

Slide 29

Slide 29 text

29 自作Cluster driver 「os」に呼び出すGlance Imageを定義 Glance Imageにはプロパティ 「os_distro」に同名をつけておく ◉ driver.py Heatテンプレートを呼び出す オブジェクトを返してあげる

Slide 30

Slide 30 text

30 自作Cluster driver ◉ template_def.py Heatテンプレートの所在を返す関数 Magnumから受け取るパラメータを 取り込み処理するモジュール

Slide 31

Slide 31 text

31 自作Cluster driver ◉ Heatテンプレート UserDataとしてひたすらbash スクリプトをロード

Slide 32

Slide 32 text

32

Slide 33

Slide 33 text

33 自作Cluster driver ◉ CSI Cinder ○ Cluster driverに特定ユーザ情報を入れたくない ○ trust-idで認証したいがデフォルトでできない

Slide 34

Slide 34 text

Magnum Kubernetes Cluster API LB etcd LB 34 自作Cluster driver ◉ どこまでできるか ○ 構築 ■ 複数ワーカーノード群 ■ HAマスターノード群 ■ API用LB ■ etcd用LB HA Masters PythonとHeatが書ければ どこまでも。。。 Multiple Workers

Slide 35

Slide 35 text

35 Demo 〜 OpenStack Magnum 〜

Slide 36

Slide 36 text

36 まとめ ◉ Kubernetesとクラウドとの連携は cloud-controller-managerがやっている ◉ c-c-mが動いた設定でもCSI Cinderは動かない ◉ Magnumの自作Cluster driverでKaaSを自作可能

Slide 37

Slide 37 text

質問があればお気軽に! ◉ Twitter: @bbrfkr ◉ GitHub: https://github.com/bbrfkr Thanks! 37