Kubernetes 131

[k8s] 인증서 기반 User 생성

User vs Service Account 쿠버네티스에서 일반 사용자(Human User)와 Service Account라는 두 종류의 사용자가 존재한다. 일반 사용자 : 쿠버네티스 클러스터 외부에서 쿠버네티스 클러스터를 조작하는 사용자. 클러스터 관리자 입장에서의 사용자에 해당한다. Service Account : 쿠버네티스 내부에서 관리되는, Pod가 쿠버네티스 API를 조작할 때 사용한다. 개발자 입장에서의 사용자에 해당한다. 그리고 사용자는 RBAC에 의해서 클러스터를 조작할 권한을 부여받는데, 이 글에서는 일반 사용자를 생성하는 방법을 정리해둔다. API 인증 방법 쿠버네티스는 사용자 인증을 위해 아래와 같은 방법을 지원한다. Service Account Token 정적 Token Passwor..

Kubernetes 2022.09.07

[kubeadm] 노드 join

개요 2022.09.05 - [kubeadm/cri-dockerd] Kubernetes 설치 / 클러스터 생성 에서 생성한 단일 노드 클러스터에 노드를 추가하고자 한다. kubeadm join node join 시에는 apiserver 주소, token 그리고 인증서 정보가 필요하다. join 명령은 join할 노드에서 실행하면 된다. master와 마찬가지로 container runtime, kubectl, kubeadm, kubelet은 설치되어 있어야 한다. kubeadm join : --token --discovery-token-ca-cert-hash sha256: # 예시 kubeadm join 172.31.29.238:6443 --token kglces.6gw78mgmpybtvtpz \ --d..

Kubernetes 2022.09.06

[kubeadm/cri-dockerd] Kubernetes 설치 / 클러스터 생성

개요 이 글에서는 kubeadm으로 클러스터를 생성하고, 컨테이너 엔진/런타임은 docker/cri-dockerd를 사용할 것이다. 설치 환경은 아래와 같다. AWS EC2 Ubuntu 20.04 LTS arm64 RAM >= 2GiB , CPU >= 2 core 참고로 master(controlplane)까지만 세팅할 것이다. master/worker 설정 및 패키지 설치 아래 과정은 master(controlplane), node 모두 설정해두어야 한다. 1. iptables가 bridge 된 트래픽을 보도록 설정 # br_netfilter 모듈 로드 cat

Kubernetes 2022.09.05

[k8s] Events

Events 쿠버네티스 리소스 타입 중 하나로 다른 리소스의 상태 변화, 에러 등 시스템에 특정 메시지를 전파해야 할 때 자동으로 만들어진다. 쿠버네티스 클러스터를 개발하고 운영하면서 디버깅할 때 유용하다. Events 조회 Events 리소스에 대해 알지 못해도 한 번쯤은 이미 봤을 텐데, describe 명령어로 확인할 수 있기 때문이다. Events 항목에 나열된 목록이 바로 Events 리소스에 해당한다. 다른 리소스와 마찬가지로 get 명령으로도 조회할 수 있다. kubectl get events --field-selector 옵션을 사용하면 원하는 정보만을 찾아볼 수 있다. # Warning 유형만 확인 kubectl get events --field-selector type=Warning #..

Kubernetes 2022.09.01

[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
1 2 3 4 5 6 7 ··· 14