[July Tech Festa 2019] Kubernetes on OpenStack におけるハマりどころ
by
bbrfkr
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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