본문 바로가기

Develop/DevOps

[k8s] Daemonsets에서 띄운 pod의 hostname을 nodename으로 변경하기 (feat. promtail)

반응형

 

Daemonsets으로 로그 서비스(promtail)를 띄울때 어디에서 로그가 왔는지 추적하기 위해 hostname label을 사용했는데 해당 정보값이 pod의 이름으로 되어있어서 어디서 날라왔는지 확인하기가 어려웠다.

 

따라서, 위와같은 상황을 해결하고자 특정 노드에서 날라왔음을 표기해야하는데 아래와같은 방식으로 해결했다.

 

promtail의 Daemonsets yaml파일에는 아래와같이 env를 설정진행

- env.valueFrom.fieldRef.fieldPath를 사용하여 k8s 환경변수를 가져오게끔 설정

...(생략)
spec:
  selector:
    matchLabels:
      app: promtail
  template:
    metadata:
      labels:
        app: promtail
    spec:
      containers:
        - name: promtail
          ...(생략)
          env:
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName

 

추가로 promtail의 configmaps을 아래와같이 설정

...(생략)
  scrape_configs:
    - job_name: container
      static_configs:
      - targets:
          - localhost
        labels:
          job: containers
          __path__: /var/log/containers/*.log
          host: ${HOSTNAME}

 

그렇다면 정상적으로 HOSTNAME이 수집되는걸 확인할수가 있다.

반응형