Kubernetes 137

[dcgm-exporter] Grafana/Prometheus no data 현상

현상 관리하던 쿠버네티스 클러스터에서 Grafana/Prometheus 서비스를 위한 kube-prometheus-stack helm chart를 설치하고 GPU 서버 모니터링을 위해 dcgm-exporter를 함께 설치해서 사용하고 있었다. 다만 최근 몇 가지 이슈가 있어 기존의 kube-prometheus-stack을 완전히 삭제하고 재설치했더니 dcgm-exporter 대시보드에 어떤 메트릭도 보이지 않았다. 프로메테우스에서 관련 메트릭을 수집하는지 확인해봤지만, 마찬가지로 dcgm-exporter가 내보내는 메트릭은 수집되지 않는 상태였다. 환경 환경은 아래와 같다. kubeadm으로 구성한 온프레미스 쿠버네티스 클러스터 kubernetes version 1.17.2 ~ 1.19.0 helm v3..

Kubernetes/삽질 2022.07.13

[k8s] Error: unable to build kubernetes objects from release manifest: 에러

현상 2022.07.11 - [k8s] Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict 에러 글에서, 설치했던 helm chart로 설치한 release를 완전히 삭제하고 재설치하려고 했더니 아래와 같은 에러 메시지가 발생하면서 설치에 실패했다. helm install prometheus-operator prometheus-community/kube-prometheus-stack --dry-run Error: unable to build kubernetes objects from release manifest: [unable to..

Kubernetes/삽질 2022.07.12

[k8s] Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict 에러

현상 관리하던 쿠버네티스 클러스터에는 리소스 모니터링을 위한 그라파나/프로메테우스가 kube-prometheus-stack helm chart로 설치되어 있다. 다만 persistence 설정 변경, ingress 설정 변경, 관리 용이성을 위한 helm-operator 적용 등을 위해 설치한 release를 삭제 후 재설치하고자 했다. 그러나 release 삭제 후 재설치하려고 했더니, 조금 더 정확히 따져서 다음과 같은 과정 후 helm delete kubectl apply -f helmRelease.yaml kubectl delete hr 재설치 시 아래와 같은 에러가 발생하면서 설치에 실패했다. Error: rendered manifests contain a resource that already..

Kubernetes/삽질 2022.07.11

[k8s] drain

drain kubectl drain 영어로 배수구, 물 빠짐 등의 의미로, 노드에 존재하는 모든 Pod를 제거하고, Pod를 다른 노드에 스케쥴링하도록 한다. drain 한 node는 cordon을 실행한 것과 동일하게 SchedulingDisabled 상태가 되기 때문에 신규 Pod를 스케쥴링하지 않는다. drain은 커널 업그레이드, 하드웨어 유지 보수 등의 노드 관리를 위해 노드에서 포드를 안전하게 제거할 때 사용한다. 동작 순서 1. 새 포드가 노드에 스케쥴링되지 않도록 한다. (cordon) 2. 노드에서 실행 중이던 포드를 삭제한다. 이 때 Daemonset으로 실행된 포드가 존재하면 drain에 실패한다. 3. ReplicationController, ReplicaSet, Job, Daemo..

Kubernetes 2022.06.23

[Prometheus] 데이터 보관 기간 설정

Prometheus의 데이터 보관기간을 수정하려고 한다. 방법을 정리해둔다. Prometheus 저장소 구성 설정 Prometheus의 데이터 저장소를 구성하는 설정 중 중요한 것은 아래와 같다. --storage.tsdb.path : Prometheus의 데이터베이스 경로. 기본값은 /data이다. --storage.tsdb.retention.time : 데이터 보관기간. 기본값은 15일이다. --storage.tsdb.retention.size : 유지할 스토리지 블록의 최대 바이트 수. 오래된 데이터부터 제거하며 기본값은 0 또는 disable이다. --storage.tsdb.retention : storage.tsdb.retention.time에 의해 Deprecated 되었다. --storage..

Kubernetes 2022.06.05

[helm] Chart 생성/배포

kubernetes 클러스터 환경에서 나만의 Helm Chart를 이용해 서비스를 배포하고자 한다. Helm Chart를 직접 작성 후 패키징하여 배포해보자. Helm Chart 생성 배포할 Helm Chart를 생성한다. helm create # 예시 helm create passwd_test Chart는 현재 위치한 디렉터리에 Chart 이름과 같은 경로로 생성된다. 디렉터리 구조는 아래와 같다. chart_name/ Chart.yaml # 차트에 대한 정보를 가진 YAML 파일 LICENSE # 옵션: 차트의 라이센스 정보를 가진 텍스트 파일 README.md # 옵션: README 파일 values.yaml # 차트에 대한 기본 환경설정 값들 values.schema.json # 옵션: value..

Kubernetes 2022.06.02

[helm] 업그레이드, 롤백

Helm Chart/Release로 설치한 애플리케이션의 변경하려고 한다. 업그레이드 과정에 필요한 명령어를 정리해둔다. 업그레이드 업그레이드할 release의 이름, 사용할 chart, 필요하다면 values.yaml을 지정한다. helm upgrade [flags] # -f : yaml 파일 또는 url로 values 지정. 복수 설정 가능 # -n : helm release를 생성한 네임스페이스 # --dry-run : 업그레이드 시뮬레이션. 실제 반영하지 않음 # 예시 helm upgrade -f values.yaml -n notebook docs /path/chart 업그레이드 성공 시 이름과 네임스페이스, 버전, template/NOTES.txt의 내용이 출력된다. 업그레이드 시뮬레이션 실제로..

Kubernetes 2022.05.29

[k8s] Static Pod 종료/재시작

Static Pod kubelet에서 apiserver의 요청과는 관계없이 특정 디렉터리 내의 pod yaml 정의서를 이용해 직접 생성하는 pod apiserver와 무관하게 생성된다는 것 외에는 일반 pod와 동일하며, 특정 노드의 kubelet 데몬에 의해 관리된다. kubeadm으로 쿠버네티스 클러스터를 구축하는 경우에는, 마스터 노드의 /etc/kubernetes/manifest 경로를 바라본다. 대표적으로 apiserver, etcd, scheduler, controller가 해당된다. Static Pod는 이름에 node 이름이 포함된다. Static Pod 종료 방법 /etc/kubernetes/manifest 경로에 종료할 pod의 yaml 파일을 제거하면 된다. mv /etc/kuber..

Kubernetes 2022.04.17

[kubeadm] 쿠버네티스 인증서 수동 갱신

개요 kubernetes 인증서는 1년의 유효기간을 갖고 있으므로 매년 갱신이 필요하다. 이 글에서는 kubeadm으로 구성된 쿠버네티스 클러스터 인증서 갱신 방법을 정리해둔다. 인증서 갱신 방법 1. 인증서 유효기한 확인 kubeadm alpha certs check-expiration # 또는 kubeadm certs check-expiration 2022년 4월 10일에 대부분의 인증서가 만료되는 것을 확인할 수 있다. 2. 인증서 등 설정 백업 인증서 갱신이 원활하지 않을 경우를 대비하여 원하는 경로에 설정 파일 등을 백업해둔다. 실제 인증서 관련 디렉터리는 /etc/kubernetes/pki이다. # kubernetes 설정 백업 cp -rp /etc/kubernetes /etc/kubernet..

Kubernetes 2022.04.16

[cordon] 스케쥴링 불가 노드로 설정

쿠버네티스 클러스터 노드 중 하나가 물리적으로 고장나면서, 클러스터 내에서는 NotReady 상태로 표시되고 있는 것을 확인했다. Node 정보를 상세히 확인하니, node.kubernetes.io/unreachable:NoSchedule Taint가 설정되면서 스케쥴링 가능 노드에서 제외되는 것으로 보였다. 하지만 좀 더 명확하게 고장난 노드(node01)가 스케쥴링이 불가능한 노드로 설정해두고자 한다. cordon 노드를 unschedulable로 표시한다. kubectl cordon # 예시 kubectl cordon node01 Node 상세 정보 Unschedulable 필드가 true로 변경되고, Taint 설정도 추가된 것을 확인할 수 있다. Uncordon unschedulable 상태인 ..

Kubernetes 2022.04.15
1 2 3 4 5 6 7 8 ··· 14