Terraform을 사용하는 뉴렐릭 에이전트 컨트롤은 대규모로 에이전트 플릿을 관리하기 위한 강력하고 선언적인 솔루션을 제공합니다. Terraform과 에이전트 컨트롤을 함께 사용하면, 특히 여러 Kubernetes 클러스터를 다룰 때 전체 인프라에 뉴렐릭 계측을 배포하기 위한 일관되고 반복 가능하며 확장 가능한 접근 방식을 보장할 수 있습니다.
전제 조건
시작하기 전에 다음 사항이 있는지 확인하세요.
필요한 도구:
- 컴퓨터에 Terraform이 설치되었습니다.
- 귀하의 컴퓨터에 Helm 3이 설치되었습니다. 설치 지침은 Helm 설치를 참조하세요.
- 설치가 작동하도록 Terraform 설정 펼쳐에 포함된 Terraform Helm Provider .
뉴렐릭 자격 증명:
- 뉴렐릭 클러스터 키: 뉴렐릭 클러스터를 귀하의 계정에 보고하려면 뉴렐릭 클러스터 키가 필요합니다.
- 뉴렐릭 사용자 키:
clientID키와 비밀번호를 아직 가져오지 않은 경우 뉴렐릭 사용자 키가 필요합니다.
설정 세부사항:
- 뉴렐릭 조직 ID: 뉴렐릭
OrgId은 클라이언트 ID 키와 비밀번호를 어느 조직에서 가져오고 있는지 식별합니다. - 사용자 권한: 시스템 ID를 생성하려면 사용자에게 올바른 권한이 필요합니다. 일반적으로 이를 위해서는 인증 도메인 관리자 또는 뉴렐릭 컨트롤 역할이 필요합니다.
- 쿠버네티스 클러스터 이름: 설치 과정에서 참조될 쿠버네티스 클러스터의 이름을 준비하세요.
- 뉴렐릭 조직 ID: 뉴렐릭
팁
Terraform으로 새 클러스터를 설정할 때, 에이전트 컨트롤 설치 중에 동일한 클러스터 이름을 사용하시기 바랍니다.
Kubernetes 호환성
이 솔루션과 호환되는 Kubernetes 버전을 알아보려면 개요의 호환성 섹션을 참조하세요.
설치
clientId 및 clientSecret 이 없으면 다음 NerdGraph API 호출을 사용하여 생성하세요. 이를 위해서는 블루베리 관리 사용자 키와 조직 ID가 필요합니다.
$curl -X POST \> https://api.newrelic.com/graphql \> -H 'Content-Type: application/json' \> -H 'x-api-key: [INSERT_USER_API_KEY]' \> --data-raw '{"query": "mutation SICreate { systemIdentityCreate(name: \"User Key for Agent Control\" organizationId: \"[INSERT_YOUR_ORG_ID]\") { clientId clientSecret } }"}' \> --compressed명령에서 플레이스홀더 값을 organizationId 및 사용자 키로 바꾸세요. 이는 설정 파일에서 사용할 필수 자격 증명을 반환합니다.
1단계: 프로젝트 디렉토리 만들기
프로젝트에 대한 디렉토리를 만들고 그 안에 main.tf 파일을 넣습니다. 여기에서 Terraform 리소스를 정의합니다. Terraform 파일에 Helm 공급자를 추가했는지 확인하세요.
2단계: Helm 릴리스로 Terraform 구성
에이전트 제어용 뉴렐릭 차트를 사용하는 Helm 릴리스로 Terraform 펼쳐보기를 구성하세요. 다음 예는 기본적인 설정을 보여줍니다.
provider "helm" { kubernetes { config_paths = [ "~/.kube/config" ] }}
resource "helm_release" "newrelic" { name = "agent-control" repository = "https://newrelic.github.io/helm-charts/" chart = "agent-control" namespace = "newrelic" create_namespace = "true"
values = [ file("./values-newrelic.yaml") ]}Terraform 스크립트가 values-newrelic.yaml 파일을 참조한다는 점에 유의하세요. 에이전트 Control 설정에 사용되는 뉴렐릭 에이전트 Control 설정 파일입니다. Terraform 스크립트와 같은 디렉토리에 있을 필요는 없습니다. helm_release 리소스의 values 속성 내에 있는 file() 함수에서 올바른 경로를 제공하면 어느 위치에서나 참조할 수 있습니다.
또는 values-newrelic.yaml 파일을 Terraform 프로젝트 디렉토리에 직접 배치하면 main.tf 스크립트가 자동으로 해당 파일을 참조합니다.
추가 설정이 포함되지 않은 기본 values-newrelic.yaml 파일의 예는 다음과 같습니다.
global: cluster: [YOUR_CLUSTER_NAME] licenseKey: [YOUR_INGEST_LICENSE_KEY]
agentControlDeployment: chartValues: systemIdentity: organizationId: [ORG_ID] parentIdentity: clientId: [YOUR_IDENTITY_CLIENT_ID] clientSecret: [YOUR_IDENTITY_CLIENT_SECRET] config: fleet_control: # optional fleet_id: [YOUR_FLEET_ENTITY_GUID] log: level: trace사용 가능한 모든 구성 설정을 살펴보려면 values-newrelic.yaml 을 참조하세요.
3단계: Terraform 명령 실행
Terraform을 초기화하고 계획을 검토한 다음 변경 사항을 적용합니다.
$# Initialize Terraform$terraform init$# Review the changes before applying$terraform plan$# Apply the changes to your cluster$terraform apply5단계: 설치 확인
에이전트 제어 파드와 구성된 에이전트가 각각의 마커스페이스에서 올바르게 실행되고 있는지 확인하세요.
$# Check Agent Control pods$kubectl get pods -n newrelic$# Check pods in the agent namespace, e.g., 'newrelic-agents'$kubectl get pods -n newrelic-agents구성
values-newrelic.yaml 파일에서 에이전트 제어를 구현하다, 배포하다 다중 모니터링 에이전트로 구성할 수 있습니다. 다음은 다음을 포함하여 여러 에이전트의 구현, 배포를 보여주는 예입니다.
- 교체: 뉴렐릭의 에이전트 에이전트
- 로그: Fluent Bit 로그 에이전트
- OpenTelemetry: OpenTelemetry Collector의 뉴렐릭 배포판
- 게이트웨이: 뉴렐릭 파이프라인 에이전트 게이트웨이
agentControlDeployment: chartValues: systemIdentity: organizationId: "****" parentIdentity: clientId: [YOUR_IDENTITY_CLIENT_ID] clientSecret: [YOUR_IDENTITY_CLIENT_SECRET] config: agents: infrastructure: agent_type: newrelic/com.newrelic.infrastructure:0.1.0 logs: agent_type: newrelic/io.fluentbit:0.1.0 agent-operator: agent_type: com.newrelic.k8s_agent_operator:0.1.0 open-telemetry: agent_type: newrelic/com.newrelic.opentelemetry.collector:0.1.0 gateway: agent_type: newrelic/com.newrelic.pipeline_control_gateway:0.1.0 agentsConfig: infrastructure: chart_version: "*" chart_values: newrelic-infrastructure: enableProcessMetrics: true logs: # Ref: `https://github.com/newrelic/helm-charts/tree/master/charts/newrelic-logging` # Recommended: check and define an explicit chart version (latest stable) chart_version: "*" chart_values: newrelic-logging: sendMetrics: true agent-operator: chart_version: "*" open-telemetry: # Ref: `https://github.com/newrelic/helm-charts/blob/master/charts/nr-k8s-otel-collector/values.yaml` # Recommended: check and define an explicit chart version (latest stable) chart_version: "*" chart_values: nr-k8s-otel-collector: receivers.filelog.enabled: false gateway: chart_version: "*" chart_values: gateway: autoscaling: minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 70중요
중요: 운영 환경의 경우 와일드카드(*) 대신 특정 고정 chart_version 사용하는 것이 좋습니다. 이를 통해 일관되고 예측 가능한 업데이트가 보장되어 예상치 못한 동작이나 파괴적인 변경이 방지됩니다.
제거
중요
Terraform 설정에서 Helm 릴리스 리소스를 제거하는 것은 파괴적인 작업 입니다. 이 변경 후 terraform apply 실행하면 Terraform이 차트를 제거하고 관련된 모든 리소스를 파괴하여 잠재적으로 데이터 손실이 발생할 수 있습니다. 계속하기 전에 환경에 미칠 수 있는 잠재적 영향을 완전히 이해했는지 확인하세요.
- 영향을 받을 수 있는 모든 의존성/종속성과 서비스를 검토하세요.
- 릴리스에 연결된 모든 영구 데이터 또는 설정을 백업하는 것을 고려하세요.
- 이 릴리스를 제거하는 것이 필요하고 인프라 관리 전략에 맞는지 확인하세요. 인프라를 크게 변경할 때는 항상 주의를 기울이고, 문제가 발생하는 경우를 대비해 적절한 롤백 절차가 마련되어 있는지 확인하세요.
Agent Control을 제거하려면:
main.tf파일에서newrelic_agent_control에 대한helm_release리소스 블록을 제거합니다 .terraform plan실행하여 변경 사항을 검토하세요. 삭제하려는 리소스만 삭제되도록 계획 출력을 주의 깊게 검토하세요.terraform apply실행 하고 실행을 확인하여 릴리스를 제거합니다. 이렇게 하면 계획된 변경 사항이 구현되어 지정된 Helm 릴리스가 환경에서 효과적으로 제거됩니다.
제거 과정을 완료하려면 실행을 확인하세요.