Linux x86_64 에서 Cassandra 데이터 저장소 생성하기
Cassandra 운영자를 설치하고 데이터 저장소를 설정할 수 있습니다.
시작하기 전에
외부 저장소에서 이미지를 가져오기 위해 온라인 및 오프라인 호스트를 준비했는지 확인하십시오. 또한 올바른 Helm 저장소가 추가되었는지 확인하십시오.
자세한 내용은 ‘데이터 스토어 설치 준비’를 참조하십시오.
Cassandra 배포용 운영체제 버전 및 이미지 태그
고정된 Helm 차트 또는 운영자 버전에는 다음 이미지가 필요합니다.
| 플랫폼 | 오퍼레이터 버전 | 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.0artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger: 1.29.0_v0.23.0artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client: 0.8.12_v0.33.0artifact-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 리소스를 만들려면 다음 단계를 완료합니다:
다음과 같이
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다음 명령을 실행하여 파일을 적용하십시오.
kubectl apply -f cassandra-scc.yaml
Cassandra 온라인 설치
온라인 환경에 Cassandra 데이터 스토어를 설치하려면 다음 단계를 완료하세요:
instana-cassandra네임스페이스를 작성하십시오.kubectl create namespace instana-cassandra서비스
cassandra계정을 생성합니다.kubectl create serviceaccount cassandra -n instana-cassandra이미지 가져오기 시크릿을 작성하십시오. 사용자 고유의 다운로드 키를 사용하여
<download_key>값을 업데이트하십시오.kubectl create secret docker-registry instana-registry --namespace instana-cassandra \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.ioCassandra 운영자를 설치하십시오.
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예를
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: trueCassandra (온라인 및 오프라인)의 단계를 완료하십시오.
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 호스트에서 다음 단계를 수행하십시오.
이미지를 내부 이미지 레지스트리에 다시 태그 지정하십시오.
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배스천 호스트의 내부 이미지 레지스트리에 이미지를 푸시하십시오.
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.0instana-cassandra네임스페이스를 작성하십시오.kubectl create namespace instana-cassandra서비스
cassandra계정을 생성합니다.kubectl create serviceaccount cassandra -n instana-cassandra선택 사항입니다: 내부 이미지 레지스트리에 인증이 필요한 경우 이미지 풀 시크릿을 생성합니다.
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>- 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> 예를
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: trueCassandra (온라인 및 오프라인)의 단계를 완료하십시오.
Cassandra 배포 및 검증 (온라인 및 오프라인)
<clustername>-superuser ). 는 cassandra.yaml 파일의 <clustername>.spec.clusterName 섹션에 지정된 값입니다. 다음 명령어에서는 secret name을 예시로 instana-superuser 사용합니다.Cassandra 인스턴스를 배치하고 데이터 저장소를 작성하려면 다음 단계를 완료하십시오.
다음 명령을 실행하여 Cassandra 를 배치하십시오.
kubectl apply -f cassandra.yaml --namespace=instana-cassandrainstana-superuser의 비밀번호를 검색하십시오.kubectl get secret instana-superuser -n instana-cassandra --template='{{index .data.password | base64decode}}' && echoconfig.yaml파일에 비밀번호를 저장하십시오.<RETRIEVED_FROM_SECRET>를 이전 단계에서 얻은 비밀번호로 대체하십시오.datastoreConfigs: ... cassandraConfigs: - user: instana-superuser password: <RETRIEVED_FROM_SECRET> adminUser: instana-superuser adminPassword: <RETRIEVED_FROM_SECRET> ...Cassandra 데이터 저장소의 배치를 확인하십시오.
kubectl get all -n instana-cassandraCassandra 데이터 저장소가 성공적으로 배치된 경우 명령의 결과는 다음 출력과 같을 수 있습니다.
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