Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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