検索

1.3. 可観測性サービスの有効化

download PDF

ハブクラスターで可観測性サービスを有効にすると、multicluster-observability-operator が新しいマネージドクラスターを監視し、メトリックおよびアラート収集サービスをマネージドクラスターに自動的にデプロイします。メトリックを使用して Grafana ダッシュボードを設定すると、クラスターリソース情報が表示され、コストを節約し、サービスの中断を防ぐことができます。

multicluster-observability-operator Pod とも呼ばれる可観測性コンポーネントを使用して、マネージドクラスターのステータスを監視します。

必要なアクセス権: クラスター管理者、open-cluster-management:cluster-manager-admin ロール、または S3 管理者。

1.3.1. 前提条件

  • Red Hat Advanced Cluster Management for Kubernetes がインストールされている。詳細は、ネットワーク接続時のオンラインインストール を参照してください。
  • デフォルトのストレージクラスが指定されていない場合は、MultiClusterObservability カスタムリソースでストレージクラスを定義する必要があります。
  • ハブクラスターへの直接的なネットワークアクセスが必要です。ロードバランサーおよびプロキシーへのネットワークアクセスはサポートされていません。詳細は、Networking を参照してください。
  • ストレージソリューションを作成するようにオブジェクトストアが設定されている。

    • 重要: オブジェクトストアを設定する場合は、機密データを永続化する時に必要な暗号化要件を満たすようにしてください。可観測性サービスは、Thanos がサポートする安定したオブジェクトストアを使用します。複数の Red Hat Advanced Cluster Management 可観測性インストールでオブジェクトストアバケットを共有できない場合があります。したがって、インストールごとに個別のオブジェクトストアバケットを提供します。
    • Red Hat Advanced Cluster Management は、安定したオブジェクトストアで以下のクラウドプロバイダーをサポートします。

      • Amazon Web Services S3 (AWS S3)
      • Red Hat Ceph (S3 互換 API)
      • Google Cloud Storage
      • Azure ストレージ
      • Red Hat OpenShift Data Foundation (旧称: Red Hat OpenShift Container Storage)
      • Red Hat OpenShift on IBM(ROKS)

1.3.2. コマンドラインインターフェイスからの可観測性の有効化

MultiClusterObservability カスタムリソースを作成して可観測性サービスを有効にします。可観測性を有効にする前に、可観測性 Pod の容量要求 を参照してください。

注記:

  • Red Hat Advanced Cluster Management が管理する OpenShift Container Platform マネージドクラスターで可観測性を有効または無効にすると、可観測性エンドポイント Operator は、ローカル Prometheus を自動的に再起動する alertmanager 設定を追加して cluster-monitoring-config config map を更新します。
  • 可観測性エンドポイント Operator は、ローカル Prometheus を自動的に再起動する alertmanager 設定を別途追加して、cluster-monitoring-config config map を更新します。OpenShift Container Platform マネージドクラスターに alertmanager 設定を挿入すると、Prometheus メトリクスの保持フィールドに関連する設定が削除されます。

可観測性サービスを有効にするには、以下の手順を実行します。

  1. Red Hat Advanced Cluster Management ハブクラスターにログインします。
  2. 以下のコマンドを使用して可観測性サービスの namespace を作成します。

    oc create namespace open-cluster-management-observability
  3. プルシークレットを生成します。Red Hat Advanced Cluster Management が open-cluster-management namespace にインストールされている場合は、以下のコマンドを実行します。

    DOCKER_CONFIG_JSON=`oc extract secret/multiclusterhub-operator-pull-secret -n open-cluster-management --to=-`
    1. multiclusterhub-operator-pull-secret が namespace に定義されていない場合には、pull-secretopenshift-config namespace から open-cluster-management-observability namespace にコピーします。以下のコマンドを実行します。

      DOCKER_CONFIG_JSON=`oc extract secret/pull-secret -n openshift-config --to=-`
    2. open-cluster-management-observability namespace でプルリクエストを作成して、以下のコマンドを実行します。

      oc create secret generic multiclusterhub-operator-pull-secret \
          -n open-cluster-management-observability \
          --from-literal=.dockerconfigjson="$DOCKER_CONFIG_JSON" \
          --type=kubernetes.io/dockerconfigjson

    重要: OpenShift Container Platform ドキュメントを使用してクラスターのグローバルプルシークレットを変更する場合は、必ず可観測性 namespace のグローバルプルシークレットも更新してください。詳細は、グローバルプルシークレットの更新 を参照してください。

  4. お使いのクラウドプロバイダーのオブジェクトストレージのシークレットを作成します。シークレットには、ストレージソリューションへの認証情報を追加する必要があります。たとえば、以下のコマンドを実行します。

    oc create -f thanos-object-storage.yaml -n open-cluster-management-observability

    サポートされるオブジェクトストアのシークレットの例を以下に示します。

    • Amazon S3 または S3 と互換性のある場合、シークレットは以下のファイルのようになります。

      apiVersion: v1
      kind: Secret
      metadata:
        name: thanos-object-storage
        namespace: open-cluster-management-observability
      type: Opaque
      stringData:
        thanos.yaml: |
          type: s3
          config:
            bucket: YOUR_S3_BUCKET
            endpoint: YOUR_S3_ENDPOINT 1
            insecure: true
            access_key: YOUR_ACCESS_KEY
            secret_key: YOUR_SECRET_KEY
      1
      プロトコルなしで URL を入力します。s3.us-east-1.amazonaws.com の URL のような Amazon S3 エンドポイントの URL を入力します。

      詳細は、Amazon Simple Storage Service ユーザーガイド を参照してください。

    • Google Cloud Platform の場合は、以下のファイルのようになります。

      apiVersion: v1
      kind: Secret
      metadata:
        name: thanos-object-storage
        namespace: open-cluster-management-observability
      type: Opaque
      stringData:
        thanos.yaml: |
          type: GCS
          config:
            bucket: YOUR_GCS_BUCKET
            service_account: YOUR_SERVICE_ACCOUNT

      詳細は、Google Cloud Storage とは を参照してください。

    • Azure の場合は、以下のファイルのようになります。

      apiVersion: v1
      kind: Secret
      metadata:
        name: thanos-object-storage
        namespace: open-cluster-management-observability
      type: Opaque
      stringData:
        thanos.yaml: |
          type: AZURE
          config:
            storage_account: YOUR_STORAGE_ACCT
            storage_account_key: YOUR_STORAGE_KEY
            container: YOUR_CONTAINER
            endpoint: blob.core.windows.net 1
            max_retries: 0
      1
      msi_resource パスを使用する場合、エンドポイント認証はシステム割り当てのマネージド ID を使用して完了します。値はエンドポイント https://<storage-account-name>.blob.core.windows.net のようにする必要があります。

      user_assigned_id パスを使用する場合は、ユーザー割り当てマネージド ID を使用してエンドポイント認証が完了します。user_assigned_id を使用する場合、msi_resource エンドポイントのデフォルト値は https:<storage_account>.<endpoint> です。詳細は、Azure Storage のドキュメント を参照してください。

      注記: Azure を Red Hat OpenShift Container Platform クラスターのオブジェクトストレージとして使用する場合には、クラスターに関連付けられたストレージアカウントはサポートされません。新規ストレージアカウントを作成する必要があります。

    • Red Hat OpenShift Data Foundation では、シークレットは以下のファイルのようになります。

      apiVersion: v1
      kind: Secret
      metadata:
        name: thanos-object-storage
        namespace: open-cluster-management-observability
      type: Opaque
      stringData:
        thanos.yaml: |
          type: s3
          config:
            bucket: YOUR_RH_DATA_FOUNDATION_BUCKET
            endpoint: YOUR_RH_DATA_FOUNDATION_ENDPOINT 1
            insecure: false
            access_key: YOUR_RH_DATA_FOUNDATION_ACCESS_KEY
            secret_key: YOUR_RH_DATA_FOUNDATION_SECRET_KEY
      1
      プロトコルなしで URL を入力します。次の URL のような Red Hat OpenShift Data Foundation エンドポイントの URL を入力します: example.redhat.com:443

      詳細は、Red Hat OpenShift Data Foundation を参照してください。

    • Red Hat OpenShift on IBM (ROKS) では、シークレットは以下のファイルのようになります。
    apiVersion: v1
    kind: Secret
    metadata:
      name: thanos-object-storage
      namespace: open-cluster-management-observability
    type: Opaque
    stringData:
      thanos.yaml: |
        type: s3
        config:
          bucket: YOUR_ROKS_S3_BUCKET
          endpoint: YOUR_ROKS_S3_ENDPOINT 1
          insecure: true
          access_key: YOUR_ROKS_ACCESS_KEY
          secret_key: YOUR_ROKS_SECRET_KEY
    1
    プロトコルなしで URL を入力します。次の URL のような Red Hat OpenShift Data Foundation エンドポイントの URL を入力します: example.redhat.com:443

    詳細は、IBM Cloud のドキュメント Cloud Object Storage を参照してください。サービスの認証情報を使用してオブジェクトストレージに接続するようにしてください。詳細は、IBM Cloud のドキュメント、Cloud Object Store および Service Credentials を参照してください。

1.3.2.1. AWS Security Token Service のストレージの設定

Amazon S3 または S3 と互換性のあるストレージの場合、AWS Security Token Service (AWS STS) で生成された短期間の限定特権認証情報を使用することもできます。詳細は、AWS Security Token Service ドキュメント を参照してください。

AWS Security Service を使用してアクセスキーを生成するには、次の追加の手順が必要です。

  1. S3 バケットへのアクセスを制限する IAM ポリシーを作成します。
  2. OpenShift Container Platform サービスアカウントの JWT トークンを生成するための信頼ポリシーを持つ IAM ロールを作成します。
  3. S3 バケットへのアクセスが必要な可観測性サービスアカウントのアノテーションを指定します。Red Hat OpenShift Service on AWS (ROSA) クラスターで可観測性を設定して AWS STS トークンを使用する方法の例は 環境の設定 ステップで確認できます。詳細は、Red Hat OpenShift Service on AWS (ROSA) を参照してください。また、STS トークンを使用するための要件とセットアップの詳細な説明については、ROSA with STS の説明 を参照してください。

1.3.2.2. AWS Security Service を使用したアクセスキーの生成

AWS Security Service を使用してアクセスキーを生成するには、次の手順を実行します。

  1. AWS 環境をセットアップします。以下のコマンドを実行します。

    export POLICY_VERSION=$(date +"%m-%d-%y")
    export TRUST_POLICY_VERSION=$(date +"%m-%d-%y")
    export CLUSTER_NAME=<my-cluster>
    export S3_BUCKET=$CLUSTER_NAME-acm-observability
    export REGION=us-east-2
    export NAMESPACE=open-cluster-management-observability
    export SA=tbd
    export SCRATCH_DIR=/tmp/scratch
    export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -o json | jq -r .spec.serviceAccountIssuer| sed -e "s/^https:\/\///")
    export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
    export AWS_PAGER=""
    rm -rf $SCRATCH_DIR
    mkdir -p $SCRATCH_DIR
  2. 次のコマンドで S3 バケットを作成します。

    aws s3 mb s3://$S3_BUCKET
  3. S3 バケットにアクセスするための s3-policy JSON ファイルを作成します。以下のコマンドを実行します。

    {
        "Version": "$POLICY_VERSION",
        "Statement": [
            {
                "Sid": "Statement",
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl",
                    "s3:CreateBucket",
                    "s3:DeleteBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::$S3_BUCKET/*",
                    "arn:aws:s3:::$S3_BUCKET"
                ]
            }
        ]
     }
  4. 次のコマンドでポリシーを適用します。

    S3_POLICY=$(aws iam create-policy --policy-name $CLUSTER_NAME-acm-obs \
    --policy-document file://$SCRATCH_DIR/s3-policy.json \
    --query 'Policy.Arn' --output text)
    echo $S3_POLICY
  5. TrustPolicy JSON ファイルを作成します。以下のコマンドを実行します。

    {
     "Version": "$TRUST_POLICY_VERSION",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "${OIDC_PROVIDER}:sub": [
               "system:serviceaccount:${NAMESPACE}:observability-thanos-query",
               "system:serviceaccount:${NAMESPACE}:observability-thanos-store-shard",
               "system:serviceaccount:${NAMESPACE}:observability-thanos-compact"
               "system:serviceaccount:${NAMESPACE}:observability-thanos-rule",
               "system:serviceaccount:${NAMESPACE}:observability-thanos-receive",
             ]
           }
         }
       }
     ]
    }
  6. 次のコマンドを使用して、AWS Prometheus と CloudWatch のロールを作成します。

    S3_ROLE=$(aws iam create-role \
      --role-name "$CLUSTER_NAME-acm-obs-s3" \
      --assume-role-policy-document file://$SCRATCH_DIR/TrustPolicy.json \
      --query "Role.Arn" --output text)
    echo $S3_ROLE
  7. ポリシーをロールにアタッチします。以下のコマンドを実行します。

    aws iam attach-role-policy \
      --role-name "$CLUSTER_NAME-acm-obs-s3" \
      --policy-arn $S3_POLICY

    シークレットは、次のファイルのようになる場合があります。config セクションでは signature_version2: false が指定されており、access_keysecret_key は指定されていません。

    apiVersion: v1
    kind: Secret
    metadata:
      name: thanos-object-storage
      namespace: open-cluster-management-observability
    type: Opaque
    stringData:
      thanos.yaml: |
     type: s3
     config:
       bucket: $S3_BUCKET
       endpoint: s3.$REGION.amazonaws.com
       signature_version2: false
  8. MultiClusterObservability カスタムリソースの作成 セクションで説明されているように、MultiClusterObservability カスタムリソースを使用するときに、サービスアカウントアノテーションを指定します。
  9. 以下のコマンドを使用して、クラウドプロバイダーの S3 アクセスキーおよび秘密鍵を取得します。シークレットの base64 文字列のデコード、編集、エンコードが必要です。

    1. クラウドプロバイダーの S3 アクセスキーを編集およびデコードするには、次のコマンドを実行します。

      YOUR_CLOUD_PROVIDER_ACCESS_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep access_key | awk '{print $2}')
    2. クラウドプロバイダーのアクセスキーを表示するには、次のコマンドを実行します。

      echo $YOUR_CLOUD_PROVIDER_ACCESS_KEY
    3. クラウドプロバイダーの秘密鍵を編集およびデコードするには、次のコマンドを実行します。

      YOUR_CLOUD_PROVIDER_SECRET_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep secret_key | awk '{print $2}')
    4. クラウドプロバイダーの秘密鍵を表示するには、次のコマンドを実行します。
    echo $SECRET_KEY
  10. 次のデプロイメントとステートフルセットの Pod をチェックして、可観測性が有効になっていることを確認します。次の情報が表示される場合があります。

    observability-thanos-query (deployment)
    observability-thanos-compact (statefulset)
    observability-thanos-receive-default  (statefulset)
    observability-thanos-rule   (statefulset)
    observability-thanos-store-shard-x  (statefulsets)

1.3.2.3. MultiClusterObservability カスタムリソースの作成

MultiClusterObservability カスタムリソースを使用して、さまざまなコンポーネントの永続ボリュームのストレージサイズを指定します。MultiClusterObservability カスタムリソースの最初の作成時にストレージサイズを設定する必要があります。デプロイ後にストレージサイズ値を更新すると、ストレージクラスが動的ボリューム拡張をサポートしている場合にのみ変更が反映されます。詳細は、Red Hat OpenShift Container Platform ドキュメントの 永続ボリュームの拡張 を参照してください。

次の手順を実行して、ハブクラスターに MultiClusterObservability カスタムリソースを作成します。

  1. multiclusterobservability_cr.yaml という名前の MultiClusterObservability カスタムリソースの YAML ファイルを作成します。

    可観測性については、以下のデフォルト YAML ファイルを確認してください。

    apiVersion: observability.open-cluster-management.io/v1beta2
    kind: MultiClusterObservability
    metadata:
      name: observability
    spec:
      observabilityAddonSpec: {}
      storageConfig:
        metricObjectStorage:
          name: thanos-object-storage
          key: thanos.yaml

    advanced セクションで retentionConfig パラメーターの値を変更する必要がある場合があります。詳細は、Thanos Downsampling resolution and retention を参照してください。マネージドクラスターの数によっては、ステートフルセットのストレージの量を更新する必要がある場合があります。S3 バケットが STS トークンを使用するように設定されている場合は、S3 ロールで STS を使用するようにサービスアカウントにアノテーションを付けます。次の設定を表示します。

    spec:
      advanced:
        compact:
           serviceAccountAnnotations:
               eks.amazonaws.com/role-arn: $S3_ROLE
        store:
           serviceAccountAnnotations:
              eks.amazonaws.com/role-arn: $S3_ROLE
        rule:
           serviceAccountAnnotations:
              eks.amazonaws.com/role-arn: $S3_ROLE
        receive:
           serviceAccountAnnotations:
              eks.amazonaws.com/role-arn: $S3_ROLE
        query:
           serviceAccountAnnotations:
              eks.amazonaws.com/role-arn: $S3_ROLE

    詳細は、可観測性 API を参照してください。

  2. インフラストラクチャーマシンセットにデプロイするには、MultiClusterObservability YAML の nodeSelector を更新して、セットのラベルを設定する必要があります。YAML の内容は以下のようになります。

      nodeSelector:
        node-role.kubernetes.io/infra: ""

    詳細は、インフラストラクチャーマシンセットの作成 を参照してください。

  3. 以下のコマンドを実行して可観測性 YAML をクラスターに適用します。

    oc apply -f multiclusterobservability_cr.yaml

    Thanos、Grafana および Alertmanager の open-cluster-management-observability namespace にすべての Pod が作成されます。Red Hat Advanced Cluster Management ハブクラスターに接続されたマネージドクラスターはすべて、メトリクスを Red Hat Advanced Cluster Management の可観測性サービスに送信できます。

  4. Grafana ダッシュボードを起動して可観測性サービスが有効になっていることを検証し、データが入力されていることを確認します。
  5. コンソールの 概要 ページまたは クラスター ページから、コンソールヘッダーの近くにある Grafana リンク をクリックします。

    1. あるいは、次の URL を使用して OpenShift Container Platform 3.11 Grafana ダッシュボードにアクセスします: https://$ACM_URL/grafana/dashboards
    2. OpenShift Container Platform 3.11 ダッシュボードを表示するには、OCP 3.11 という名前のフォルダーを選択します。
  6. multicluster-observability-operator デプロイメントにアクセスして、multicluster-observability-operator Pod が multiclusterhub-operator デプロイメントによってデプロイされていることを確認します。以下のコマンドを実行します。

    oc get deploy multicluster-observability-operator -n open-cluster-management --show-labels
    
    NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE   LABELS
    multicluster-observability-operator   1/1     1            1           35m   installer.name=multiclusterhub,installer.namespace=open-cluster-management
  7. リソースに関連付けられているラベルについて multicluster-observability-operator デプロイメントの labels セクションを表示します。labels セクションには次の詳細が含まれる場合があります。

     labels:
        installer.name: multiclusterhub
        installer.namespace: open-cluster-management
  8. 注記: 可観測性データを収集しないように特定のマネージドクラスターを除外するには、クラスターに observability: disabled クラスターラベルを追加します。

可観測性サービスを有効化します。可観測性サービスを有効にすると、次の機能が開始されます。

  • マネージドクラスターからのアラートマネージャーはすべて、Red Hat Advanced Cluster Management ハブクラスターに転送されます。
  • Red Hat Advanced Cluster Management ハブクラスターに接続されたマネージドクラスターはすべて、アラートを Red Hat Advanced Cluster Management の可観測性サービスに送信できます。Red Hat Advanced Cluster Management Alertmanager を設定して、重複を排除してグループ化し、アラートをメール、PagerDuty、または OpsGenie などの適切なレシーバー統合にルーティングすることができます。アラートの通知解除や抑制にも対応できます。

    注記: Red Hat Advanced Cluster Management ハブクラスターへのアラート転送機能は、サポートされている OpenShift Container Platform バージョンのマネージドクラスターでのみサポートされます。可観測性を有効にして Red Hat Advanced Cluster Management をインストールすると、アラートが自動的にハブクラスターに転送されます。詳細は、送信アラート を参照してください。

1.3.3. Red Hat OpenShift Container Platform コンソールからの可観測性の有効化

オプションで、Red Hat OpenShift Container Platform コンソールから可観測性を有効にし、open-cluster-management-observability という名前のプロジェクトを作成します。以下の手順を実行します。

  1. open-cluster-management-observability プロジェクトで、multiclusterhub-operator-pull-secret という名前のイメージプルシークレットを作成します。
  2. open-cluster-management-observability プロジェクトに thanos-object-storage という名前のオブジェクトストレージシークレットを作成します。
  3. オブジェクトストレージシークレットの詳細を入力し、Create をクリックします。シークレットの例を表示するには、可観測性の有効化 セクションの手順 4 を参照してください。
  4. MultiClusterObservability カスタムリソースインスタンスを作成します。Observability components are deployed and running のメッセージが表示されると、OpenShift Container Platform から可観測性サービスが正常に有効化されています。

1.3.3.1. Thanos バージョンの検証

Thanos がクラスターにデプロイされたら、コマンドラインインターフェイス (CLI) から Thanos のバージョンを確認します。

ハブクラスターにログインした後、可観測性 Pod で次のコマンドを実行して Thanos バージョンを受け取ります。

thanos --version

Thanos のバージョンが表示されます。

1.3.4. 可観測性の無効化

可観測性を無効にして、Red Hat Advanced Cluster Management ハブクラスターでデータ収集を停止します。

1.3.4.1. すべてのクラスターで可観測性を無効にする

すべてのマネージドクラスターで可観測性コンポーネントを削除して、可観測性を無効にします。enableMetricsfalse に設定して、multicluster-observability-operator リソースを更新します。更新されたリソースは、以下のような変更内容になります。

spec:
  imagePullPolicy: Always
  imagePullSecret: multiclusterhub-operator-pull-secret
  observabilityAddonSpec: # The ObservabilityAddonSpec defines the global settings for all managed clusters which have observability add-on enabled
    enableMetrics: false #indicates the observability addon push metrics to hub server

1.3.4.2. 単一クラスターで可観測性を無効にする

特定のマネージドクラスターの可観測性コンポーネントを削除して可観測性を無効にします。以下の手順を実行します。

  1. managedclusters.cluster.open-cluster-management.io のカスタムリソースに observability: disabled ラベルを追加します。
  2. Red Hat Advanced Cluster Management コンソールの Clusters ページから、指定したクラスターに observability=disabled ラベルを追加します。

    注記: 可観測性コンポーネントが含まれるマネージドクラスターをデタッチすると、metrics-collector デプロイメントが削除されます。

1.3.5. 可観測性の削除

MultiClusterObservability カスタムリソースを削除すると、可観測性サービスが無効化され、アンインストールされます。OpenShift Container Platform コンソールナビゲーションから、Operators > Installed Operators > Advanced Cluster Manager for Kubernetes の順に選択します。MultiClusterObservability カスタムリソースを削除します。

1.3.6. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.