SaltStack Config のインストールでは、SaltStack Config インストーラで提供されているオーケストレーション highstate を実行します。highstate は Salt マスターで実行され、マルチノード環境を設定します。これにより、PostgreSQL、Redis、および RaaS ノードをホストする他の 3 台のノードに、中核となる SaltStack Config アーキテクチャがインストールされます。

注目: コンテナへの SaltStack Config の展開はサポートされず、推奨もされません。

インストールの最終目標は、ホスト機能がそれぞれ異なる 4 台のノードを配置することです。以下の各ノードは、Salt マスターのミニオンでもあります。

  • Salt マスター ノード
  • PostgreSQL データベース ノード
  • Redis データベース ノード
  • RaaS ノード(別名 SaltStack Config ノード)
注意:

特に、ノードへの Salt のインストールに記載されているすべての手順を実行することが重要です。特に、SaltStack Config インストーラに必要な依存関係をインストールの 4 台のノードすべてにインストールする[必要があります]。これを実行しなかった場合、マルチノードのインストールは失敗します。

必要な依存関係は次のとおりです。

  • OpenSSL
  • Enterprise Linux 用拡張パッケージ (EPEL)
  • Python 暗号化
  • Python OpenSSL ライブラリ

高可用性

複数の Salt マスターまたは複数の RaaS ノードを設定できます。1 台のノードで Salt マスター サービスを実行し、別のノードで 2 つ以上の他のサービスを組み合わせることもできます。この種のシステム アーキテクチャを構成する手順については、このガイドでは詳しく説明していません。

高可用性やカスタム アーキテクチャの要件については、コンサルティング サービスが必要な場合があります。ただし、同じタイプの複数のノードを設定する前に、通常はマルチノード インストールのシナリオから始めて、後で追加のアーキテクチャを構成します。

高可用性の詳細については、SaltStack Config の必須の依存関係を参照してください。

4 台のノードに関する主要データの記録

標準インストールを開始する前に、インストールに関係する 4 台のノードそれぞれに関する主要なデータを記録します。このデータは、インストール プロセスの実行中に複数回入力します。

インストールに関係する 4 台のノードそれぞれに関する次の主要なデータを記録します。

  • IP アドレスまたは DNS 名
  • ミニオン ID

各 IP アドレスとミニオン ID が属しているホスト(Salt マスター ノード、RaaS ノード、PostgreSQL データベース ノード、Redis データベース ノード)を明確に示す必要があります。

IP アドレスまたは DNS 名が誤っているとマルチノード インストールが失敗する可能性があるため、ベスト プラクティスとして IP アドレスまたは DNS 名が正しいことを確認します。

このデータは、参照用としてアクセスしやすい場所に保存してください。オーケストレーションを構成するときに、このデータを構成ファイルのいくつかの設定や変数に入力する必要があります。そのため、インストールが終わるまでこの記録を手元に置いておくと便利です。

注:

仮想環境の場合は、パブリック アドレスではなく内部アドレスを指定するように注意します。

[固定 IP アドレスと動的 IP アドレス]

Redis および PostgreSQL ホストには、構成ファイルが参照する固定 IP アドレスまたは DNS 名が必要です。RaaS ノードの展開方法によっては、RaaS ノードにも固定 IP アドレスまたは DNS 名が必要になる場合があります。構成内で動的 IP アドレスに依存すると、環境が変化および破損する可能性があります。

[カスタム ミニオン ID の設定(オプション)]

ミニオン ID は、Salt マスターによって管理される各ミニオンに付けられる一意の名前です。デフォルトでは、ミニオンはシステムのホスト名によって Salt マスターから識別されます。ただし、機能やネットワーク内の場所を示すカスタムの ID を割り当てることができます。

ミニオン ID をカスタマイズする場合、ID はできるかぎり簡潔で、役割を説明するものにします。たとえば、Web サーバの 1 つに apache-server-1 という名前を付けたり、データセンター内の場所に基づいて datacenter-3-rack-2 を使用したりすることができます。名前を説明的なものにし、後で参照する際に分かりやすくすることが目的です。

ミニオン ID を宣言するには、次の手順に従います。

  1. ミニオンのターミナルで、ミニオンの minion.conf ファイルを含むディレクトリに移動します。デフォルトでは、ディレクトリの場所は etc/salt/minion.d です。
  2. エディタで minion.conf ファイルを開きます。id 設定を目的のミニオン ID に変更します。例:
    id: postgres-database-1
  3. ミニオン ID を変更した後、Salt マスターがミニオン キーを受け入れる(または再受け入れする)必要があります。キーを設定する具体的な手順については、マスターでのミニオン キーの受け入れを参照してください。

top 状態ファイルのコピーと編集

このインストール タスクでは、SaltStack Config インストーラで提供されるオーケストレーション ファイルを Salt マスター ノードにコピーします。次に、RaaS、Redis データベース、PostgreSQL データベースの 3 台のノードを参照するようにファイルを編集します。

オーケストレーション構成ファイルをコピーして編集するには、次の手順に従います。

  1. Salt マスターで、sse-installer ディレクトリに移動します。
  2. 次のコマンドを使用して、sse_installer ディレクトリから Salt マスターの pillar_roots および file_roots にピラー ファイルおよび状態ファイルをコピーします。
    sudo mkdir /srv/salt
    sudo cp -r salt/sse /srv/salt/
    sudo mkdir /srv/pillar
    sudo cp -r pillar/sse /srv/pillar/
    sudo cp -r pillar/top.sls /srv/pillar/
    sudo cp -r salt/top.sls /srv/salt/
    重要:

    これらの手順で前提としている状況は、既存の Salt インストールがある場合などには、実際のディレクトリ構造に当てはまらない可能性があります。この手順では、以下を前提としています。

    • Salt マスターがデフォルトのディレクトリ構造を採用している。ディレクトリ構造を変更してある場合は、カスタムのディレクトリ構造に合わせて以下の手順に対し変更が必要になる可能性があります。
    • ピラーと構成状態のどちらのルートにも sse という名前のフォルダがない。このフォルダがある場合は、手動によるマージが必要になる可能性があります。
    • pillar と salt のどちらのディレクトリにも top.sls という名前のファイルがない。このファイルがある場合は、既存のファイルとの手動によるマージが必要になる可能性があります。
  3. /srv/pillar/ ディレクトリには、前の手順でインストール ファイルからコピーした top.sls という名前のファイルがあります。エディタでこのファイルを開きます。
  4. このファイルを編集して、PostgreSQL、Redis、RaaS、Salt マスターのミニオン ID(IP アドレスまたは DNS 名ではなく)のリストを定義します。以前の手順で記録した ID を使用します。

    例:

    {# Pillar Top File #}
    
    {# Define SSE Servers #}
    
    {% load_yaml as sse_servers %}
      - postgres-database-1
      - redis-database-1
      - saltstack-enterprise-api-server-1
      - saltmaster-1
    {% endload %}
    
    base:
    
    {# Assign Pillar Data to SSE Servers #}
    {% for server in sse_servers %}
      '{{ server }}':
        - sse
    {% endfor %}
  5. これで、手順 2 でコピーした top.sls という名前のファイルが /srv/salt/ ディレクトリに配置されました。このファイルをエディタで開き、内容が以下と一致していることを確認します。
    base:
    
      {# Target SSE Servers, according to Pillar data #}
      # SSE PostgreSQL Server
      'I@sse_pg_server:{{ grains.id }}':
        - sse.eapi_database
    
      # SSE Redis Server
      'I@sse_redis_server:{{ grains.id }}':
        - sse.eapi_cache
    
      # SSE eAPI Servers
      'I@sse_eapi_servers:{{ grains.id }}':
        - sse.eapi_service
    
      # SSE Salt Masters
      'I@sse_salt_masters:{{ grains.id }}':
        - sse.eapi_plugin
    

ノードへの highstate の適用

  1. Salt マスターで Grain を同期して、各ミニオンにとって必要な Grain データが Salt マスターに含まれていることを確認します。この手順により、SaltStack Config が機能するためのピラー データが適切に生成されます。

    グレインを同期するコマンドでは、すべてのミニオンをターゲットにするか、ノード(Salt マスター自体を含む)の特定のミニオンの ID を引用符で囲んだリストを渡すことができます。例:

    すべてのミニオンをターゲットにする場合

    sudo salt \* saltutil.refresh_grains

    ミニオンのリストをターゲットにする場合

    sudo salt -L 'salt-master-1,postgres-database-1,redis-database-1,saltstack-enterprise-api-server-1' saltutil.refresh_grains
  2. 更新し、各ミニオンが sse_settings.yaml ファイルで定義されているピラー データを受信し、想定どおりに表示されることを確認します。

    ピラー データを更新するコマンドでは、すべてのミニオンをターゲットにするか、ノード(Salt マスター自体を含む)の特定のミニオンの ID を引用符で囲んだリストを渡すことができます。例:

    すべてのミニオンをターゲットにする場合

    sudo salt \* saltutil.refresh_pillar

    ミニオンのリストをターゲットにする場合

    sudo salt -L 'salt-master-1,postgres-database-1,redis-database-1,saltstack-enterprise-api-server-1' saltutil.refresh_pillar
  3. ピラーの戻りデータが正しいことを確認します。
    sudo salt \* pillar.items

    SaltStack Config に関連するピラー データが表示されることを確認します。

    注:

    また、特定のミニオンのピラー データをターゲットにして、そのピラー データが更新されたことを確認することもできます。

  4. オーケストレーション highstate を PostgreSQL サーバに適用するコマンドを実行します。以前の手順で記録した PostgreSQL サーバのミニオン ID を使用します。

    例:

    sudo salt postgres-database-1 state.highstate
  5. 次のサーバのそれぞれについて、サーバごとにミニオン ID を置き換えながら前の手順を繰り返します。
    • Redis ノード
    • RaaS ノード
    • Salt マスター ノード
    注:

    Salt マスターに highstate を最初に適用するときに、Authenticationerroroccurred というエラー メッセージが表示されることがあります。このエラーは Salt マスターが RaaS ノードに対してまだ認証されていないために表示されますが、マスター プラグインのインストール状態によって Salt マスター サービスが再起動され、問題は自動的に解決されます。

highstate の実行中に他のエラーが発生した場合は、トラブルシューティングページを参照してください。