Linux on Power ( ppc64le ) で Cassandra データストアを作成する

Cassandra オペレーターをインストールし、データ・ストアをセットアップすることができます。

準備

外部リポジトリーからイメージをプルするために、オンラインおよびオフラインのホストが準備されていることを確認します。 また、正しい Helm リポジトリーが追加されていることも確認してください。

詳細については、 「データストアのインストール準備」 を参照してください。

Cassandra デプロイ用のオペレーターのバージョンとイメージタグ

ピン留めされた Helm チャートまたはオペレーターのバージョンには、以下のイメージが必要です。

表 1. Cassandra オペレーターのバージョンとイメージタグ
プラットフォーム オペレーターのバージョン Helm チャートのバージョン タグ付きのイメージ
0.63.1 1.29.0 0.63.1

artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator: 1.29.0_v0.39.0

artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client: 0.8.12_v0.33.0

artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra: 4.1.10_v0.41.0

artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger: 1.26.0_v0.18.0

セキュリティコンテキストの制約の作成(オンラインおよびオフライン)

Red Hat® OpenShift® クラスターを使用している場合は、 Cassandra オペレーターをデプロイする前に、Security Context Constraints(SCC)リソースを作成してください。 オンラインとオフラインの両方でSCCリソースが必要です。

SCCリソースを作成するには、以下の手順を実行します:

  1. 以下のように、 cassandra-scc.yamlなどのファイルを作成します。

    apiVersion: security.openshift.io/v1
    kind: SecurityContextConstraints
    metadata:
      name: cassandra-scc
    runAsUser:
      type: MustRunAs
      uid: 999
    seLinuxContext:
      type: RunAsAny
    fsGroup:
      type: RunAsAny
    allowHostDirVolumePlugin: false
    allowHostNetwork: true
    allowHostPorts: true
    allowPrivilegedContainer: false
    allowHostIPC: true
    allowHostPID: true
    readOnlyRootFilesystem: false
    users:
      - system:serviceaccount:instana-cassandra:cass-operator
      - system:serviceaccount:instana-cassandra:cassandra
     
  2. 以下のコマンドを実行して、ファイルを適用します。

    kubectl apply -f cassandra-scc.yaml
     

Cassandra のオンラインインストール

オンライン環境にCassandraデータ・ストアをインストールするには、以下の手順を実行します:

  1. instana-cassandra 名前空間を作成します。

    kubectl create namespace instana-cassandra
     
  2. サービス cassandra アカウントを作成します。

    kubectl create serviceaccount cassandra -n instana-cassandra
     
  3. イメージ・プル・シークレットを作成する。 <download_key>の値を、あなた自身のダウンロードキーで更新してください。

    kubectl create secret docker-registry instana-registry --namespace instana-cassandra \
    --docker-username=_ \
    --docker-password=<download_key> \
    --docker-server=artifact-public.instana.io
     
  4. Cassandra オペレーターをインストールします。

    helm install cass-operator instana/cass-operator -n instana-cassandra --version=0.63.1 --set securityContext.runAsGroup=999 --set securityContext.runAsUser=999 --set image.registry=artifact-public.instana.io --set image.repository=self-hosted-images/3rd-party/operator/cass-operator --set image.tag=1.29.0_v0.39.0 --set "imagePullSecrets[0].name=instana-registry" --set global.imageConfig.images.system-logger.repository=self-hosted-images/3rd-party/datastore --set global.imageConfig.images.system-logger.name=system-logger --set global.imageConfig.images.system-logger.tag=1.29.0_v0.39.0 --set global.imageConfig.images.k8ssandra-client.repository=self-hosted-images/3rd-party/datastore --set global.imageConfig.images.k8ssandra-client.name=k8ssandra-client --set global.imageConfig.images.k8ssandra-client.tag=0.8.12_v0.33.0 --set global.imageConfig.defaults.registry=artifact-public.instana.io --set global.imageConfig.defaults.pullSecrets[0]=instana-registry
  5. YAML ファイルを作成します。例えば cassandra.yaml、 Cassandra の設定を記述したファイルを作成します。

    apiVersion: cassandra.datastax.com/v1beta1
    kind: CassandraDatacenter
    metadata:
      name: cassandra
    spec:
      clusterName: instana
      serverType: cassandra
      serverImage: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.10_v0.41.0
      systemLoggerImage: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.26.0_v0.18.0
      serverVersion: "4.1.10"
      imagePullPolicy: IfNotPresent
      podTemplateSpec:
        spec:
          serviceAccountName: cassandra
          imagePullSecrets:
          - name: instana-registry
          containers:
            - name: cassandra
              image: 'artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.10_v0.41.0'
              imagePullPolicy: IfNotPresent
              resources:
                requests:
                  memory: "8Gi"  # Adjust based on your available resources
                  cpu: "2"       # Adjust as needed
                limits:
                  memory: "16Gi"  # Adjust to your available resources
                  cpu: "4"        # Adjust as needed
              readinessProbe:
                httpGet:
                  path: /api/v0/probes/readiness
                  port: 8080
                  scheme: HTTP
                initialDelaySeconds: 60  
                timeoutSeconds: 15       
                periodSeconds: 20        
                successThreshold: 1
                failureThreshold: 3
              livenessProbe:
                httpGet:
                  path: /api/v0/probes/liveness
                  port: 8080
                  scheme: HTTP
                initialDelaySeconds: 30  
                timeoutSeconds: 15       
                periodSeconds: 20        
                successThreshold: 1
                failureThreshold: 3
              terminationMessagePath: /dev/termination-log
              lifecycle:
                preStop:
                  exec:
                    command:
                      - curl
                      - '-X'
                      - POST
                      - '-s'
                      - '-m'
                      - '30'  
                      - '-o'
                      - /dev/null
                      - '--show-error'
                      - '--fail'
                      - 'http://localhost:8080/api/v0/ops/node/drain'
              env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
                - name: NODE_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
                - name: DS_LICENSE
                  value: accept
                - name: USE_MGMT_API
                  value: 'true'
                - name: MGMT_API_NO_KEEP_ALIVE
                  value: 'true'
                - name: MGMT_API_EXPLICIT_START
                  value: 'true'
              ports:
                - name: native
                  containerPort: 9042
                  protocol: TCP
                - name: tls-native
                  containerPort: 9142
                  protocol: TCP
                - name: internode
                  containerPort: 7000
                  protocol: TCP
                - name: tls-internode
                  containerPort: 7001
                  protocol: TCP
                - name: jmx
                  containerPort: 7199
                  protocol: TCP
                - name: mgmt-api-http
                  containerPort: 8080
                  protocol: TCP
                - name: prometheus
                  containerPort: 9103
                  protocol: TCP
                - name: metrics
                  containerPort: 9000
                  protocol: TCP
              volumeMounts:
                - name: server-logs
                  mountPath: /var/log/cassandra
                - name: server-data
                  mountPath: /var/lib/cassandra
                - name: server-config
                  mountPath: /config
              terminationMessagePolicy: File
            - name: server-system-logger
              image: 'artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.26.0_v0.18.0'
              env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
                - name: NODE_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
                - name: CLUSTER_NAME
                  value: instana
                - name: DATACENTER_NAME
                  value: cassandra
                - name: RACK_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: 'metadata.labels[''cassandra.datastax.com/rack'']'
                - name: NAMESPACE
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.namespace
              resources:
                limits:
                  memory: 256Mi  
                requests:
                  cpu: 100m
                  memory: 128Mi
      managementApiAuth:
        insecure: {}  
      size: 3
      allowMultipleNodesPerWorker: false
      storageConfig:
        cassandraDataVolumeClaimSpec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 200Gi  # Adjust the storage size if necessary
      config:
      jvm-server-options:
        initial_heap_size: "12G"
        max_heap_size: "12G"
        additional-jvm-opts:
          - -Dcassandra.allow_unsafe_aggressive_sstable_expiration=true
      cassandra-yaml:
        authenticator: org.apache.cassandra.auth.PasswordAuthenticator
        authorizer: org.apache.cassandra.auth.CassandraAuthorizer
        role_manager: org.apache.cassandra.auth.CassandraRoleManager
        memtable_flush_writers: 8
        auto_snapshot: false
        gc_warn_threshold_in_ms: 10000
        otc_coalescing_strategy: DISABLED
        memtable_allocation_type: offheap_objects
        num_tokens: 256
        drop_compact_storage_enabled: true
     
  6. Cassandra (オンラインおよびオフライン) のデプロイおよび検証のステップを実行します。

Cassandra のオフラインインストール

インストールの準備時に外部レジストリーから Cassandra イメージをまだプルしていない場合は、ここでプルできます。 要塞ホストで以下のコマンドを実行します。 次に、それらの画像を、エアギャップ環境にある Instana のホストにコピーします。

docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator:1.29.0_v0.39.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client:0.8.12_v0.33.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.10_v0.41.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.26.0_v0.18.0
         

Instana ホストで、以下の手順を実行してください。

  1. イメージを内部イメージ・レジストリーに再タグ付けします。

    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator:1.29.0_v0.39.0 <internal-image-registry>/ppc64le-oss/cass-operator-ppc64le:1.29.0_v0.39.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client:0.8.12_v0.33.0 <internal-image-registry>/ppc64le-oss/k8ssandra-client-ppc64le:0.8.12_v0.33.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.10_v0.41.0 <internal-image-registry>/ppc64le-oss/cass-management-api-ppc64le:4.1.10_v0.41.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.26.0_v0.18.0<internal-image-registry>/ppc64le-oss/system-logger-ppc64le:1.26.0_v0.18.0
                   
  2. イメージを要塞ホスト上の内部イメージ・レジストリーにプッシュします。

    docker push <internal-image-registry>/ppc64le-oss/cass-operator-ppc64le:1.29.0_v0.39.0
    docker push <internal-image-registry>/ppc64le-oss/k8ssandra-client-ppc64le:0.8.12_v0.33.0
    docker push <internal-image-registry>/ppc64le-oss/cass-management-api-ppc64le:4.1.10_v0.41.0
    docker push <internal-image-registry>/ppc64le-oss/system-logger-ppc64le:1.26.0_v0.18.0
                   
  3. instana-cassandra 名前空間を作成します。

    kubectl create namespace instana-cassandra
     
  4. サービス cassandra アカウントを作成します。

    kubectl create serviceaccount cassandra -n instana-cassandra
     
  5. オプション:内部イメージ・レジストリの認証が必要な場合は、イメージ・プル・シークレットを作成します。

    kubectl create secret docker-registry <secret_name> --namespace instana-cassandra \
    --docker-username=<registry_username> \
    --docker-password=<registry_password> \
    --docker-server=<internal-image-registry>:<internal-image-registry-port> \
    --docker-email=<registry_email>
     
  6. Cassandra オペレーターをインストールします。 前のステップでイメージ・プル・シークレットを作成した場合は、次のコマンドに--set imagePullSecrets[0].name="<internal-image-registry-pull-secret>"を追加する。

    helm install cass-operator cass-operator-0.63.1.tgz -n instana-cassandra --create-namespace --version=0.63.1 --set securityContext.runAsGroup=999 --set securityContext.runAsUser=999 --set image.registry=<internal-image-registry> --set image.repository=self-hosted-images/3rd-party/operator/cass-operator --set image.tag=1.29.0_v0.39.0 --set "imagePullSecrets[0].name=<secret-name>" --set global.imageConfig.images.system-logger.repository=self-hosted-images/3rd-party/datastore --set global.imageConfig.images.system-logger.name=system-logger --set global.imageConfig.images.system-logger.tag=1.29.0_v0.39.0 --set global.imageConfig.images.k8ssandra-client.repository=self-hosted-images/3rd-party/datastore --set global.imageConfig.images.k8ssandra-client.name=k8ssandra-client --set global.imageConfig.images.k8ssandra-client.tag=0.8.12_v0.33.0 --set global.imageConfig.defaults.registry=<internal-image-registry> --set global.imageConfig.defaults.pullSecrets[0]=<secret-name>
                   
  7. YAML ファイルを作成します。例えば cassandra.yaml、次のような Cassandra の設定を記述します:

    apiVersion: cassandra.datastax.com/v1beta1
    kind: CassandraDatacenter
    metadata:
      name: cassandra
    spec:
      clusterName: instana
      serverType: cassandra
      serverImage: <internal-image-registry>/ppc64le-oss/cass-management-api-ppc64le:4.1.10_v0.41.0
      systemLoggerImage: <internal-image-registry>/ppc64le-oss/system-logger-ppc64le:1.26.0_v0.18.0
      serverVersion: 4.1.10
      imagePullPolicy: IfNotPresent
      podTemplateSpec:
        spec:
        # Optional: if you created an image pull secret for your internal registry, uncomment the following lines and update the image pull secret information.
        # imagePullSecrets:
        #   - name: <internal-image-registry-pull-secret>
          serviceAccountName: cassandra
          containers:
          - name: cassandra
      managementApiAuth:
        insecure: {}
      size: 3
      allowMultipleNodesPerWorker: false
      storageConfig:
        cassandraDataVolumeClaimSpec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 200Gi
      config:
        jvm-server-options:
          initial_heap_size: "12G"
          max_heap_size: "12G"
          additional-jvm-opts:
            - -Dcassandra.allow_unsafe_aggressive_sstable_expiration=true
        cassandra-yaml:
          authenticator: org.apache.cassandra.auth.PasswordAuthenticator
          authorizer: org.apache.cassandra.auth.CassandraAuthorizer
          role_manager: org.apache.cassandra.auth.CassandraRoleManager
          memtable_flush_writers: 8
          auto_snapshot: false
          gc_warn_threshold_in_ms: 10000
          otc_coalescing_strategy: DISABLED
          memtable_allocation_type: offheap_objects
          num_tokens: 256
          drop_compact_storage_enabled: true
     
  8. Cassandra (オンラインおよびオフライン) のデプロイおよび検証のステップを実行します。

Cassandra の展開と検証(オンラインおよびオフライン)

注:Cassandra をデプロイすると、 CassandraDatacenter はデフォルトでスーパーユーザーを作成します(例: <clustername>-superuser)。 これは <clustername> 、ファイル cassandra.yaml のセクション .spec.clusterName で指定された値です。 以下のコマンドでは、secret name を例として instana-superuser 使用しています。

Cassandra インスタンスをデプロイしてデータ・ストアを作成するには、以下の手順を実行します。

  1. 以下のコマンドを実行して、 Cassandra をデプロイします。

    kubectl apply -f cassandra.yaml --namespace=instana-cassandra
     
  2. instana-superuserのパスワードを取得します。

    kubectl get secret instana-superuser -n instana-cassandra --template='{{index .data.password | base64decode}}' && echo
     
  3. パスワードを config.yaml ファイルに保管します。 <RETRIEVED_FROM_SECRET> を、前のステップで取得したパスワードに置き換えます。

    datastoreConfigs:
      ...
      cassandraConfigs:
        - user: instana-superuser
          password: <RETRIEVED_FROM_SECRET>
          adminUser: instana-superuser
          adminPassword: <RETRIEVED_FROM_SECRET>
      ...
     
  4. Cassandra データ・ストアのデプロイメントを確認します。

    kubectl get all -n instana-cassandra
     
  5. Cassandra データ・ストアが正常にデプロイされた場合、コマンドの結果は以下の出力のようになります。

    NAME                                  READY   STATUS    RESTARTS   AGE
    pod/cass-operator-57dcc8884f-92knc    1/1     Running   0          36m
    pod/instana-cassandra-default-sts-0   2/2     Running   0          26m
    pod/instana-cassandra-default-sts-1   2/2     Running   0          26m
    pod/instana-cassandra-default-sts-2   2/2     Running   0          26m
    
    NAME                                                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                        AGE
    service/cass-operator-webhook-service               ClusterIP   192.168.1.55   <none>        443/TCP                                        36m
    service/instana-cassandra-additional-seed-service   ClusterIP   None           <none>        <none>                                         26m
    service/instana-cassandra-all-pods-service          ClusterIP   None           <none>        9042/TCP,8080/TCP,9103/TCP,9000/TCP            26m
    service/instana-cassandra-service                   ClusterIP   None           <none>        9042/TCP,9142/TCP,8080/TCP,9103/TCP,9000/TCP   26m
    service/instana-seed-service                        ClusterIP   None           <none>        <none>                                         26m
    
    NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/cass-operator   1/1     1            1           36m
    
    NAME                                       DESIRED   CURRENT   READY   AGE
    replicaset.apps/cass-operator-57dcc8884f   1         1         1       36m
    
    NAME                                             READY   AGE
    statefulset.apps/instana-cassandra-default-sts   3/3     26m