Kubernetes 140

[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

[Jenkins] HelmRelease로 설치 시, curl: (60) SSL certificate problem: certificate has expired 에러

간단한 배경 지식(?) HelmRelease Helm에서 release란 chart를 이용해 애플리케이션을 설치된 결과를 말한다. 그리고 release를 보다 더 편리하게 관리하기 위해 쿠버네티스 리소스처럼 취급하기 위한 시도가 있었고, 그 결과로 HelmRelease라는 리소스로 release를 관리할 수 있게 되었다. 참고 : https://coffeewhale.com/kubernetes/gitops/helm/2020/05/13/helm-operator/ Init Container (초기화 컨테이너) Pod의 Runtime Container가 실행되기 전에 실행되는 컨테이너 이미지에 포함되지 않는 유틸리티, 설정 스크립트 등을 포함할 수 있다. Pod는 하나 이상의 Init Container를 가질 ..

Kubernetes/삽질 2022.03.07

[calico-node 0/1 running] calico/node is not ready: BIRD is not ready: BGP not established with 10.0.0.1

현상 쿠버네티스 클러스터 환경에서 동작하고 있는 서비스가 정상적으로 동작하고 있지 않아 확인하던 중, 포드 컨테이너에서 외부로 나가야 하는 트래픽이 막혀 있는 것이 원인이라는 것을 알게 되었다. 쿠버네티스 클러스터 환경은 온 프레미스에서 kubeadm을 이용해 구성되었으며, 네트워크 플러그인으로는 calico를 사용하고 있다. calico가 어떤 방식으로 쿠버네티스 환경에서 네트워크를 설정하는지, 관련해서는 어떤 조건이 필요한지는 잘 모르겠으나…… 일단은 kube-system namespace에서 각 노드에 배포된 calico-node pod가 정상적으로 동작해야 하는 것으로 보인다. 확인해보니, 최근 서버 재부팅 후 일부 calico-node pod가 정상적으로 동작하지 않고 있었다. 그리고 정상적이지..

Kubernetes/삽질 2022.03.06

[calico] calicoctl 설치 - k8s pod

calico 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션. Linux 및 Windows에 대해 인터넷과 동일한 IP 네트워킹 원칙을 기반으로 Kubernetes 포드를 연결하기 위한 네트워킹 및 네트워크 정책 솔루션을 제공한다. 캡슐화 또는 오버레이 없이 구축되어 고성능의 대규모 데이터 센터 네트워킹을 제공할 수 있으며, 분산 방화벽을 통해 Kubernetes 포드에 대해 세분화된 의도 기반 네트워크 보안 정책을 제공한다. CNI Container Network Interface의 약어로 CNCF 프로젝트 중 하나이다. 컨테이너 간의 네트워크를 제어할 수 있는 플러그인을 만들기 위한 표준에 해당한다. 표준으로써의 역할을 할 뿐, 특정 서비스에 어..

Kubernetes 2022.03.05

0/1 nodes are available: 1 Insufficient nvidia.com/gpu

현상 아래 매니페스 파일과 같이 nvidia.com/gpu 리소스를 필요로 하는 pod 생성 시 에러 메세지와 함께 포드가 스케쥴링되지 않았다. apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: nginx image: nginx resources: limits: nvidia.com/gpu: 1 # requesting 1 GPU 에러 메세지 확인 $ kubectl describe pod [.. 생략 ..] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 3s (x23 over 3m) default-schedu..

Kubernetes/삽질 2022.02.25

node NotReady - kubelet (code=exited, status=255)

쿠버네티스 클러스터 내 노드 일부가 notReady 상태를 유지하고 있다. 이런 경우는 대부분 노드에서 kubelet이 정상적으로 동작하고 있지 않는 상태일 경우에 해당한다. describe 명령으로 확인해보면 이런 모양에 가까울 것이다. kubelet 동작 확인 systemctl 명령으로 kubelet의 상태를 확인해본다. systemctl status kubelet.service exit-code와 함께 정상적으로 동작하지 않고 있는 상태임을 확인할 수 있다. 만약 아래와 같이 inactive 상태인 경우, kubelet을 재시작한 후의 상태를 확인해보도록 한다. kubelet 시작/재시작 # 시작 systemctl start kubelet.service # 재시작 systemctl restart k..

Kubernetes/삽질 2022.02.22

[NVIDIA/gpu-monitoring-tools] dcgm-exporter CrashLoopBackOff - 2

2021.12.14 - [NVIDIA/gpu-monitoring-tools] dcgm-exporter CrashLoopBackOff 위 글에 이어 dcgm-exporter에서 발생한 CrashLoopBackOff 상태를 해결 방법을 적어둔다. 현상 에러 메시지 확인할 수 있는 pod container 로그가 없어, describe 명령으로 상태를 확인했다. kubectl describe pods dcgm-exporter- # ... 생략 ... Containers: dcgm-exporter: Container ID: docker:// Image: nvcr.io/nvidia/k8s/dcgm-exporter:2.2.9-2.4.0-ubuntu18.04 Image ID: docker-pullable://nvcr..

Kubernetes/삽질 2022.02.21

Helm Concepts

이미지 버전, 디스크 용량, 애플리케이션 관리자 비밀번호 등 쿠버네티스 환경에서 애플리케이션은 환경에 따라 다른 값을 가질 수 있다. Helm은 아래와 같은 방식을 통해 하나의 패키지로 여러 환경을 구성할 수 있도록 한다. - 값을 변수로 취급할 수 있도록 파일을 템플릿으로 변환한다. - 변수는 중괄호로 감싸서 나타내며, 값을 식별할 변수명을 적는다. 값은 values.yaml에 저장된다. 즉, 템플릿과 values.yaml이 결합한 것이 쿠버네티스가 클러스터에 애플리케이션을 배포하는 데 사용하는 정의 파일에 해당한다. helm chart template + values.yaml + Chart.yaml Chart.yaml에는 차트의 이름, 버전, 설명과 같은 차트와 관련된 정보들이 저장되어 있다. 사용자..