Configure Virtual Appliance for Migration Tool

3 ノードクラスタの作成

  1. プライマリノードコンソールにログインします。
  2. クラスタの各ノードのブートステータスを確認します。
    CODE
    appdctl show boot
    注:
    • appdctl show boot コマンドでエラーが表示される場合があります。このエラーを解決するには、数分後にコマンドを再度実行します。「トラブルシュート:appdctl show boot に表示されるエラー」を参照してください。

    • すべてのクラスターノードで同じ時刻を設定してください。

  3. プライマリノードで次のコマンドを実行し、ピアノードの IP アドレスを指定します。
    CODE
    cd /home/appduser
    appdctl cluster init <Node-2-IP> <Node-3-IP>
  4. ノードステータスを確認するには、次のコマンドを実行します。
    CODE
    appdctl show cluster
    microk8s status

    出力に、クラスタの一部であるノードの Running ステータスが true として表示されることを確認します。

    出力例

    CODE
    NODE           | ROLE  | RUNNING 
    ----------------+-------+---------
     10.0.0.1:19001 | voter | true    
     10.0.0.2:19001 | voter | true    
     10.0.0.3:19001 | voter | true
    注: 次のエラーが表示された場合は、端末に再ログインする必要があります。
    CODE
    Insufficient Permissions to Access Microk8s

DNS エントリの構成

Splunk AppDynamics コンポーネントの DNS 解決を確認します。次のスクリプトは、仮想アプライアンスでの通信の問題を引き起こす可能性のある一般的なネットワーク構成の問題を特定するのに役立ちます。特定のホスト名を IP アドレスに解決できるかどうかを確認します。これは、コントローラとそのサービスが適切に機能するために重要です。

globals.yaml.gotmpl に仮想アプライアンスのプライマリノードの IP アドレスが含まれていることを確認します。次のようにして globals.yaml.gotmpl ファイルを編集します。
  1. プライマリノードのコンソールにログインします。

  2. 次のフォルダに移動します。
    CODE
    cd /var/appd/config
  3. globals.yaml.gotmpl ファイルを編集し、dnsNamesdnsDomain を更新します。
    CODE
    vi globals.yaml.gotmpl

    仮想アプライアンスに設定する必要がある入力ドメイン名を一覧表示します。

    注:
    • クラスターにアクセスするには、appdcli のローカルホストを含める必要があります。ドメイン名が使用できない場合は、各クラスタに <nodeip>.nip.io を指定します。他の指定値に加えて、dnsDomain も値として含める必要があります。
    • 一部のネットワークポリシーでは、x.x.x.x.nip.io を含む IP アドレスがブロックされる場合があります。このようなシナリオでは、/etc/hosts ファイルを更新します。エアギャップ環境での DNS 設定の更新 を参照してください。
    • 仮想アプライアンスのドメイン名を使用している場合は、range split 関数をコメントにするか削除します。また、localhost をコメントにします。
    JSON
    dnsNames: &dnsNames
    # - localhost
      - 10.0.0.1.nip.io
      - 10.0.0.2.nip.io
      - 10.0.0.3.nip.io
      - appd.example.com
    # If you are using Virtual IP address for your standalone Controller, comment or delete the range split function.
    {{ range split " " $internalIPs }} {{ printf " - %s.%s" . "nip.io" }}
    {{ end }}
    仮想アプライアンスで、従来のオンプレミス環境のすべての DNS 名を追加します。従来のオンプレミスの各サービスが、異なるドメインネームシステム (DNS) を使用する場合は、すべてのサービスを追加する必要があります。
    CODE
    dnsNames: &dnsNames
      - localhost
      - <VA-DNS>
      - <Classic-On-Premises-Controller-DNS> 
      - <Classic-On-Premises-EUM-DNS>
      - <Classic-On-Premises-Events-DNS>
      - <Classic-On-Premises-Synth-DNS>
  1. (オプション)/var/appd/config/secrets.yaml ファイルを編集して、Splunk AppDynamics Services のユーザー名とパスワードを更新します。
    CODE
    vi /var/appd/config/secrets.yaml
    注: Splunk AppDynamics Services をインストールすると、secrets.yaml ファイルが暗号化されます。
    secrets.yaml.encrypted ファイルの編集」を参照してください。
  2. プライマリ仮想アプライアンスノードのコンソールで、次のスクリプトを dnsinfo.sh として /var/appd/config に保存し、実行します。
    注: このスクリプトを初めて実行する場合は、プレーンな YAML のコードをコピーします。サービスのインストール後にこのスクリプトを実行する場合は、暗号化された YAML のコードをコピーします。
    プレーン YAML
    CODE
    #!/bin/bash
    set -euo pipefail
    
    # Assuming /var/appd/config/secrets.yaml is now a plain, unencrypted YAML file.
    # The '.encrypted' extension and 'helm secrets decrypt' command are removed.
    TENANT=$(yq .hybrid.controller.tenantAccountName /var/appd/config/secrets.yaml)
    CONTROLLER_DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.hybrid.controller.domainName')
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Controller domain name should be \'${CONTROLLER_DNS_DOMAIN}\'
     
    echo
    for server_name in "$CONTROLLER_DNS_DOMAIN" "${DNS_DOMAIN}" "${TENANT}.${CONTROLLER_DNS_DOMAIN}" "${TENANT}-tnt-con.${DNS_DOMAIN}" "${TENANT}-tnt-con.${CONTROLLER_DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please add DNS entry for ${server_name} for controller host IP, VA is not able to resolve it currently"
      fi
    done
    for server_name in "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please double-check on standalone controller that DNS can resolve entry for ${server_name} as VA ingress IP"
      fi
    done
    暗号化された YAML
    CODE
    #!/bin/bash
    set -euo pipefail
    TENANT=$(helm secrets decrypt /var/appd/config/secrets.yaml.encrypted  | yq .hybrid.controller.tenantAccountName)
    CONTROLLER_DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.hybrid.controller.domainName')
    DNS_DOMAIN=$(grep -v "^ *\t* *{{" /var/appd/config/globals.yaml.gotmpl | yq -r '.dnsDomain')
    echo Verify the Virtual Appliance tenant should be \'${TENANT}\'
    echo Verify the Virtual Appliance domain name should be \'${DNS_DOMAIN}\'
    echo Verify the Controller domain name should be \'${CONTROLLER_DNS_DOMAIN}\'
     
    echo
    for server_name in "$CONTROLLER_DNS_DOMAIN" "${DNS_DOMAIN}" "${TENANT}.${CONTROLLER_DNS_DOMAIN}" "${TENANT}-tnt-con.${DNS_DOMAIN}" "${TENANT}-tnt-con.${CONTROLLER_DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please add DNS entry for ${server_name} for controller host IP, VA is not able to resolve it currently"
      fi
    done
    for server_name in "${TENANT}.auth.${DNS_DOMAIN}" "${TENANT}-tnt-authn.${DNS_DOMAIN}"; do
      if ! getent hosts "${server_name}" > /dev/null; then
        echo "Please double-check on standalone controller that DNS can resolve entry for ${server_name} as VA ingress IP"
      fi
    done
  3. dnsinfo.shの実行
    CODE
    bash ./dnsinfo.sh
    出力例:
    CODE
    Verify the Virtual Appliance tenant should be 'customer1'
    Verify the Virtual Appliance domain name should be 'va.mycompany.com'
    Verify the Controller domain name should be 'controller.mycompany.com'
    
    Please add DNS entry for controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for va.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1.controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1-tnt-con.va.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please add DNS entry for customer1-tnt-con.controller.mycompany.com for controller host IP, VA is not able to resolve it currently
    Please double-check on standalone controller that DNS can resolve entry for customer1.auth.va.mycompany.com as VA ingress IP
    Please double-check on standalone controller that DNS can resolve entry for customer1-tnt-authn.va.mycompany.com as VA ingress IP

Configure Ingress Certificates (Only for SSL Certificates)

By default, the Ingress controller is installed with a fully-configured self-signed certificate.
Note: You may skip this step if the self-signed certificate provided by the Ingress Controller meets your requirements.

If you require a CA signed certificate for the Ingress Controller, configure an SSL/TLS certificate for Splunk AppDynamics 自己ホスト型仮想アプライアンス by providing all the required host names. This ensures that all components and user access points of the Virtual Appliance are securely accessible. The following script generates a list of Subject Alternative Names (SANs) that would be required for a custom ingress certificate in Virtual Appliance. This is crucial for securing communication with the Virtual Appliance using HTTPS.

Ensure that you have the following files:
  • private key: private.key
  • signed public key: cert.crt
  • CA root chain: ca.crt
Note:
  • Ensure the ingess.key is in PEM plain text format.
  • The SAN of the server certificate in ingress.crt must include all the hostnames that are defined in the dnsNames section of the global.yaml.gotmpl file.
  • For Secure Application, ensure to include *.<DOMAIN-NAME> in the list and the certificates to include SAN aliases
Configure a custom ingress certificate if you want to include the CA signed certificate.
  1. Copy the Ingress key to the Virtual Appliance.
    CODE
    scp <ingress.pem> appduser@<node-IP-address>:/var/appd/config/ingress.key
  2. Copy the Ingress certificate to the Virtual Appliance.
    CODE
    scp <ingress.crt> appduser@<node-IP-address>:/var/appd/config/ingress.crt

(Optional) Disable Hybrid Property in VA

Only hybrid deployments require this setting.
Disable the hybrid property in the globals.yaml.gotmpl file.
JSON
hybrid:
	enable: false
	controller:
		domainName: controller.nip.io
		port: 8181
		sslEnabled: true
{{ if isFile "/var/appd/config/hybrid-controller-ca.crt" }}
	controllerCaCertsFile: {{ readFile "/var/appd/config/hybrid-controller-ca.crt" | b64enc | quote }}
{{ end }}
mysql:
	dbHost: controller.nip.io
	dbPort: 3388
{{ if isFile "/var/appd/config/hybrid-mysql-ca.crt" }}
	mysqlCaCertsFile: {{ readFile "/var/appd/config/hybrid-mysql-ca.crt" | b64enc | quote }}
{{ end }}
kafka:
defaultCert: true
{{ if isFile "/var/appd/config/hybrid-kafka.key" }}
	keyFile: {{ readFile "/var/appd/config/hybrid-kafka.key" | b64enc | quote }}
{{ end }}
{{ if isFile "/var/appd/config/hybrid-kafka.crt" }}
	certFile: {{ readFile "/var/appd/config/hybrid-kafka.crt" | b64enc | quote }}
{{ end }}
schemaregistry:
	externalUrl: https://<domain_name>/schemaregistry

Disable the Default Certificate Property

The migration tool requires you to use classic on-premises key and certificate instead of VA ingress certificate.

Update the globals.yaml.gotmpl file to disable the setting that uses the default ingress certificate by setting ingress.defaultCert to false. Instead of the default certificate, configure the tool to use the On-Premises key file by specifying the paths to the private key and public certificate files.
JSON
{{
ingress:
	defaultCert: false
{{ if isFile "path-to-key-file-of-onprem-classic"}}
	keyFile: {{ readFile "path-to-key-file-of-onprem-classic" | b64enc | quote }}
{{ end }}
{{ if isFile "path-to-cert-file-of-onprem-classic" }}
	certFile: {{ readFile "path-to-cert-file-of-onprem-classic" | b64enc | quote }}
{{ end }}}}

Disable the Events Service SSL Property

Update the Events Service configuration on Virtual Appliance depending on your classic on-premises environment.
Update the Events Service configuration to match the classic on-premises environment.
HTTP
CODE
events:
	enableSsl: false
	externalUrl: <URL_of_Events_Service>
HTTPS
CODE
events:
	enableSsl: true
	externalUrl: <URL_of_Events_Service>

Copy the License File to Splunk AppDynamics Services

If you are using the Mac-based licenses, update the license file with the Virtual Appliance's MAC addresses. For more information, see Update MAC Addresses.
  1. Log in to the cluster node console.
  2. Copy the license files as the license.lic file to the node in the following location.
    CODE
    cd /var/appd/config

Update the Resources in Virtual Appliance

If you require to update the resources in Virtual Appliance, perform the following steps in the <profile>.yaml file.
  1. Navigate to the following folder:
    CODE
    cd ~/appd-charts/profiles
  2. Edit the profiles.yaml file.
    CODE
    vim <profile>.yaml
  3. Update the resources to match the corresponding classic on-premises components.
    CODE
    mysql:
    	resources:
    		storage:
    			data:
    				size: <It should be around 25% more than the initial data size on classic mysql>
    	mycnf:
    	    ...
        	max_allowed_packet: 1024M 
        	innodb_flush_log_at_trx_commit: 2 (Take EC's value if its there, else put 1)
        	innodb_buffer_pool_size: 168G (Take EC's value if its there)
        	innodb_buffer_pool_instances: 64 (Take EC's value if its there)
        	net_buffer_length: 1M
        	innodb_redo_log_capacity: 64G
    		
    
    es:
        resources:
            storage:
    		    data:
    			    size: <It should match with the initial data size on classic es>
    
    				
    eum:
        resources:
            storage:
    		    data:
    			    size: <It should match with the initial data size on classic eum filestore>
    
    synth:
        resources:
            storage:
    		    data:
    			    size: <It should match with the initial data size on classic synth filestore>