Linux x86_64 에서 Cassandra 데이터 저장소 생성하기

Cassandra 운영자를 설치하고 데이터 저장소를 설정할 수 있습니다.

Cassandra 배포용 운영체제 버전 및 이미지 태그

고정된 Helm 차트 또는 운영자 버전에는 다음 이미지가 필요합니다.

표 1. Cassandra 연산자 버전 및 이미지 태그
플랫폼 오퍼레이터 버전 Helm 차트 버전 태그가 있는 이미지
Linux® x86_64 1.30.0 0.64.3 artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator: 1.30.0_v0.40.0

artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger: 1.29.0_v0.23.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.11_v0.43.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.64.3 --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.30.0_v0.40.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.23.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. 예를 cassandra.yaml들어, Cassandra 구성을 포함하는 ` YAML ` 파일을 생성합니다.

    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.11_v0.43.0
      systemLoggerImage: artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.29.0_v0.23.0
        serverVersion: "4.1.11"
      imagePullPolicy: Always
      podTemplateSpec:
        spec:
          serviceAccountName: cassandra
          imagePullSecrets:
          - name: instana-registry
          containers:
          - name: cassandra
      managementApiAuth:
        insecure: {}
      size: 3
      allowMultipleNodesPerWorker: false
      resources:
        requests:
          cpu: 2000m
          memory: 8Gi
        limits:
          cpu: 4000m
          memory: 16Gi
      storageConfig:
        cassandraDataVolumeClaimSpec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 100Gi
      config:
        jvm-server-options:
          initial_heap_size: "4G"
          max_heap_size: "8G"
          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 운영자를 오프라인 환경에 설치하려면 다음 단계를 완료하십시오.

설치 준비시 외부 레지스트리에서 Cassandra 이미지를 아직 가져오지 않은 경우 지금 가져올 수 있습니다. bastion 호스트에서 다음 명령을 실행하십시오. 그런 다음, 해당 이미지를 에어갭 환경에 있는 Instana 호스트로 복사하십시오.

docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator:1.30.0_v0.40.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.29.0_v0.23.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.11_v0.43.0
         

Instana 호스트에서 다음 단계를 수행하십시오.

  1. 이미지를 내부 이미지 레지스트리에 다시 태그 지정하십시오.

    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator:1.30.0_v0.40.0 <internal-image-registry>/operator/cass-operator:1.30.0_v0.40.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.29.0_v0.23.0 <internal-image-registry>/datastore/system-logger:1.29.0_v0.23.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client:0.8.12_v0.33.0 <internal-image-registry>/datastore/k8ssandra-client:0.8.12_v0.33.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.11_v0.43.0 <internal-image-registry>/datastore/cassandra:4.1.11_v0.43.0
                   
  2. 배스천 호스트의 내부 이미지 레지스트리에 이미지를 푸시하십시오.

    docker push <internal-image-registry>/operator/cass-operator:1.30.0_v0.40.0
    docker push <internal-image-registry>/datastore/system-logger:1.29.0_v0.23.0
    docker push <internal-image-registry>/datastore/k8ssandra-client:0.8.12_v0.33.0
    docker push <internal-image-registry>/datastore/cassandra:4.1.11_v0.43.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 instana/cass-operator -n instana-cassandra --version=0.64.3--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.30.0_v0.40.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.23.0 --set global.imageConfig.defaults.registry=<internal-image-registry> --set global.imageConfig.defaults.pullSecrets[0]=<secret-name>
  7. 예를 cassandra.yaml들어, Cassandra 구성을 포함하는 ` YAML ` 파일을 생성합니다.

    apiVersion: cassandra.datastax.com/v1beta1
    kind: CassandraDatacenter
    metadata:
      name: cassandra
    spec:
      clusterName: instana
      serverType: cassandra
      serverImage: <internal-image-registry>/datastore/cassandra:4.1.11_v0.43.0
      systemLoggerImage: <internal-image-registry>/datastore/system-logger:1.29.0_v0.23.0
      serverVersion: "4.1.11"
      imagePullPolicy: Always
      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
      resources:
        requests:
          cpu: 2000m
          memory: 8Gi
        limits:
          cpu: 4000m
          memory: 16Gi
      storageConfig:
        cassandraDataVolumeClaimSpec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 100Gi
      config:
        jvm-server-options:
          initial_heap_size: "4G"
          max_heap_size: "8G"
          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 ). 는 cassandra.yaml 파일의 <clustername>.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