在 Linux on Power 上创建一个 Cassandra 数据存储( ppc64le )
您可以安装 Cassandra 操作程序并设置数据存储器。
准备工作
确保已准备好联机和脱机主机以从外部存储库中拉取映像。 此外,请确保添加了正确的 Helm 存储库。
如需更多信息,请参阅 “准备安装数据存储 ”。
Cassandra 用于部署的操作系统版本和镜像标签
置顶的 Helm Chart 或操作程序版本需要以下映像。
| 平台 | 操作程序版本 | Helm Chart 版本 | 带有标记的图像 |
|---|---|---|---|
| 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 操作员之前创建一个安全上下文约束(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.io安装 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创建一个名为 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完成 部署和验证 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 主机上完成以下步骤。
将映像重新标记到内部映像注册表。
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将映像推送到防御主机上的内部映像注册表。
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创建
instana-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 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>创建一个名为 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完成 部署和验证 Cassandra (联机和脱机)中的步骤。
部署和验证 Cassandra (在线和离线)
<clustername>-superuser。 该值 <clustername> 是在 文件 cassandra.yaml 中 部分 .spec.clusterName 中指定的。 在下面的命令中,以 secret instana-superuser name 为例。要部署 Cassandra 实例并创建数据存储器,请完成以下步骤:
通过运行以下命令来部署 Cassandra 。
kubectl apply -f cassandra.yaml --namespace=instana-cassandra检索
instana-superuser的密码。kubectl get secret instana-superuser -n instana-cassandra --template='{{index .data.password | base64decode}}' && echo将密码存储在
config.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-cassandra如果成功部署了 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