$30 off During Our Annual Pro Sale. View Details »

[July Tech Festa 2019] Kubernetes on OpenStack におけるハマりどころ

bbrfkr
December 08, 2019

[July Tech Festa 2019] Kubernetes on OpenStack におけるハマりどころ

July Tech Festa 2019の発表内容になります。
Kubernetesをオンプレミス(OpenStack)で利用する際に私がハマったポイントについての共有になります。

発表時の動画群

* [create cluster by magnum](https://youtu.be/2XeBIdZyco0)
* [check cluster by magnum](https://youtu.be/vIGQdPgHMaE)
* [create pvc](https://youtu.be/e19r6OXz9xY)
* [create loadbalancer](https://youtu.be/uXG-AlLI85g)

bbrfkr

December 08, 2019
Tweet

More Decks by bbrfkr

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. ?
    ◉ 事業
    ○ 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 12

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. 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 .

    View Slide

  17. 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を
    使う場合は必要

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. 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を書く

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. 32

    View Slide

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

    View Slide

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

    View Slide

  35. 35
    Demo
    〜 OpenStack Magnum 〜

    View Slide

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

    View Slide

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

    View Slide