Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenStack再入門「アーキテクチャ編」

 OpenStack再入門「アーキテクチャ編」

日本OpenStackユーザ会 第47回勉強会 発表資料です。

https://openstack-jp.connpass.com/event/311363/

Takashi Kajinami

March 14, 2024
Tweet

More Decks by Takashi Kajinami

Other Decks in Technology

Transcript

  1. 自己紹介 梶波 崇 (Takashi KAJINAMI) kajinamit kajinamit irc: tkajinam@OFTC Distinguished

    Cloud Engineer @ NTTデータグループ • クラウド基盤に関連した技術の研究開発を担当 • 現在のテーマはConfidential Computing OpenStackを中心にOSSコミュニティにて活動 • Heat(Orchestrationサービス) PTL • Oslo(共通ライブラリ) Release Liaison • Puppet OpenStack(OpenStack構築用のPuppetマニフェスト) PTL • Storlets(オブジェクトストレージ内でのアプリ実行エンジン) PTL PTL = Project Team Lead 2
  2. OpenStack*1とは • クラウドを『作る』ソフトウェア • IaaS機能が主だがPaaS機能も提供 • VMに加えベアメタルやコンテナにも対応し幅広いワークロードを支える • NASAとRackspaceにより開発されOSS化 •

    以降多くの企業が参画し機能拡張・コンポーネント追加 • 現在はOpenInfra Foundation*2傘下のプロジェクト • OpenStack Foundationが拡張した組織 • 他にZuul, StarginX, KATA Container等のプロジェクトが所属 • Apache 2.0ライセンスにて提供 *1 https://www.openstack.org *2 https://openinfra.dev 5 https://www.openstack.org/software/ より抜粋
  3. OpenStackの特徴 • リソース操作のためのREST APIをユーザに提供 • 基盤自動化のためのコア機能となる • Kubernetes等からも連携可能 • 複数のコンポーネントから構成される

    • 必要な機能を取捨選択してクラウド基盤組み立てる • コントロールプレーンを実装する • データプレーンは既存のOSSやプロダクトを活用 • 仮想マシン : QEMU + libvirt • ネットワーク : OVS + OVN • ストレージ : Ceph等 • 実装言語はPython • 一部UIにjavascript実装を含む 6
  4. 近年の動向 • コミット数や開発への参加企業数は2016年をピークに減少 • 企業数はピークの半分・コミット数はピークの1/4 • プロジェクト数も減少。今サイクルでは複数のプロジェクトがInactiveプロジェクトとされ終了候補に • EC2 API,

    Murano, Monasca, Sahara, Senlin • 新規機能数が減少する一方でOS・Python・ライブラリのバージョンアップ対応やUX改善は行われている • OpenStackの利用は増加している • 2022ユーザ調査*1では4000万CPUコア 300データセンターまで増加 • 大手Telcom企業の多くがOpenStackをバックボーンに利用 *1: https://www.openstack.org/user-survey/2022-user-survey-report/ 8 コミット数推移 https://www.stackalytics.io/ より取得 「作る」フェーズから「使う」フェーズに
  5. リリースサイクル • 半年に1回のリリースサイクル • リリースにはアルファベットに因んだリリース名を付与 • Austin -> Bexar ->

    Cactus -> Diablo -> Essex -> … • アルファベット一周後はYYYY.N 形式のリリース名を採用しつつ、アルファベット形式のコード名も付与 • 2023.1 Antelope, 2023.2 Bobcat, … • 次のリリースは 2024.1 Caracal • 4月ごろリリース予定 • 2023.1 Antelope からの直接Upgradeをサポート • 2023.2 BobcatをSkip可能 • 各リリースはリリース後1.5年間コミュニティによりサポートされセキュリティ修正・バグ修正がされる • 原則として機能バックポートはされない • 1.5年経過後は”Unmaintained”状態に (詳細は割愛) • 各ベンダーは独自にLTSを提供 9
  6. 利用方法 • 主要なLinux Distributionでパッケージが提供されている • CentOS (RDO)、Ubuntu、Debian • OpenSUSE向けパッケージはSUSEのOpenStack事業終了に伴い提供終了 •

    ベアメタル・Kubernetes上でのインストールツールが複数開発されている • devstack 注1 ・ OpenStack Helm • OpenStack Ansible ・ OpenStack Kubernetes Operator 注2 • Kolla + Kolla Ansible ・ Atmosphere 注3 • Puppet OpenStack • Packstack • OpenStack Charms 等々 詳細は割愛。需要があれば次回以降のテーマに 10 注1. 開発向けのソースコードによるインストールツール 注2. Red Hat社により開発中の外部のプロジェクト https://github.com/openstack-k8s-operators 注3. vexxhost社により開発されている外部のプロジェクト https://github.com/vexxhost/atmosphere
  7. コミュニティのリソース • Upstreamコミュニティ • メーリングリスト • リスト一覧: https://lists.openstack.org/mailman3/lists/ • openstack-announce:

    リリース等のアナウンス用 • openstack-discuss: 開発者および運用者の議論用 • 基本的に英語です • IRC • https://docs.openstack.org/contributors/common/irc.html • 初期はFreenodeを使っていたが運営の問題によりOFTCに移行 • プロジェクトごとにチャンネルがある。一覧は https://meetings.opendev.org/irclogs/ を参照 • スパム防止のためNickの登録が必要 • 設定例: https://www.oftc.net/Services/#nickserv • 日本ユーザ会 • Slack: openstack-jp-ops ←オススメ! • Google group: openstack-ja • 参加リンクは https://openstack.jp/how_to_join 11
  8. OpenStackのアーキテクチャの特徴 • 対象とするリソースごとにコンポーネントに分割されている • 必要に応じてコンポーネントを追加できる • ドライバ・プラグイン機構によって多種多様なバックエンドを選択可能 • ストレージ、SDN等が複数から選択可能 •

    複数のコンポーネントがREST APIによって連携する • コンポーネント間は疎結合になっており管理しやすい (が場合によっては複雑さの原因にもなる) • 各コンポーネントはデータベースとメッセージキューを中心としたマイクロサービスで構成 • 冗長性・拡張性を確保 13
  9. 1. Keystone • ユーザ認証を行うコンポーネント • APIアクセス用のTokenを払い出す • APIリクエスト時にはTokenをリクエストヘッダに挿入 • 各サービスは受け取ったTokenをKeystoneに問い合わせ

    • 権限や有効期限を確認して認可チェックを行う*1 • リソースが所属するプロジェクト(≒テナント)と、プロジェ クトに対するユーザの権限(role)を管理 • ユーザはプロジェクトに対してroleを割り当てられる*2 • admin, member, reader • roleが割り当てられたプロジェクトに対してのみ操作ができる • LDAP等の外部のユーザ管理機構との連携も可能 15 (1) Token払い出し token (2) 操作実行 (3) Token情報を取得 (4) 認可チェック実行 ユーザ Project A VM VM VM ユーザ Project B VM VM VM Project C VM VM VM user project role ユーザ Project A member ユーザ Project B reader (参照のみ) *1 認可ルールは各サービスの設定ファイルにて定義 *2 ユーザではなく所属するグループにroleを割り当てることも可能。またプロジェクト以外にシステムやドメインに対する roleも割り当て可能だが詳細は割愛
  10. 2. Nova • VMを管理するコンポーネント • OpenStackの中核 • ハイパーバイザで直接VMを操作するエージェントプロセス (nova-compute)を提供 •

    その他はAPI受付などの制御系プロセス • CinderやNeutronが準備したボリュームやネットワークを 実際にVMに繋ぐ • ハイパーバイザは選択可能だが libvirt + qemuが主流 16 VM コンピュート (ハイパーバイザ) VM コンピュート (ハイパーバイザ) コントローラ nova-api nova-conductor nova-scheduler nova-compute nova-compute ユーザ
  11. 3. Cinder • ボリュームを管理するコンポーネント • スナップショットやバックアップも取得可能 • 多数のドライバを提供し、ストレージ機器やSDSと連携 • RBD,

    NFS, … • NetApp, Dell EMC, Pure Storage, … • Novaと連携してVMに対するボリュームを提供 • Cinderの役割はストレージ機器内でのLUNのアクセス設定 • Novaがattachment情報を元にボリュームをVMに繋ぐ 17 *1 参考: https://docs.openstack.org/cinder/latest/configuration/block-storage/volume-drivers.html スナップショット ボリューム VM ハイパーバイザ ターゲット アクセス許可を 設定 ターゲットに接続し認識した ボリュームをVMにアタッチ cinder-api ユーザ cinder-volume cinder-scheduler コントローラ D社ストレージ N社ストレージ
  12. 4. Neutron • ネットワークを管理するコンポーネント • ネットワークに関連した複数のリソースを提供 • FWaaSやVPNaaSといったプラグインも存在 • LBaaSは独立プロジェクト(Octavia)

    • ネットワーク実装を選択できる複数のプラグインを提供 • 現在の主流(?)は ml2 ovnだがml2 ovsもまだ現役 • 各ノードでネットワークリソースを作成するエージェントプロ セスを提供 18 名前 説明 network ネットワークセグメント(vlanやvxlan) subnet IPサブネット(L2ネットワーク) port スイッチポート・インタフェース router subnetをつなぐルータ(L3) VM コンピュート (ハイパーバイザ) VM コンピュート (ハイパーバイザ) コントローラ neutron-server openvswitch-agent openvswitch-agent ユーザ ネットワーク l3-agent dhcp-agent openvswitch-agent
  13. 補足: VMネットワークの提供方法 • VMネットワークを提供する方法は大きく分けて2つある • Provider Network • 予め管理者が特定のVLAN or

    flatネットワークを作成しておく • VM作成時には作成済みのに接続する • 外部システムには直接接続する (スイッチでVLAN等を通しておく) VMを外部システムなどと直接通信させたい場合 • Self-service Network • 利用者が任意にネットワークを作成し、VMを接続する • tenant networkはvxlan等によって分離されクラスタ内に閉じる • 外部システムとの接続は仮想ルータを経由する(SNAT/DNAT) VMと外部との接続を制限したい場合 19 VM VM ←外部へ VM VM VM VM ←外部へ VM VM ルータ ルータ
  14. 5. Glance • ディスクイメージを管理するコンポーネント • raw, qcow2, vmdkなど複数のイメージフォーマットに対応 • VMやボリュームを作成する際は、Nova・Cinderがイメージを取

    得しディスクに書き込む • イメージには property と visibility が定義可能 • 一部のpropertyはVM起動時のオプション*1として認識される • 例. hw_vif_multiqueue_enabled • visibilityにより公開(public)や非公開(private)等を制御 • イメージの保管用のドライバ実装を複数提供 • swift, file, ceph, cinder, s3, gcs 20 *1 参考: https://docs.openstack.org/glance/latest/admin/useful-image-properties.html#image-property-keys-and-values VM ストレージ ハイパーバイザ ボリューム エフェメラルディスク ダウンロード 書込 書込
  15. 6. Placement • クラスタ内のリソースを管理するコンポーネント • 各ハイパーバイザのリソース総量・使用量を管理 • CPU、メモリ、ディスク、NW帯域、vGPU等 • リソース量以外にリソースの性質(trait)も管理

    • CPUアーキテクチャ、特定機能の有無等 • 主にNovaがVMの割り当て先を探すときに使う • NovaがVMの起動オプションからリソース量と traitを決定し、Placementに候補を問合せ 21 $ openstack resource provider list +-------+--------+------------+--------------------+----------------------+ | uuid | name | generation | root_provider_uuid | parent_provider_uuid | +-------+--------+------------+--------------------+----------------------+ | <id1> | comp01 | 255 | <id1> | None | | <id2> | comp02 | 255 | <id1> | None | +-------+--------+------------+--------------------+----------------------+ $ openstack resource provider inventory list <id1> +----------------+------------------+----------+----------+----------+-----------+-------+------+ | resource_class | allocation_ratio | min_unit | max_unit | reserved | step_size | total | used | +----------------+------------------+----------+----------+----------+-----------+-------+------+ | VCPU | 4.0 | 1 | 32 | 0 | 1 | 32 | 0 | | MEMORY_MB | 1.0 | 1 | 63783 | 512 | 1 | 63783 | 0 | | DISK_GB | 1.0 | 1 | 97 | 0 | 1 | 97 | 0 | +----------------+------------------+----------+----------+----------+-----------+-------+------+ $ openstack resource provider trait list <id> +---------------------------------------+ | name | +---------------------------------------+ | COMPUTE_NODE | | HW_CPU_X86_ABM | | COMPUTE_RESCUE_BFV | | HW_CPU_X86_BMI2 | | COMPUTE_STORAGE_BUS_USB | | COMPUTE_VOLUME_EXTEND | … +---------------------------------------+
  16. 7. Horizon • ウェブブラウザベースのGUI • Djangoにより実装 • ユーザ向け画面に加えadmin向け画面も備える • ユーザトークンをセッションに保存しAPI実行に利用

    • Horizon自体は基本的にステートレスなサービス • ただしセッション情報は共有して保存する必要がある • 外部認証プロバイダーと連携したSingle Sign Onにも対応 • KeystoneとHorizonに設定が必要 • 一部のサービスに対応したパネルを追加するプラグインも存在 • heat-dashboard, manila-ui, ironic-ui 22
  17. その他の主要コンポーネント 名前 概要 説明 Barbican 鍵管理サービス Cinderが使うボリュームの暗号鍵やOctaviaが使うTLS鍵等を格納する Ironic ベアメタルノード管理サービス Novaと連携し、ベアメタルインスタンスを提供する

    Designate DNS as a Service NovaやNeutronと連動しVMやFloating IPのレコードを自動挿入する。ユーザによる操作も可能。 Octavia Load Balancer as a Service haproxyが動作するLoad Balancer VMを起動する。 Manila Shared Filesystem as a Service VMから直接利用可能な共有ファイルシステムを提供する。 Heat オーケストレーションサービス 複数のリソースをテンプレートに記述しstackとしてデプロイ・管理する。 Ceilometer メトリック収集サービス VMの負荷データやリソースの使用状況を収集し、GnocchiやPrometheusに格納する。 Aodh アラーム管理サービス サービスからの通知やCeilometerにより収集したメトリック情報を元にアラーム通知を実行する。 Magnum COE as a Service OpenStack上のKubernetesの構築・管理を自動化する。 23
  18. 各コンポーネントの構造 • OpenStackの各コンポーネントは、データベースとメッ セージキューを中心としたマイクロサービスにより構成 • VM作成などの処理は非同期で実行される • プロセスは大きく2種に分類される • フロントエンド:

    REST APIを待ち受け • バックエンド: MQ内のメッセージを待ち受け • サービス間の連携はREST API経由 • 他サービスのDBやキューは直接アクセスしない • 共有Notification Bus等の例外はある 24 cinder-api cinder-scheduler glance-api cinder-volume ユーザ フロントエンド バックエンド メッセージ送信 DB参照 HTTPリクエスト
  19. openstack CLI • openstackの各種操作を実行するためのCLI • パッケージ名は大抵 python3-openstackclient • 認証情報を環境変数あるいは引数に指定 •

    最近のバージョンでは設定ファイル(clouds.yaml)も利用できる • リソースのCRUD(+α)の操作が行える • openstack <リソース> <操作> <以下オプション> の形式 • 詳細はhelpを参照 • 一部サービスは追加のプラグインインストールが必要 • python-heatclient, python-manilaclient , … 25 $ cat ~/.config/openstack/clouds.yaml clouds: demo: auth: auth_url: http://localhost:5000/ project_name: demo username: demo password: secrete region_name: RegionOne $ $ export OS_CLOUD=demo $ openstack server list … $ openstack server show myserver … $ openstack server delete myserver $ openstack server create ¥ --network mynetwork --image cirros ¥ --flavor m1.nano myserver $ $ openstack help $ openstack help server create
  20. 次回以降のネタ • アーキテクチャ深堀 • VM作成、Live Migrationなどの処理フローを追ってみる、など • 特定コンポーネント・プラグイン深堀 • ml2

    ovnは第46回勉強会のテーマだったのでその他 • インストールツール情報 • コミュニティではOpenStack Ansibleとかkolla-ansibleあたりがメジャーな様子 • NFV入門 • OpenStackにあるNFV向け機能を見てみる • アップストリーム入門 • ハンズオン or 相談会 or もくもく会 • 人材育成・チーム育成 • コミュニティの立ち上げ、ノウハウ蓄積・共有、勉強方法(ドキュメント等?) • ユースケース共有 ご要望(と発表者)お待ちしています 27