Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

TripleO Deep Dive 1.1

TripleO Deep Dive 1.1

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

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

Takashi Kajinami

September 09, 2019
Tweet

More Decks by Takashi Kajinami

Other Decks in Technology

Transcript

  1. はじめに Tripleo Deep Dive: はじめに • この資料は、Cloud Native Days Tokyo

    2019 / OpenStack Days Tokyo 2019での発表資 料の修正・更新版です ◦ https://cloudnativedays.jp/cndt2019/ 2
  2. 自己紹介 Tripleo Deep Dive • 梶波 崇 (Takashi Kajinami) ◦ https://launchpad.net/~kajinamit

    ◦ https://github.com/kajinamit/ • Software Maintenance Engineer at Red Hat K.K. ◦ OpenStack/NFVのサポート • OpenStackは7年+ ◦ Storlets Core reviewer (現) https://wiki.openstack.org/wiki/Storlets ◦ Masakari Core reviewer (元) https://wiki.openstack.org/wiki/Masakari ◦ 最近はもっぱらTripleO 3
  3. Agenda Tripleo Deep Dive • 今日話すこと ◦ TripleOとは? ◦ TripleOのアーキテクチャ

    ◦ THT(tripleo-heat-templates)詳解 ◦ TripleOの使い方 • 今日話さないこと ◦ Update, Upgrade ◦ RHOSPでのサポート有無 • 注意してほしいこと ◦ 本資料はQueensリリースをベースに作成しています ◦ バージョンによっては記載内容と異なる場合があります 4
  4. OpenStackとは? Tripleo Deep Dive: TripleOとは? • 「クラウド(IaaS)を構築するためのOSS」 • 仮想マシン、ネットワーク、ストレージを APIにより管理する機能を提供

    ◦ 基本的にスコープはコントロールプレーンのみ ◦ リソース実体はKVM, ovsなどの既存ソフトウェアを利用 • 複数のプロジェクトから構成 ◦ Nova : 仮想マシン管理 ◦ Cinder : ストレージ管理 ◦ Neutron : ネットワーク管理 参考: https://www.openstack.org/ 6
  5. TripleOとは? Tripleo Deep Dive: TripleOとは? • TripleO = OpenStack On

    OpenStack • OpenStackを使ってOpenStackをインストールするプロジェクト ◦ HPが中心となりプロジェクトを立ち上げ、開発 ◦ Red Hat OpenStack Platformでもインストーラとして利用 • 複数リポジトリにより構成される ◦ python-tripleoclient : デプロイ操作用のCLIツール(openstackコマンドに統合) ◦ tripleo-common : ライブラリ、Template等 ◦ tripleo-heat-templates : デプロイ構成を規定するHeatテンプレート ◦ puppet-tripleo : 設定時のエントリーポイントとなるpuppet manifest 参考: https://wiki.openstack.org/wiki/TripleO 7
  6. TripleOの歩み Tripleo Deep Dive: TripleOとは? 8 Juno Kilo Liberty Mitaka

    Newton Ocata Pike Queens Rocky Stein Icehouse Icehouse Incubation Project化 Juno VIP対応 Kilo cinder-volume Act/Sby Liberty Release branch導入 Mitaka Mistral導入 TripleO UI追加 Newton Composable Role導入 Ironic、OVS-DPDK、SR-IOV対応 Ocata DB/MQのComposable Role対応 Octavia、OVN対応 Pike Overcloudのコンテナ化(一部) Keystone v2の廃止 Queens Overcloudのコンテナ化 Spine-leaf対応 Rocky Undercloudのコンテナ化 デプロイ処理のAnsible化 Train Stein Podman対応 OVNのデフォルト化
  7. Undercloud Overcloud TripleOのアーキテクチャ Tripleo Deep Dive: TripleOのアーキテクチャ • TripleOで構築したOpenStackは、2層のOpenStackより構成される ◦

    Undercloud: インストーラが動作するベアメタルクラウド ◦ Overcloud : Undercloud上のベアメタルインスタンスで構成された OpenStack Controller Baremetal Compute Baremetal Compute Baremetal Compute VM VM Server Server Server Server Controller Compute Storage 10
  8. TripleOが利用する既存コンポーネント Tripleo Deep Dive: TripleOのアーキテクチャ 11 コンポーネント名 用途 Heat テンプレートに従ったリソース

    (インスタンス等)の生成 インスタンス上のソフトウェア設定 Ironic ベアメタルインスタンスの生成 Swift Overcloud構成データ等の保管 Mistral ワークフローの実行 Kolla コンテナイメージのビルド • TripleOは、既存コンポーネントを活用してデプロイ処理を実現する ◦ TripleOのスコープは、構成・ワークフローの定義やツール群まで 一番重要!
  9. OpenStack Heat Tripleo Deep Dive: TripleOのアーキテクチャ • OpenStackにおけるOrchestration機能を提供するコンポーネント • 仮想マシン・ネットワーク等の

    OpenStackのリソースだけでなく、 仮想マシン上の設定な ど も管理できる ◦ OS::Heat::SoftwareConfig ▪ サーバ上で実行する処理 (ansible playbook等)を規定するリソース ◦ OS::Heat::SoftwareDeployment ▪ SoftwareConfigと実行するノード、パラメタを関連付けるリソース • TripleOでは、このSoftwareConfig/Deploymentの機能をフル活用して Overcloudの各 種設定を適用する 参考: https://wiki.openstack.org/wiki/Heat 12
  10. デプロイ処理の流れ(1) デプロイ準備 Tripleo Deep Dive: TripleOのアーキテクチャ 13 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template Templateを用意して $ openstack overcloud deploy …
  11. デプロイ処理の流れ(2) planの作成 Tripleo Deep Dive: TripleOのアーキテクチャ 14 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan openstack cli内でtemplateからplanを 作成してswiftに格納
  12. デプロイ処理の流れ(3) overcloudスタックの作成 Tripleo Deep Dive: TripleOのアーキテクチャ 15 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan openstack cliがHeatにスタックの作成 をリクエスト overcloud
  13. デプロイ処理の流れ(4) OSインストール Tripleo Deep Dive: TripleOのアーキテクチャ 16 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan OS overcloud HeatがIronic/Nova/Neutronを使ってベ アメタルインスタンスをデプロイ
  14. デプロイ処理の流れ(5) ネットワーク設定 Tripleo Deep Dive: TripleOのアーキテクチャ 17 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan OS nic設定 os-net-config os-collect-config overcloud SoftwareConfig/Deploymentリソースを 使ってnic設定スクリプトを実行
  15. デプロイ処理の流れ(6) ホスト・サービス設定 Tripleo Deep Dive: TripleOのアーキテクチャ 18 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan OS nic設定 ホスト設定 サービス設定 os-net-config os-collect-config puppet ansible overcloud SoftwareConfig/Deploymentリソースを 使いansibleを実行。ansibleからpuppet などを呼び出し設定適用
  16. デプロイ処理の流れ(7) コンテナの設定(Pike以降) Tripleo Deep Dive: TripleOのアーキテクチャ 19 Undercloud Overcloud Controller

    Server Server Swift Heat Ironic Nova Neutron openstack cli template plan OS nic設定 ホスト設定 コンテナ設定 os-net-config puppet サービス設定 os-collect-config ansible paunch puppet overcloud Pike以降ではansible内でコンテナの設 定も実行。 コンテナ設定はpaunchで管理
  17. デプロイ処理のAnsible化 (Rocky以降) Tripleo Deep Dive: TripleOのアーキテクチャ 20 Undercloud Overcloud Controller

    Server Server Swift Heat Mistral openstack cli template plan OS nic設定 ホスト設定 コンテナ設定 os-net-config puppet サービス設定 ansible paunch puppet overcloud ansible ソフトウェア設定をHeatからAnsibleに 切り出し。 MistralがPlaybookの実行を管理 参考: https://docs.openstack.org/tripleo-docs/latest/install/advanced_deployment/ansible_config_download.html
  18. THT(tripleo-heat-templates)とは? Tripleo Deep Dive: THT詳解 • Overcloudの構成を定義するHeatテンプレートコレクション (yamlの集合体) ◦ サーバの構成

    ◦ ネットワークの構成 ◦ サーバ上のソフトウェアの構成 • 一部yamlは、Jinja2によりRole情報・Network情報等から自動生成 ◦ foo.yaml : yamlファイル ◦ foo.j2.yaml, foo.j2 : jinja2 templateファイル • THTのデフォルトtemplate + 環境に合わせてカスタマイズした個別 templateを組み合わ せてOvercloudを構築する 参考: https://github.com/openstack/tripleo-heat-templates 22 (undercloud)$ openstack overcloud deploy --templates -e /home/stack/templates/storage-environment.yaml \ -e /home/stack/templates/network-environment.yaml ...
  19. Q. jinja2って何? A. こんな奴 Tripleo Deep Dive: THT詳解 23 {%-

    set primary_role = [roles[0]] -%} {%- for role in roles -%} {%- if 'primary' in role.tags and 'controller' in role.tags -%} {%- set _ = primary_role.pop() -%} {%- set _ = primary_role.append(role) -%} {%- endif -%} {%- endfor -%} {%- set primary_role_name = primary_role[0].name -%} ... resource_registry: # networks as defined in network_data.yaml {%- for network in networks if network.enabled|default(true) %} OS::TripleO::Network::{{network.name}}: ../network/{{network.name_lower|default(network.name.lower())}}.yaml {%- endfor %} # Port assignments for the VIPs {%- for network in networks if network.vip and network.enabled|default(true) %} OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}.yaml {%- endfor %} OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml ... 参考: http://jinja.pocoo.org/
  20. THTの中身 Tripleo Deep Dive: THT詳解 $ ls /usr/share/openstack-tripleo-heat-templates/ docker environments

    extraconfig firstboot network network_data.yaml overcloud.j2.yaml overcloud-resource-registry-puppet.j2.yaml puppet roles roles_data.yaml 24 個別templateサンプル Docker設定 Network定義 Puppet設定 Role定義 stack作成時のentrypoint 注. 簡単のため、一部のディレクトリ・ファイルを省略 注. Rocky以降でリファクタされた (docker, puppet -> deployment)
  21. Role定義(roles_data.yaml) Tripleo Deep Dive: THT詳解 • Role = 各サーバの役割 ◦

    Controller, Compute, ... • Role毎に必要リソース・パラメタを定義 ◦ 接続するネットワーク ◦ 起動するサービス ◦ ホスト名フォーマット • 物理サーバと物理サーバ上にデプロイする Roleは、 NovaのFlavorとIronicのcapabilitiesを利用して固定 25 - name: Controller ... networks: - External - InternalApi - Storage - StorageMgmt - Tenant ... default_route_networks: ['External'] HostnameFormatDefault: '%stackname%-controller-%index%' ... update_serial: 1 ServicesDefault: … - OS::TripleO::Services::NovaApi - OS::TripleO::Services::NovaConductor - OS::TripleO::Services::NovaConsoleauth - OS::TripleO::Services::NovaIronic - OS::TripleO::Services::NovaMetadata - OS::TripleO::Services::NovaPlacement - OS::TripleO::Services::NovaScheduler - OS::TripleO::Services::NovaVncProxy - OS::TripleO::Services::Ntp ... (undercloud)$ openstack flavor create --id auto … networker (undercloud)$ openstack flavor set ... --property "capabilities:profile"="networker" networker (undercloud)$ openstack baremetal node set --property capabilities='profile:networker,boot_option:local' ... roles_data.yamlより抜粋
  22. Network定義(network_data.yaml) Tripleo Deep Dive: THT詳解 • Overcloudが接続するL2ネットワークの定義 ◦ IPサブネット, VLANタグ,

    ... • 通信用途毎にネットワークを分離できる ◦ 標準で定義されるネットワークは右表を参照 • 構成に合わせた追加や無効化が可能 ◦ Storageネットワークの分割(iSCSI multipath) ◦ Stonith実行用のIPMIネットワークの追加 ◦ StorageManagementの無効化 26 - name: InternalApi name_lower: internal_api vip: true vlan: 20 ip_subnet: '172.16.2.0/24' allocation_pools: [{'start': '172.16.2.4', 'end': '172.16.2.250'}] ipv6_subnet: 'fd00:fd00:fd00:2000::/64' ipv6_allocation_pools: [{...}] - name: External ... 名前 用途 InternalAPI Internal/Admin Endpoint *1, 内部通信 Tenant 仮想マシン通信 External Public Endpoint, Floating IP Storage ストレージIO StorageManagement ストレージ同期通信 (Swift, Ceph) Management *2 管理作業 ControlPlane *3 TripleOによるデプロイメント・操作 *1 Keystoneのみadmin endpointはデフォルトで ControlPlaneを利用 *2 Managementネットワークは Optional *3 ControlPlaneはUndercloudインストール時に設定し、 network_data.yamlには 記載しないが、簡単のため記載 network_data.yamlより抜粋 標準で定義されるネットワーク一覧
  23. THTにおけるNetwork設定方法 Tripleo Deep Dive: THT詳解 • THTでは、Network情報がデフォルトで定義される • 一方で具体的なNetwork設定のためのリソースはデフォルトで無効化されている ◦

    作成がSkipされるOS::Heat::Noneリソースが割り当てられている  ⇨ Network関連リソースを定義する templateを別途作成/指定する必要がある 1. OS::TripleO::Network 2. OS::TripleO::[ROLE]::Net::SoftwareConfig 27
  24. OS::TripleO::Network Tripleo Deep Dive: THT詳解: THTにおけるNetwork設定方法(1) • Overcloudのネットワーク関連リソース (Neutronのリソースに相当) ◦

    OS::TripleO::Network::[NETWORK]Api ⇨Network + Subnet ◦ OS::TripleO::Network::Ports::[NETWORK]Api ⇨Port (サーバIP用) ◦ OS::TripleO::Network::Ports::[NETWORK]VipPort ⇨Port (VIP用) • THTリポジトリにおいて、 jinja2を使ったtemplateサンプルが提供されている ◦ environments/network-isolation.j2.yaml ⇨Neutronリソース定義 ◦ environments/network-environment.j2.yaml ⇨単一NICを利用する場合のパラメタ定義+NIC構成定義(後述) 28
  25. OS::TripleO::[NETWORK]::Net::SoftwareConfig Tripleo Deep Dive: THT詳解: THTにおけるNetwork設定方法(2) • サーバ上のインタフェース設定用のリソース ◦ サブネット*1,

    route ◦ VLAN ◦ ovs/Linux bond ◦ ovs/Linux bridge ◦ DNS • デフォルト無効のため、サーバのインタフェース構成に合わせ てtemplateを準備する必要がある • インタフェース設定は、 os-net-configによって実行*2 ◦ 構成情報はOvercloudノードの/etc/os-net-config.jsonに保管 ◦ 適用の様子は下記コマンド等で確認可能 29 resources: OsNetConfigImpl: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: get_file: ../../scripts/run-os-net-config.sh params: $network_config: network_config: - type: ovs_bridge name: br-ex use_dhcp: false ... members: - type: interface name: nic1 primary: true - type: vlan vlan_id: get_param: InternalApiNetworkVlanID addresses: - ip_netmask: get_param: InternalApiIpSubnet $ sudo os-net-config --noop -v -c /etc/os-net-config/config.json *1 各Networkのサブネットを指定することで、 Network内に作成した PortのIPが自動で選択される *2 Overcloudの各インタフェースの IP設定は、ノード初期インストール時の ControlPlaneでのIP割当 を除き、NeutronのDHCP機能を利用しない template記載例
  26. Puppet設定(puppet/services/*.yaml) Tripleo Deep Dive: THT詳解 • 設定ファイル生成のための Puppet実行パラメタ等を定義した template ◦

    config_settings : Hieradata ◦ step_config : 有効化するモジュール 30 outputs: role_data: value: service_name: keystone config_settings: map_merge: - get_attr: [ApacheServiceBase, role_data, config_settings] - keystone::database_connection: …. keystone::admin_token: {get_param: AdminToken} keystone::admin_password: {get_param: AdminPassword} keystone::roles::admin::password: {get_param: AdminPassword} keystone::policy::policies: {get_param: KeystonePolicies} … step_config: | include ::tripleo::profile::base::keystone puppet/services/keystone.yaml より抜粋 (tripleo-heat-templates) class keystone::roles::admin( $password, $email = 'admin@localhost', $admin = 'admin', $admin_tenant = 'openstack', ... ) { ... manifests/roles/admin.pp より抜粋 (puppet-keystone) manifests/profile/base/keystone.pp より抜粋 (puppet-tripleo) class tripleo::profile::base::keystone ( … ) { include ::keystone::config ... class { '::keystone::roles::admin': admin_roles => $admin_roles, } ….
  27. Docker設定(docker/services/*.yaml) Tripleo Deep Dive: THT詳解 • Dockerコンテナの起動パラメータを定 義したtemplate ◦ コマンド

    ◦ マウント ◦ ネットワーク • おおよそのコンテナでは kolla_startか らサービスを起動   →kolla_startに合わせた形式で    データが定義される 31 outputs: role_data: description: Role data for the Nova API role. value: ... kolla_config: /var/lib/kolla/config_files/nova_api.json: command: /usr/sbin/httpd -DFOREGROUND config_files: - source: "/var/lib/kolla/config_files/src/*" dest: "/" merge: true preserve_properties: true ... step_4: nova_api: start_order: 2 image: *nova_api_image net: host user: root privileged: true restart: always healthcheck: test: /openstack/healthcheck volumes: list_concat: - {get_attr: [ContainersCommon, volumes]} - {get_attr: [NovaApiLogging, volumes]} - - /var/lib/kolla/config_files/nova_api.json:/var/lib/kolla/config_files/config.json:ro - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro ... docker/services/nova-api.yamlより抜粋
  28. Deployment Stepとは? Tripleo Deep Dive: THT詳解 • ソフトウェア設定には依存関係がある 一般的なOpenStackのインストール手順 1.

    OS設定 2. ミドルウェア(DB、MQ)設定・起動・ユーザ作成 3. Keystone設定・起動・ユーザ作成 4. 各サービス(Nova, Neutron, ...)起動 • この依存関係を解決するのが Deployment Step ◦ 実体は依存関係が設定された Heatのリソース群 • THT, puppet-tripleoにて、Step毎に必要な処理を定義する ◦ Step1 ~ Step 5が存在 32
  29. Deployment Stepの概要 Tripleo Deep Dive: THT詳解 33 リソース名 設定内容 HostPrepTask

    ntp設定、NFS設定など Deployment Step1 Haproxy設定 Step2 Middleware(DB, RabbitMQ)設定 Step3 DBスキーマ投入、Keystone設定・起動 Step4 OpenStackサービス設定・起動 Step5 Pacemaker設定+サービス起動後の初期設定 *1 . Octavia有効化時等は Mistralによって実行される WorkflowTaskStepNが追加で利用される。
  30. TripleOによるデプロイ作業 Tripleo Deep Dive: TripleOの使い方 ⇨詳細はこちら! https://docs.openstack.org/tripleo-docs/latest/install/ 35 # python-tripleoclientをインストール $

    sudo yum install -y python-tripleoclient # Undercloudをインストール $ openstack undercloud install # Overcloudデプロイ用のディスクイメージを登録 $ openstack overcloud image upload --image-path /home/stack/images/ # ベアメタルノードを登録 $ openstack overcloud node import instackenv.json # ベアメタルノードのスペックを収集 $ openstack overcloud node introspect --all-manageable --provide # Overcloudをデプロイ $ openstack overcloud deploy --templates -e /home/stack/templates/node-info.yaml\ -e /home/stack/templates/overcloud_images.yaml \ … # 完成! 読み込み順序に注意! (後のもので上書き)
  31. TripleOを使ったカスタマイズ Tripleo Deep Dive: TripleOの使い方 • 構成・設定をカスタマイズするための機構 1. TripleOのtemplate生成用パラメタを使うもの a.

    Role定義 b. Network定義 2. Heatのtemplateカスタマイズ機能を使うもの a. リソース定義 b. パラメタ定義 3. カスタマイズ用の特殊なリソースを使うもの a. ExtraConfig • 1は説明済みなので2, 3を説明 36
  32. リソース定義によるカスタマイズ Tripleo Deep Dive: TripleOの使い方: TripleOを使ったカスタマイズ • Roleに紐づくリソース一覧に対象が含まれる場合は、リソースに対する templateパスを 定義した個別templateを作成すればOK

    ◦ リソースを有効化する場合はリソースを定義する templateのパスを指定 ◦ リソースを無効化する場合は OS::Heat::None を指定 • Role定義に必要なリソースが定義されていない場合は、カスタム Roleの作成が必要 37 resource_registry: OS::TripleO::Services::IronicApi: ../../docker/services/ironic-api.yaml OS::TripleO::Services::IronicConductor: ../../docker/services/ironic-conductor.yaml OS::TripleO::Services::IronicPxe: ../../docker/services/ironic-pxe.yaml OS::TripleO::Services::NovaIronic: ../../docker/services/nova-ironic.yaml ... resource_registry: OS::TripleO::Services::CeilometerAgentCentral: OS::Heat::None OS::TripleO::Services::CeilometerAgentNotification: OS::Heat::None OS::TripleO::Services::CeilometerAgentIpmi: OS::Heat::None OS::TripleO::Services::ComputeCeilometerAgent: OS::Heat::None ... リソース有効化の例 environments/services/ironic.yaml リソース無効化の例 environments/disable-telemetry.yaml
  33. パラメタ定義によるカスタマイズ Tripleo Deep Dive: TripleOの使い方: TripleOを使ったカスタマイズ 38 1. THTパラメタの利用 parameter_defaults:

    Debug: true 3. Injection用のHieradataの利用*1 2. パラメタに対応したHieradataの利用 parameter_defaults: ComputeExtraConfig: nova::compute::vnc_keymap: ja parameter_defaults: ControllerExtraConfig: cinder::config::cinder_config: backend_default/use_multipath_for_image_xfer: value: true THTパラメタが ある Puppet Hieradataが ある *1 利用可否は Puppetの実装に依存。原則 OpenStack関連サービス (Horizon除く)のみ利用可。 Yes No Yes No • THT, Puppetでのパラメタの実装状況に応じて設定方法を選択
  34. カスタマイズ用の特殊なリソース Tripleo Deep Dive • スクリプト等が実行できるリソースが複数容易されている ◦ 実行タイミングや範囲が異なる ◦ スタック更新のたびに実行されるリソースでは、スクリプト等の冪等性に注意が必要

    39 リソース名 実行タイミング 契機 利用可能 Network リソースタイプ OS::TripleO::NodeUserData OS::TripleO::[ROLE]::NodeUserData ベアメタルノードデプロイ中 ノード デプロイ ControlPlane のみ OS::Nova::Server (に渡されるuser_data) OS::TripleO::PreNetworkConfig OS::TripleO::[ROLE]::PreNetworkConfig NodeUserData実行後 (個別定義)※1 ControlPlane のみ (個別定義) OS::TripleO::[ROLE]ExtraConfigPre ネットワーク設定完了後 (個別定義)※1 全Network OS::Heat::SoftwareDeploy ment OS::TripleO::NodeExtraConfig ネットワーク設定完了後 (個別定義)※1 全Network OS::Heat::SoftwareDeploy ment OS::TripleO::ExtraConfigPost ソフトウェア設定完了後 (個別定義)※1 全Network OS::Heat::SoftwareDeploy ment *1 リソース定義の actionsの設定内容により、初期デプロイのみ orスタック更新毎 などの制御が可能