Linux on Power ( ppc64le ) 에서 Kafka 데이터 저장소 생성하기
Kafka 운영자를 설치하고 데이터 저장소를 설정하십시오.
시작하기 전에
외부 저장소에서 이미지를 가져오기 위해 온라인 및 오프라인 호스트를 준비했는지 확인하십시오. 또한 올바른 Helm 저장소가 추가되었는지 확인하십시오.
자세한 내용은 ‘데이터 스토어 설치 준비’를 참조하십시오.
Strimzi( 0.46.0 )에서 Kafka 버전( 3.8.0 및 3.8.1 ), ZooKeeper-based ( Apache Kafka ) 클러스터, 그리고 KRaft 마이그레이션에 대한 지원이 중단되었습니다. Strimzi( 0.45.0 ) 또는 그 이전 버전을 사용 중이라면, Strimzi( 0.46.0 )로 업그레이드하기 전에 먼저 KRaft로 마이그레이션해야 합니다.
Z ookeeper 기반 클러스터에서 KRaft 클러스터로 데이터를 마이그레이션하는 방법에 대한 자세한 내용은 온라인 문서의 ‘ Kafka 용 Zookeeper에서 KRaft로의 마이그레이션’을 참조하십시오.
Kafka 배포용 운영체제 버전 및 이미지 태그
고정된 Helm 차트 또는 운영자 버전에는 다음 이미지가 필요합니다.
| 플랫폼 | 오퍼레이터 버전 | Helm 차트 버전 | 태그가 있는 이미지 |
|---|---|---|---|
| Linux® on Power® (ppc64le) | 0.51.0 | 0.51.0 | artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi: 0.51.0_v0.32.0 artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka: 0.51.0-kafka-4.1.1_v0.32.0 |
Kafka 온라인 설치
Kafka 데이터 저장소를 설치하려면 다음 단계를 완료하십시오.
instana-kafka네임스페이스를 만듭니다.kubectl create namespace instana-kafkaKafka 연산자와 이미지에 대한 이미지 풀 시크릿을 만들고 다운로드 키로
<download_key>값을 업데이트합니다.kubectl create secret docker-registry instana-registry \ --namespace=instana-kafka \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.io스트림지 연산자를 설치합니다.
helm install strimzi-kafka-operator instana/strimzi-kafka-operator --version 0.51.0 -n instana-kafka --set image.registry=artifact-public.instana.io --set image.repository=self-hosted-images/3rd-party/operator --set image.name=strimzi --set image.tag=0.51.0_v0.32.0 --set image.imagePullSecrets[0].name="instana-registry" --set kafka.image.registry=artifact-public.instana.io --set kafka.image.repository=self-hosted-images/3rd-party/datastore --set kafka.image.name=kafka --set kafka.image.tag=0.51.0-kafka-4.1.1_v0.32.0브로커용 ` YAML ` 파일을 생성합니다. 예를 들어, 브로커
kafka-broker.yaml구성의 경우.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브로커를 배포합니다.
kubectl apply -f kafka-broker.yaml -n instana-kafka컨트롤러용 ` YAML ` 파일을 생성합니다. 예를 들어, 컨트롤러
kafka-controller.yaml구성의 경우.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컨트롤러 배포.
kubectl apply -f kafka-controller.yaml -n instana-kafkaYAML 파일을 작성하십시오. 예를 들어, `
kafka.yamlKafka ` 구성을 사용할 경우.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.1 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 replica.fetch.max.bytes: 52428800 template: pod: tmpDirSizeLimit: 100Mi entityOperator: template: pod: tmpDirSizeLimit: 100Mi userOperator: image: artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:0.51.0_v0.32.0Kafka (온라인 및 오프라인)의 단계를 완료하십시오.
Kafka 오프라인 설치
설치 준비시 외부 레지스트리에서 ClickHouse 이미지를 아직 가져오지 않은 경우 지금 가져올 수 있습니다. bastion 호스트에서 다음 명령을 실행하십시오. 그런 다음, 해당 이미지를 에어갭 환경에 있는 Instana 호스트로 복사하십시오.
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:0.51.0_v0.32.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka:0.51.0-kafka-4.1.1_v0.32.0
Instana 호스트에서 다음 단계를 수행하십시오.
이미지를 내부 이미지 레지스트리에 다시 태그 지정하십시오.
docker tag artifact-public.instana.io/self-hosted-images/3rd-party/strimzi/operator:0.51.0_v0.32.0 <internal-image-registry>/self-hosted-images/3rd-party/strimzi/operator:0.51.0_v0.32.0 docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka:0.51.0-kafka-4.1.1_v0.32.0<internal-image-registry>/self-hosted-images/3rd-party/strimzi/kafka:0.51.0-kafka-4.1.1_v0.32.0배스천 호스트의 내부 이미지 레지스트리에 이미지를 푸시하십시오.
docker push <internal-image-registry>/self-hosted-images/3rd-party/strimzi/operator:0.51.0_v0.32.0 docker push <internal-image-registry>/self-hosted-images/3rd-party/strimzi/kafka:0.51.0-kafka-4.1.1_v0.32.0instana-kafka네임스페이스를 만듭니다:kubectl create namespace instana-kafka선택 사항입니다: 내부 이미지 레지스트리에 인증이 필요한 경우 이미지 풀 시크릿을 생성합니다.
kubectl create secret docker-registry <secret_name> --namespace instana-kafka \ --docker-username=<registry_username> \ --docker-password=<registry_password> \ --docker-server=<internal-image-registry>:<internal-image-registry-port> \ --docker-email=<registry_email>스트림지 오퍼레이터를 설치합니다. 이전 단계에서 이미지 풀 시크릿을 만든 경우 다음 명령에
--set image.imagePullSecrets[0].name="<internal-image-registry-pull-secret>"을 추가합니다.helm install strimzi-kafka-operator strimzi-kafka-operator-0.51.0.tgz --version 0.51.0 -n instana-kafka --set image.registry=<internal-image-registry> --set image.repository=self-hosted-images/3rd-party/strimzi --set image.name=operator --set image.tag=0.51.0_v0.32.0 --set kafka.image.registry=<internal-image-registry> --set kafka.image.repository=self-hosted-images/3rd-party/strimzi --set kafka.image.name=kafka --set kafka.image.tag=0.51.0-kafka-4.1.1_v0.32.0브로커용 ` YAML ` 파일을 생성합니다. 예를 들어, 브로커
kafka-broker.yaml구성의 경우.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브로커를 배포합니다.
kubectl apply -f kafka-broker.yaml -n instana-kafka컨트롤러용 ` YAML ` 파일을 생성합니다. 예를 들어, 컨트롤러
kafka-controller.yaml구성의 경우.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컨트롤러 배포.
kubectl apply -f kafka-controller.yaml -n instana-kafka예를
kafka.yaml들어, Kafka 구성을 포함하는 ` YAML ` 파일을 생성합니다.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.1 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 replica.fetch.max.bytes: 52428800 template: pod: tmpDirSizeLimit: 100Mi entityOperator: template: pod: tmpDirSizeLimit: 100Mi userOperator: image: <internal-image-registry>/self-hosted-images/3rd-party/strimzi/operator:0.51.0_v0.32.0- Kafka (온라인 및 오프라인)의 단계를 완료하십시오.
Kafka 배포 및 검증 (온라인 및 오프라인)
Kafka 인스턴스를 배치하고 데이터 저장소를 작성하려면 다음 단계를 완료하십시오.
Kafka를 배치하십시오.
kubectl apply -f kafka.yaml -n instana-kafka kubectl wait kafka/instana --for=condition=Ready --timeout=300s -n instana-kafkaSSL/SCRAM을 사용하여 Kafka 클러스터로 인증할 수 있는 Kafka 사용자를 작성하십시오.
YAML 파일을 생성합니다. 예를 들어
strimzi-kafka-user.yaml, Kafka 사용자 사양을 포함하도록 합니다.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: "*"strimzi-kafka-user사용자를 작성하십시오.kubectl apply -f strimzi-kafka-user.yaml -n instana-kafka kubectl wait kafkauser/strimzi-kafka-user --for=condition=Ready --timeout=60s -n instana-kafkastrimzi-kafka-user의 비밀번호를 검색하십시오.kubectl get secret strimzi-kafka-user -n instana-kafka --template='{{index .data.password | base64decode}}' && echo검색된 비밀번호를
config.yaml파일에 저장하십시오.<RETRIEVED_FROM_SECRET>값을 이전 단계에서 얻은 비밀번호로 대체하십시오.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> ...
Instana ( Kafka ) 설치 상태를 확인하십시오.
kubectl get all -n instana-kafka출력은 다음 예제와 같을 수 있습니다.
NAME READY STATUS RESTARTS AGE pod/instana-entity-operator-8564975588-mrz2f 3/3 Running 0 15m pod/instana-kafka-0 1/1 Running 0 16m pod/instana-kafka-1 1/1 Running 0 16m pod/instana-kafka-2 1/1 Running 0 16m pod/instana-controller-0 1/1 Running 0 17m pod/instana-controller-1 1/1 Running 0 17m pod/instana-controller-2 1/1 Running 0 17m pod/strimzi-cluster-operator-cf49c75d8-qm8jq 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/instana-kafka-bootstrap ClusterIP 192.168.1.239 <none> 9091/TCP,9092/TCP 16m service/instana-kafka-brokers ClusterIP None <none> 9090/TCP,9091/TCP,9092/TCP 16m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/instana-entity-operator 1/1 1 1 15m deployment.apps/strimzi-cluster-operator 1/1 1 1 34m NAME DESIRED CURRENT READY AGE replicaset.apps/instana-entity-operator-8564975588 1 1 1 15m replicaset.apps/strimzi-cluster-operator-cf49c75d8 1 1 1 34m
Kafka 설치 후 수행할 작업 (온라인 및 오프라인)
Kafka 운영자를 성공적으로 설치한 후 필요한 경우 다음 태스크를 완료하십시오.
(선택 사항) 크루즈 컨트롤을 사용하여 클러스터 부하 분산
크루즈 제어는 Kafka 클러스터에서 워크로드의 밸런스를 유지합니다. 자세한 정보는 크루즈 제어를 사용한 클러스터 밸런싱을 참조하십시오.
Kafka 배치에서 크루즈 컨트롤을 사용하려면 다음 단계를 완료하십시오.
클러스터의 브로커에 메트릭 리포터를 설치하십시오. 자세한 내용은 ‘ Kafka 모니터링’을 참조하십시오.
크루즈 컨트롤 서버 배포를 생성합니다.
편집할
Kafka사용자 정의 자원을 여십시오.kubectl edit kafkas.kafka.strimzi.io <your-kafka-cluster-name> -n instana-kafkaKafka사용자 정의 자원에 다음 구성을 추가하십시오.apiVersion: kafka.strimzi.io/v1 kind: Kafka metadata: name: instana spec: # ... cruiseControl: {}
구성을 적용하십시오.
kubectl apply -f kafka.yaml -n instana-kafka구성을 적용할 때 Kafka 는 모든 기본 크루즈 제어 설정을 사용하여 크루즈 제어 서버를 배치합니다. 새 클러스터를 시작하는 대신 기존 클러스터에 크루즈 제어를 추가하면 모든 Kafka 브로커 팟 (Pod) 이 메트릭 리포터를 설치하기 위해 롤링하는 것을 볼 수 있습니다.
클러스터에 크루즈 제어가 배치되었는지 확인하십시오.
kubectl get pods -n instana-kafka명령 출력은 다음 예제에 표시된 대로 크루즈 제어 팟 (Pod) 을 표시합니다.
NAME READY STATUS RESTARTS AGE instana-cruise-control-6fcbd54b48-ndzrh 2/2 Running 0 8m48s instana-entity-operator-78d7995695-8tt2v 3/3 Running 0 12m instana-kafka-0 2/2 Running 0 9m12s instana-kafka-1 2/2 Running 0 10m instana-kafka-2 2/2 Running 0 9m46s instana-controller-0 1/1 Running 0 13m instana-controller-1 1/1 Running 0 13m instana-controller-2 1/1 Running 0 13m strimzi-cluster-operator-54565f8c56-rmdb8 1/1 Running 0 14m크루즈 제어가 배치된 후에는 각 브로커에서 메트릭 기자가 작성하는 토픽에서 메트릭을 가져오기 시작합니다.
최적화 제안 받기
크루즈 제어가 배치된 후 최적화 제안을 생성할 수 있습니다. 이를 수행하려면 KafkaRebalance 사용자 정의 자원을 적용해야 합니다 (이에 대한 정의는 Strimzi를 설치할 때 설치됨). 기본 KafkaRebalance 가 다음 예제에 표시되어 있습니다.
apiVersion: kafka.strimzi.io/v1
kind: KafkaRebalance
metadata:
name: my-rebalance
labels:
strimzi.io/cluster: instana
# no goals specified, using the default goals from the Cruise Control configuration
spec: {}
다른 자원과 마찬가지로 KafkaRebalance 사용자 정의 자원을 배치할 수 있습니다.
kubectl apply -f kafka-rebalance.yaml -n instana-kafka
KafkaRebalance 리소스를 Kafka 클러스터에 적용하면, 클러스터 운영자는 크루즈 컨트롤에 관련 요청을 발행하여 최적화 제안을 가져옵니다. 클러스터 운영자는 크루즈 컨트롤의 KafkaRebalance 상태와 진행률 업데이트를 저장합니다. 다음 명령을 사용하여 업데이트를 확인할 수 있습니다.
kubectl describe kafkarebalance my-rebalance -n instana-kafka
결과는 다음 예제와 같을 수 있습니다.
Name: my-rebalance
Namespace: instana-kafka
Labels: strimzi.io/cluster=instana
Annotations: API Version: kafka.strimzi.io/v1
Kind: KafkaRebalance
Metadata:
# ...
Status:
Conditions:
Last Transition Time: 2023-04-04T11:13:35.749066535Z
Status: ProposalReady
Type: State
Observed Generation: 1
Optimization Result:
Data To Move MB: 0
Excluded Brokers For Leadership:
Excluded Brokers For Replica Move:
Excluded Topics:
Intra Broker Data To Move MB: 12
Monitored Partitions Percentage: 100
Num Intra Broker Replica Movements: 0
Num Leader Movements: 24
Num Replica Movements: 55
On Demand Balancedness Score After: 84.23162054159118
On Demand Balancedness Score Before: 80.87946050436929
Recent Windows: 5
Session Id: 42f7cc24-b295-4406-80c9-c3c7a3625180
다음 항목은 KafkaRebalance 요청의 주요 파트입니다.
Status.Conditions.Status필드는 재조정 요청의 진행 상태를 표시합니다. 제안이 아직 준비되지 않은 경우ProposalPending가Status로 표시될 수 있습니다.Status.Optimization Result(제안이 준비되면) 는 최적화 제안의 요약을 표시합니다. 이러한 각 값의 의미는 Strimzi 문서에 설명되어 있습니다.
클러스터 재조정 시작
KafkaRebalance 제안이 사용자의 요구사항과 일치하는 경우, approve 어노테이션을 크루즈 제어의 KafkaRebalance 자원에 적용하여 변경사항 적용을 시작할 수 있습니다.
kubectl annotate kafkarebalance my-rebalance strimzi.io/rebalance=approve -n instana-kafka
approve 어노테이션을 적용하면, 크루즈 제어가 KafkaRebalance 제안의 변경사항을 업데이트합니다. 클러스터 운영자는 리밸런싱이 진행되는 동안 KafkaRebalance 리소스의 상태를 최신 상태로 유지합니다. 다음 명령을 실행하여 재조정의 진행 상태를 확인할 수 있습니다.
kubectl describe kafkarebalance my-rebalance -n instana-kafka
재조정이 진행 중이면 Status 에 Rebalancing가 표시됩니다. 재조정이 완료되면 Status 에 Ready가 표시됩니다.
다음 예를 참조하십시오.
Name: my-rebalance
Namespace: instana-kafka
Labels: strimzi.io/cluster=instana
Annotations: API Version: kafka.strimzi.io/v1
Kind: KafkaRebalance
Metadata:
# ...
Status:
Conditions:
Last Transition Time: 2023-04-04T11:16:06.230479824Z
Status: Rebalancing
Type: State
# ...
클러스터 재조정 중지
재조정은 시간이 오래 걸릴 수 있으며 클러스터의 성능에 영향을 줄 수 있습니다. 따라서 문제가 발생하는 경우 재조정을 중지할 수 있습니다. 진행 중인 재조정을 중지하려면 다음 명령을 사용하여 언제든지 stop 어노테이션을 KafkaRebalance 자원에 적용할 수 있습니다.
kubectl annotate kafkarebalance my-rebalance strimzi.io/rebalance=stop -n instana-kafka