Installazione di Custom Edition in un ambiente air-gapped
Un ambiente air-gapped è una rete fisicamente isolata dalle reti esterne per motivi di sicurezza. È possibile installare Custom Edition in un ambiente air-gapped.
Prerequisiti
Assicurarsi che siano soddisfatti i seguenti prerequisiti.
- Instana Si ottengono la chiave di vendita e la chiave di download.
- Instana e vengono scaricate le immagini dei contenitori di archiviazione dati.
Sicurezza
- Supporti sicuri approvati (unità USB o simili) per il trasferimento di artefatti
- Conformità alle politiche di sicurezza air-gap della tua organizzazione
Strumenti
Autorizzazioni e credenziali
- Accesso a una macchina online per scaricare artefatti
- Autorizzazione dell'amministratore del cluster per distribuire l'edizione personalizzata.
- Credenziali per:
- Instana repository degli artefatti ($DOWNLOAD_KEY)
- Registro contenitori interno (nome utente e password)
Procedura
- Per le immagini relative a " Linux on IBM Z and LinuxONE ", consultare la guida " Installazione degli archivi dati" all'indirizzo Linux on IBM Z and LinuxONE.
- Per le immagini relative a " Linux on Power ", consultare la guida " Installazione degli archivi dati" all'indirizzo Linux on Power ( ppc64le ).
Configurazione dell'ambiente.
- Preparare i cluster, lo storage e la rete dell' Kubernetes.
- Verifica dei prerequisiti: versioni Kubernetes e Helm
Installare il plug-in Instana kubectl, vedere Installazione del plug-in Instana kubectl.
Installare Helm :
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shVerificare le versioni di Instana e Operator:
kubectl instana -vRecupera l'elenco delle immagini sul backend di Instana :
kubectl instana versions list-images -d $DOWNLOAD_KEYÈ possibile visualizzare un output simile al seguente:
artifact-public.instana.io/backend/acceptor:3.xxx.xxx-0 ... ... artifact-public.instana.io/backend/gateway:1.26.3_v0.46.0 artifact-public.instana.io/backend/config-templates:3.xxx.xxx-0 artifact-public.instana.io/infrastructure/instana-enterprise-operator:1.3.0 artifact-public.instana.io/infrastructure/instana-enterprise-operator-webhook:1.3.0Carica artefatti:
Chiave di download per l'esportazione:
export DOWNLOAD_KEY="<download_key>"Accedi al registro dell' Instana :
Nota:Eseguire uno dei seguenti comandi a seconda che si utilizzi Skopeo o Docker.Skopeo:
skopeo login -u _ -p $DOWNLOAD_KEY artifact-public.instana.ioDocker:
docker login -u _ -p $DOWNLOAD_KEY artifact-public.instana.io
Accedi al registro immagini interno
Skopeo:
skopeo login -u <your_internal_artifactory_username> -p <your_internal_artifactory_password> <internal-image-registry>Docker:
docker login -u <your_internal_artifactory_username> -p <your_internal_artifactory_password> <internal-image-registry>Non modificare il nome effettivo delle immagini. Modifica solo l' URL e e il percorso di Artifactory. Ad esempio, se si esegue
kubectl instana versions list-imagese il nome dell'immagine restituito èartifact-public.instana.io/backend/acceptor:3.xxx.xxx–x, è necessario inviare l'immagine al proprio Artifactory interno nel seguente formato:<internal-image-registry>/<internal-image-repository-path>/acceptor:<tag_of_image>.
Installa edizione personalizzata :
Crea spazi dei nomi per Instana :
for ns in cert-manager instana-kafka instana-clickhouse instana-postgres instana-cassandra instana-elastic instana-core instana-units instana-operator; do kubectl create namespace $ns; doneCrea segreti di pull delle immagini negli spazi dei nomi dell' Instana.
for ns in cert-manager instana-kafka instana-clickhouse instana-postgres instana-cassandra instana-elastic instana-core instana-units instana-operator; do kubectl create secret docker-registry instana-registry --docker-server=<internal-image-registry> --docker-username=<your_internal_artifactory_username> --docker-password=<your_internal_artifactory_password> -n $ns; donePer il registro immagini interno di OpenShift Container Platform, questo passaggio può essere omesso.
Scaricare gli artefatti e caricarli in un registro immagini interno
Nota:Copia le immagini dal tuo host bastion nel tuo registro immagini interno. Eseguire una delle seguenti operazioni a seconda che si utilizzi Skopeo o Docker. Non modificare il nome effettivo delle immagini. Modifica solo l' URL e e il percorso di Artifactory. Ad esempio, se si esegue ekubectl instana versions list-imagesil nome dell'immagine restituito èartifact-public.instana.io/backend/acceptor:3.xxx.xxx–x, allora è necessario caricare l'immagine sul proprio Artifactory interno nel seguente formato: <registro-immagini-interno>/<percorso-repository-immagini-interno>/acceptor:<tag_dell'immagine>.Skopeo:
Copia le immagini Strimzi:
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:1.0.1_v0.33.0 docker://<internal-image-registry>/<internal-image-repository-path>/strimzi:1.0.1_v0.33.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka:1.0.1-kafka-4.1.2_v0.37.0 docker://<internal-image-registry>/<internal-image-repository-path>/kafka:1.0.1-kafka-4.1.2_v0.37.0Copia le immagini Elasticsearch :
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/operator/elasticsearch:3.4.1_v0.34.0 docker://<internal-image-registry>/<internal-image-repository-path>/elasticsearch-operator:3.4.1_v0.34.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/elasticsearch:8.19.18_v0.37.0 docker://<internal-image-registry>/<internal-image-repository-path>/elasticsearch:8.19.18_v0.37.0Copia le immagini CNPG Postgres :
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/operator/cloudnative-pg:v1.29.2_v0.35.0 docker://<internal-image-registry>/<internal-image-repository-path>/cloudnative-pg-operator:v1.29.2_v0.35.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cnpg-containers:15_v0.40.0 docker://<internal-image-registry>/<internal-image-repository-path>/cnpg-containers:15_v0.40.0Copia le immagini dell' Cassandra :
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/operator/cass-operator:1.30.3_v0.41.0 docker://<internal-image-registry>/<internal-image-repository-path>/cass-operator:1.30.3_v0.41.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/cassandra:4.1.11_v0.43.0 docker://<internal-image-registry>/<internal-image-repository-path>/cassandra:4.1.11_v0.43.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/system-logger:1.30.3_v0.24.0 docker://<internal-image-registry>/<internal-image-repository-path>/system-logger:1.30.3_v0.24.0 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/self-hosted-images/3rd-party/datastore/k8ssandra-client:0.8.14_v0.34.0 docker://<internal-image-registry>/<internal-image-repository-path>/k8ssandra-client:0.8.14_v0.34.0Copia le immagini dell' ClickHouse :
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/clickhouse-operator:v1.2.39 docker://<internal-image-registry>/<internal-image-repository-path>/clickhouse-operator:v1.2.39 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/clickhouse:25.8.13.73-7-lts-ibm docker://<internal-image-registry>/<internal-image-repository-path>/clickhouse:25.8.13.73-7-lts-ibmCopia le immagini cert-manager :
skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/jetstack/cert-manager-controller:v1.20.3 docker://<internal-image-registry>/<internal-image-repository-path>/cert-manager-controller:v1.20.3 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/jetstack/cert-manager-webhook:v1.20.3 docker://<internal-image-registry>/<internal-image-repository-path>/cert-manager-webhook:v1.20.3 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/jetstack/cert-manager-cainjector:v1.20.3 docker://<internal-image-registry>/<internal-image-repository-path>/cert-manager-cainjector:v1.20.3 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/jetstack/cert-manager-acmesolver:v1.20.3 docker://<internal-image-registry>/<internal-image-repository-path>/cert-manager-acmesolver:v1.20.3 skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/jetstack/cert-manager-startupapicheck:v1.20.3 docker://<internal-image-registry>/<internal-image-repository-path>/cert-manager-startupapicheck:v1.20.3- Copia le immagini del backend e dell'operatore dell' Instana :
while read p; do SOURCE=`echo "$p" | tac -s'/' | head -1`; echo $SOURCE; skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/backend/$SOURCE docker://<internal-image-registry>/<internal-image-repository-path>/$SOURCE; done<images.txt OPERATOR_IMAGE=`echo "$(cat images.txt | tail -1)" | tac -s'/' | head -1` skopeo copy --dest-tls-verify=false docker://artifact-public.instana.io/infrastructure/$OPERATOR_IMAGE docker://<internal-image-registry>/<internal-image-repository-path>/$OPERATOR_IMAGE
Docker
Immagini da trascinare:
docker pull artifact-public.instana.io/backend/acceptor:3.xxx.xxx–x docker pull artifact-public.instana.io/clickhouse-operator:v1.2.39Ritaggia immagini:
docker tag artifact-public.instana.io/backend/acceptor:3.xxx.xxx–x <internal-image-registry>/<internal-image-repository-path>/acceptor:3.xxx.xxx–x docker tag artifact-public.instana.io/clickhouse-operator:v1.2.39 <internal-image-registry>/<internal-image-repository-path>/clickhouse-operator:v1.2.39Immagini push:
docker push <internal-image-registry>/<internal-image-repository-path>/acceptor:3.xxx.xxx–x docker push <internal-image-registry>/<internal-image-repository-path>/clickhouse-operator:v1.2.39
Scarica i grafici dell' Helm :
Aggiungi i repository helm.
helm repo add instana https://artifact-public.instana.io/artifactory/rel-helm-customer-virtual --username=_ --password=$DOWNLOAD_KEYhelm repo updateScarica i grafici dell' Helm :
helm pull instana/ibm-clickhouse-operator --version=v1.2.0 helm pull instana/strimzi-kafka-operator --version=1.0.1 helm pull instana/eck-operator --version=3.4.1 helm pull instana/cloudnative-pg --version=0.29.0 helm pull instana/cass-operator --version=0.64.4 helm pull instana/cert-manager --version=v1.20.3
Installare gli archivi dati:
Installare Kafka :
- Installare Strimzi nell'operatore Kafka :
helm install strimzi ./$(ls | grep 'strimzi*' | head -1) --version 1.0.1 -n instana-kafka --create-namespace --set image.imagePullSecrets[0].name="instana-registry" --set image.registry=<internal-image-registry> --set image.name=strimzi --set image.tag=1.0.1_v0.33.0 --set kafka.image.registry=<internal-image-registry> --set kafka.image.name=kafka --set kafka.image.tag=1.0.1-kafka-4.1.2_v0.37.0 Crea un file YAML per il broker. Ad esempio,
kafka-broker.yamlcon la configurazione del broker.apiVersion: kafka.strimzi.io/v1 kind: KafkaNodePool metadata: name: kafka labels: strimzi.io/cluster: instana spec: replicas: 3 roles: - broker storage: type: jbod volumes: - id: 0 type: persistent-claim size: 50Gi deleteClaim: true template: pod: tmpDirSizeLimit: 500Mi # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchLabels: # strimzi.io/pool-name: kafka # topologyKey: "kubernetes.io/hostname"Distribuisci Broker.
kubectl apply -f kafka-broker.yaml -n instana-kafkaCrea un file YAML per il controller. Ad esempio,
kafka-controller.yamlcon la configurazione del controller.apiVersion: kafka.strimzi.io/v1 kind: KafkaNodePool metadata: name: controller labels: strimzi.io/cluster: instana spec: replicas: 3 roles: - controller storage: type: persistent-claim size: 50Gi deleteClaim: true template: pod: tmpDirSizeLimit: 500Mi # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchLabels: # strimzi.io/pool-name: controller # topologyKey: "kubernetes.io/hostname"Distribuisci controller.
kubectl apply -f kafka-controller.yaml -n instana-kafkaCrea un file YAML. Ad esempio,
kafka.yamlcon la configurazione Kafka.apiVersion: kafka.strimzi.io/v1 kind: Kafka metadata: name: instana labels: strimzi.io/cluster: instana annotations: strimzi.io/node-pools: enabled strimzi.io/kraft: enabled spec: kafka: Version: 4.1.2 listeners: - name: scram port: 9092 type: internal tls: false authentication: type: scram-sha-512 configuration: useServiceDnsDomain: true authorization: type: simple superUsers: - strimzi-kafka-user config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 default.replication.factor: 3 min.insync.replicas: 2 max.message.bytes: 52428800 message.max.bytes: 52428800 replica.fetch.max.bytes: 52428800 template: pod: tmpDirSizeLimit: 100Mi entityOperator: template: pod: tmpDirSizeLimit: 100Mi # Add the following securityContext snippet for Kubernetes offerings other than OCP. # securityContext: # runAsUser: 1000 # fsGroup: 1000 userOperator: image: <internal-image-registry>/<internal-image-repository-path>/strimzi:1.0.1_v0.33.0Distribuisci Kafka :
kubectl apply -f kafka.yaml -n instana-kafka kubectl wait kafka/instana --for=condition=Ready --timeout=300s -n instana-kafkaCreare un utente SASL/SCRAM in Kafka. Crea un file YAML, ad esempio
strimzi-kafka-user.yaml:apiVersion: kafka.strimzi.io/v1 kind: KafkaUser metadata: name: strimzi-kafka-user labels: strimzi.io/cluster: instana spec: authentication: type: scram-sha-512 authorization: type: simple acls: - resource: type: topic name: '*' patternType: literal operation: All host: "*" - resource: type: group name: '*' patternType: literal operation: All host: "*"Applica l'utente Kafka :
kubectl apply -f strimzi-kafka-user.yaml -n instana-kafka kubectl wait kafka/instana --for=condition=Ready --timeout=300s -n instana-kafkaRecupera la password dell'utente Strimzi- Kafka per la configurazione successiva:
kubectl get secret strimzi-kafka-user -n instana-kafka --template='{{index .data.password | base64decode}}' && echo- Memorizza la password recuperata nel
config.yamlfile:
datastoreConfigs: ... kafkaConfig: adminUser: strimzi-kafka-user adminPassword: <RETRIEVED_FROM_SECRET> consumerUser: strimzi-kafka-user consumerPassword: <RETRIEVED_FROM_SECRET> producerUser: strimzi-kafka-user producerPassword: <RETRIEVED_FROM_SECRET>- Installare Strimzi nell'operatore Kafka :
Installa Elasticsearch.
- Installare un operatore Elasticsearch. Se hai creato un segreto di pull dell'immagine, aggiungi
--set imagePullSecrets[0].name="<internal-image-registry-pull-secret>"al comando seguente.helm install elastic-operator ./$(ls | grep 'eck*' | head -1) -n instana-elastic --create-namespace --version=3.4.1 --set image.repository=<internal-image-registry>/<internal-image-repository-path>/elasticsearch-operator --set image.tag=3.4.1_v0.34.0 Crea un account di servizio ElasticSearch.
kubectl create serviceaccount elasticsearch -n instana-elasticCreare un file YAML, ad esempio
elastic.yaml, con la configurazione Elasticsearch.apiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata: name: instana spec: version: 8.19.18 image: <internal-image-registry>/<internal-image-repository-path>/elasticsearch:8.19.18_v0.37.0 nodeSets: - name: default count: 3 config: node.roles: - master - data - ingest node.store.allow_mmap: false podTemplate: spec: serviceAccountName: elasticsearch imagePullSecrets: - name: instana-registry volumeClaimTemplates: - metadata: name: elasticsearch-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi http: tls: selfSignedCertificate: disabled: trueDistribuisci Elasticsearch :
kubectl apply -f elastic.yaml -n instana-elastic kubectl wait elasticsearch/instana --for=condition=ReconciliationComplete --timeout=300s -n instana-elasticPer impostazione predefinita, viene creato un utente con il nome "elastic" con una password generata in modo casuale.
Recupera la password dell'utente per la configurazione successiva:
kubectl get secret instana-es-elastic-user -n instana-elastic -o go-template='{{.data.elastic | base64decode}}' && echo- Sostituisci <RETRIEVED_FROM_SECRET> nel
config.yamlfile con la password recuperata:
datastoreConfigs: ... elasticsearchConfig: adminUser: elastic adminPassword: <RETRIEVED_FROM_SECRET> user: elastic password: <RETRIEVED_FROM_SECRET> ...- Installare un operatore Elasticsearch. Se hai creato un segreto di pull dell'immagine, aggiungi
Installa Postgres.
Per l'edizione personalizzata su un cluster Red Hat OpenShift, determinare l'ID del gruppo del file system su Red Hat OpenShift. Red Hat OpenShift richiede che i gruppi del file system rientrino in un intervallo di valori specifico per lo spazio dei nomi.
- Se stai implementando Custom Edition su un cluster Red Hat OpenShift, ottieni l'intervallo di utenti autorizzati.
kubectl get namespace instana-postgres -o yamlViene visualizzato un output simile al seguente esempio:
apiVersion: v1 kind: Namespace metadata: annotations: ....... openshift.io/sa.scc.uid-range: 1000750000/10000 labels: kubernetes.io/metadata.name: instana-postgres ....... name: instana-postgresL'annotazione
openshift.io/sa.scc.supplemental-groupscontiene l'intervallo degli ID consentiti. L'intervallo 1000750000/10000 indica 10.000 valori che iniziano con l'ID 1000750000 con un intervallo di ID compreso tra 1000750000 e 1000760000. Nell'esempio, il valore 1000750000 è utilizzato come ID gruppo del file system.Installare l'operatore Postgres :
helm install cnpg cloudnative-pg-0.29.0.tgz --set image.repository=<internal-image-registry>/<internal-image-repository-path>/cloudnative-pg-operator --set image.tag=v1.29.2_v0.35.0 --version=0.29.0 -n instana-postgres# Applicable for Openshift clusters helm install cnpg cloudnative-pg-0.29.0.tgz --set image.repository=<internal-image-registry>/<internal-image-repository-path>/cloudnative-pg-operator --set image.tag=v1.29.2_v0.35.0 --version=0.29.0 --set containerSecurityContext.runAsUser=<UID from namespace> --set containerSecurityContext.runAsGroup=<UID from namespace> -n instana-postgresGenera una password per l'archivio dati Postgres.
- Genera una password casuale:
openssl rand -base64 24 | tr -cd 'a-zA-Z0-9' | head -c32; echo - Crea un file, ad esempio
postgres-secret.yaml:kind: Secret apiVersion: v1 metadata: name: instanaadmin type: Opaque stringData: username: instanaadmin password: <user-generate-password> # Generated password - Applicare il
postgres-secrets.yamlfile:
kubectl apply -f postgres-secrets.yaml -n instana-postgres- Genera una password casuale:
Creare un file YAML, ad esempio
postgres.yamlper la configurazione dell'archivio dati:apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: postgres spec: instances: 3 imageName: <internal-image-registry>/<internal-image-repository-path>/cnpg-containers:15_v0.40.0 imagePullPolicy: IfNotPresent imagePullSecrets: - name: instana-registry postgresql: parameters: shared_buffers: 32MB pg_stat_statements.track: all auto_explain.log_min_duration: '10s' pg_hba: - local all all trust - host all all 0.0.0.0/0 md5 - local replication standby trust - hostssl replication standby all md5 - hostnossl all all all reject - hostssl all all all md5 managed: roles: - name: instanaadmin login: true superuser: true createdb: true createrole: true passwordSecret: name: instanaadmin bootstrap: initdb: database: instanaadmin owner: instanaadmin secret: name: instanaadmin superuserSecret: name: instanaadmin storage: size: 1GiDistribuisci Postgres :
kubectl apply -f postgres.yaml -n instana-postgresSalva la password generata nel
config.yamlfile:datastoreConfigs: ... postgresConfigs: - user: instanaadmin password: <USER_GENERATED_PASSWORD> adminUser: instanaadmin adminPassword: <USER_GENERATED_PASSWORD> ...
Installa Cassandra.
Installare Cert-Manager: Cassandra utilizza Cert Manager per generare certificati.
helm install cert-manager cert-manager-v1.20.3.tgz --namespace cert-manager --create-namespace --version v1.20.3 --set installCRDs=true --set prometheus.enabled=false --set image.repository=<internal-image-registry>/<internal-image-repository-path>/cert-manager-controller --set webhook.image.repository=<internal-image-registry>/<internal-image-repository-path>/cert-manager-webhook --set cainjector.image.repository=<internal-image-registry>/<internal-image-repository-path>/cert-manager-cainjector --set acmesolver.image.repository=<internal-image-registry>/<internal-image-repository-path>/cert-manager-acmesolver --set startupapicheck.image.repository=<internal-image-registry>/<internal-image-repository-path>/cert-manager-startupapicheckSe si sta implementando Custom Edition su un cluster Red Hat OpenShift, creare un file, ad esempio
cassandra-scc.yaml:# Applicable for Openshift clusters 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:cassandraApplicare il file:
# Applicable for Openshift clusters kubectl apply -f cassandra-scc.yamlInstalla Cass Operator:
helm install cass-operator cass-operator-0.64.4.tgz -n instana-cassandra --create-namespace --version=0.64.4 --set securityContext.runAsGroup=999 --set securityContext.runAsUser=999 --set image.registry=<internal-image-registry> --set image.repository=cass-operator --set image.tag=1.30.3_v0.41.0 --set appVersion=1.30.3 --set global.imageConfig.images.system-logger.repository=system-logger --set global.imageConfig.images.system-logger.tag=1.30.3_v0.24.0 --set global.imageConfig.images.k8ssandra-client.repository=k8ssandra-client --set global.imageConfig.images.k8ssandra-client.tag=0.8.14_v0.34.0Crea un file, ad esempio
cassandra.yaml:apiVersion: cassandra.datastax.com/v1beta1 kind: CassandraDatacenter metadata: name: cassandra spec: clusterName: instana serverType: cassandra serverImage: <internal-image-registry>/<internal-image-repository-path>/cassandra:4.1.11_v0.43.0 k8ssandraClientImage: <internal-image-registry>/<internal-image-repository-path>/k8ssandra-client:0.8.14_v0.34.0 systemLoggerImage: <internal-image-registry>/<internal-image-repository-path>/system-logger:1.30.3_v0.24.0 serverVersion: 4.1.11 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: 30Gi 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: trueDistribuisci Cassandra :
kubectl apply -f cassandra.yaml -n instana-cassandraPer impostazione predefinita, il data center di Cassandra crea un superutente, ad esempio clusterName -superuser. clusterName è il valore specificato nel file
.spec.clusterNamecassandra.yaml. Il nome segreto è instana-superuser.Recupera la password di
instana-superuser:kubectl get secret instana-superuser -n instana-cassandra --template='{{index .data.password | base64decode}}' && echoNel
config.yamlfile, sostituisci<RETRIEVED_FROM_SECRET>con la password recuperata:datastoreConfigs: ... cassandraConfigs: - user: instana-superuser password: <RETRIEVED_FROM_SECRET> adminUser: instana-superuser adminPassword: <RETRIEVED_FROM_SECRET> ...
Installare l' ClickHouse:
- Se si sta implementando Custom Edition su un cluster Red Hat OpenShift, creare un file, ad esempio
clickhouse-scc.yaml:apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: clickhouse-scc runAsUser: type: RunAsAny seLinuxContext: type: RunAsAny fsGroup: type: RunAsAny supplementalGroups: type: RunAsAny allowHostDirVolumePlugin: false allowHostNetwork: true allowHostPorts: true allowPrivilegedContainer: false allowHostIPC: true allowHostPID: true readOnlyRootFilesystem: false users: - system:serviceaccount:instana-clickhouse:clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse-operator-ibm-clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse - system:serviceaccount:instana-clickhouse:clickhousekeeper Applicare il file:
# Applicable for Openshift cluster kubectl apply -f clickhouse-scc.yamlInstallare l'operatore ClickHouse :
helm install clickhouse-operator ibm-clickhouse-operator-v1.2.39.tgz -n instana-clickhouse --version=v1.2.0 --set operator.image.repository=<internal-image-registry>/<internal-image-repository-path>/clickhouse-operator --set operator.image.tag=v1.2.39Creare un file YAML, ad esempio clickhouse_keeper.yaml, con la definizione
ClickHouseKeeperInstallationdelle risorse.apiVersion: "clickhouse-keeper.altinity.com/v1" kind: "ClickHouseKeeperInstallation" metadata: name: clickhouse-keeper namespace: instana-clickhouse spec: configuration: clusters: - name: "local" layout: replicasCount: 3 settings: logger/level: "information" logger/console: "true" listen_host: "0.0.0.0" keeper_server/snapshot_storage_path: /var/lib/clickhouse-keeper/coordination/snapshots/store keeper_server/log_storage_path: /var/lib/clickhouse-keeper/coordination/logs/store keeper_server/storage_path: /var/lib/clickhouse-keeper/ keeper_server/tcp_port: "2181" keeper_server/four_letter_word_white_list: "*" keeper_server/coordination_settings/raft_logs_level: "information" keeper_server/raft_configuration/server/port: "9444" prometheus/endpoint: "/metrics" prometheus/port: "7000" prometheus/metrics: "true" prometheus/events: "true" prometheus/asynchronous_metrics: "true" prometheus/status_info: "false" zookeeper/node/host: "localhost" zookeeper/node/port: "9181" templates: podTemplates: - name: clickhouse-keeper spec: # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchLabels: # app: clickhouse-keeper # topologyKey: "kubernetes.io/hostname" containers: - name: clickhouse-keeper imagePullPolicy: IfNotPresent image: <internal-image-registry>/<internal-image-repository-path>/clickhouse:25.8.13.73-7-lts-ibm command: - clickhouse-keeper - --config-file=/etc/clickhouse-keeper/keeper_config.xml resources: requests: memory: "1Gi" serviceAccountName: clickhousekeeper imagePullSecrets: - name: instana-registry securityContext: fsGroup: 0 runAsGroup: 0 runAsUser: 1001 initContainers: - name: server-id-injector imagePullPolicy: IfNotPresent image: <internal-image-registry>/<internal-image-repository-path>/clickhouse:25.8.13.73-7-lts-ibm volumeClaimTemplates: - name: log-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20Gi - name: snapshot-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20GiDistribuisci ClickHouseKeeper.
kubectl apply -f clickhouse_keeper.yaml -n instana-clickhouseCrea un file, ad esempio
clickhouse_installation.yaml:apiVersion: "clickhouse.altinity.com/v1" kind: "ClickHouseInstallation" metadata: name: "instana" spec: defaults: templates: dataVolumeClaimTemplate: instana-clickhouse-data-volume logVolumeClaimTemplate: instana-clickhouse-log-volume serviceTemplate: service-template configuration: files: config.d/storage.xml: | <clickhouse> <storage_configuration> <disks> <default/> <cold_disk> <path>/var/lib/clickhouse-cold/</path> </cold_disk> </disks> <policies> <logs_policy> <volumes> <data> <disk>default</disk> </data> <cold> <disk>cold_disk</disk> </cold> </volumes> </logs_policy> <logs_policy_v4> <volumes> <tier1> <disk>default</disk> </tier1> <tier2> <disk>cold_disk</disk> </tier2> </volumes> </logs_policy_v4> </policies> </storage_configuration> </clickhouse> clusters: - name: local templates: podTemplate: clickhouse layout: shardsCount: 1 replicasCount: 2 # The replication count of 2 is fixed for Instana backend installations schemaPolicy: replica: None shard: None zookeeper: nodes: - host: clickhouse-keeper-headless.instana-clickhouse #if you use ClickhouseKeeper # - host: instana-zookeeper-headless.instana-clickhouse profiles: default/prefer_localhost_replica: 1 default/max_memory_usage: 10000000000 # If memory limits are set, this value must be adjusted according to the limits. default/joined_subquery_requires_alias: 0 default/max_execution_time: 100 default/max_query_size: 1048576 default/use_uncompressed_cache: 0 default/enable_http_compression: 1 default/load_balancing: random default/background_pool_size: 32 default/background_schedule_pool_size: 32 default/distributed_directory_monitor_split_batch_on_failure: 1 default/distributed_directory_monitor_batch_inserts: 1 default/insert_distributed_sync: 1 default/log_queries: 1 default/log_query_views: 1 default/max_threads: 16 default/allow_experimental_database_replicated: 1 default/allow_experimental_analyzer: 0 quotas: default/interval/duration: 3600 default/interval/queries: 0 default/interval/errors: 0 default/interval/result_rows: 0 default/interval/read_rows: 0 default/interval/execution_time: 0 settings: remote_servers/all-sharded/secret: clickhouse-default-pass remote_servers/all-replicated/secret: clickhouse-default-pass remote_servers/local/secret: clickhouse-default-pass max_concurrent_queries: 200 max_table_size_to_drop: 0 max_partition_size_to_drop: 0 users: default/password: "clickhouse-default-pass" clickhouse-user/networks/ip: "::/0" clickhouse-user/password: "clickhouse-pass" # Or # Generate password and the corresponding SHA256 hash with: # $ PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-' # 6edvj2+d <- first line is the password # a927723f4a42cccc50053e81bab1fcf579d8d8fb54a3ce559d42eb75a9118d65 <- second line is the corresponding SHA256 hash # clickhouse-user/password_sha256_hex: "a927723f4a42cccc50053e81bab1fcf579d8d8fb54a3ce559d42eb75a9118d65" # Or # Generate password and the corresponding SHA1 hash with: # $ PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-' # LJfoOfxl <- first line is the password, put this in the k8s secret # 3435258e803cefaab7db2201d04bf50d439f6c7f <- the corresponding double SHA1 hash, put this below # clickhouse-user/password_double_sha1_hex: "3435258e803cefaab7db2201d04bf50d439f6c7f" templates: podTemplates: - name: clickhouse spec: # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchExpressions: # - key: "clickhouse.altinity.com/app" # operator: In # values: # - "chop" # topologyKey: "kubernetes.io/hostname" containers: - name: instana-clickhouse image: <internal-image-registry>/<internal-image-repository-path>/clickhouse:25.8.13.73-7-lts-ibm command: - clickhouse-server - --config-file=/etc/clickhouse-server/config.xml volumeMounts: - mountPath: /var/lib/clickhouse-cold/ name: instana-clickhouse-data-cold-volume - name: clickhouse-log image: <internal-image-registry>/<internal-image-repository-path>/clickhouse:25.8.13.73-7-lts-ibm args: - while true; do sleep 30; done; command: - /bin/sh - -c - -- serviceAccountName: clickhouse imagePullSecrets: - name: instana-registry securityContext: fsGroup: 0 runAsGroup: 0 runAsUser: 1001 # Optional - uncomment the following lines if resources need to be specifically defined for the clickhouse pods. The following values are for example only. # resources: # limits: # cpu: "4" # memory: 4Gi # requests: # cpu: "1" # memory: 2Gi volumeClaimTemplates: - name: instana-clickhouse-data-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi - name: instana-clickhouse-log-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi - name: instana-clickhouse-data-cold-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi serviceTemplates: - name: service-template generateName: "clickhouse-{chi}" spec: ports: - name: http port: 8123 - name: tcp port: 9000 type: ClusterIPAggiorna il
zookeeper.nodes.hostcampo con il nome host del tuo cluster Clickhouse Keeper.Per impostazione predefinita,
clickhouse-usereclickhouse-passvengono aggiunti a ClickHouse.Distribuisci ClickHouse.
kubectl apply -f clickhouse_installation.yaml -n instana-clickhouseNel
config.yamlfile, sostituisci<USER_GENERATED_PASSWORD>con la password recuperata:Nota:È necessario utilizzare la stessa password casuale creata in precedenza al momento dell'installazione di ClickHouse (versione online) o di ClickHouse (versione offline). Non utilizzare la password hash corrispondente SHA256.datastoreConfigs: ... clickhouseConfigs: - user: clickhouse-user password: <USER_GENERATED_PASSWORD> adminUser: clickhouse-user adminPassword: <USER_GENERATED_PASSWORD> ...
- Se si sta implementando Custom Edition su un cluster Red Hat OpenShift, creare un file, ad esempio
Opzionale: installare BeeInstana, vedere Installazione dell' BeeInstana Operatore Kubernetes offline (air-gapped).
Installare un operatore aziendal Instana. Creare e configurare un file dei valori da utilizzare nel
Instana-Operatorfile:Crea un file dei valori, vedi Creazione del file dei valori.
Aggiungi le seguenti righe al file dei valori:
operator: image: registry: <internal-image-registry> repository: <internal-image-repository-path>/instana-enterprise-operator webhook: image: registry: <internal-image-registry> repository: <internal-image-repository-path>/instana-enterprise-operator-webhook imagePullSecrets: - name: instana-registryApplica le modifiche:
kubectl instana operator apply -n instana-operator --values <pathtoFile>/values.yamlVerifica l'implementazione dell'operatore Enterprise dell' Instana :
kubectl get all -n instana-operator
Dettagli sull'implementazione del core " Instana ".
Crea segreti fondamentali CoreSecret.
Crea un file, ad esempio
core.yamlper distribuire il core CreatingACore.apiVersion: instana.io/v1beta2 kind: Core metadata: name: instana-core spec: ... gatewayConfig: controller: imageConfig: registry: <internal-image-registry> gateway: imageConfig: registry: <internal-image-registry> imageConfig: registry: <internal-image-registry> repository: <internal-image-repository-path> imagePullSecrets: - name: instana-registry ...
Distribuisci un'unità Instana.
Recupera la chiave di DownloadingTheLicenseFile licenza.
kubectl instana license download --sales-key <redacted>Crea segreti dell'unità UnitSecret.
Crea un file, ad esempio
units.yamlper distribuire l'unità CreateAUnitAndTenant.