Ops/Kubernetes 25

kubectl로 여러 Kubernetes 클러스터 제어하기

여러 대의 Kubernetes 클러스터를 운영할 때는 각 클러스터의 컨트롤 플레인에 개별적으로 접속해 kubectl을 실행하기보다, 단일 관리 지점에서 kubectl로 통합 제어하는 방식이 관리 효율성과 보안 측면에서 더 유리하다. kubectl 패키지는 ~/.kube/config 파일에 담긴 인증정보로 Cluster에 접근하는데, 이를 Context 단위로 관리한다. kubectl Context는 두 가지 정보로 이루어진다. 1) 클러스터2) 유저 config에 클러스터 등록하기 kubectl과 K8S 클러스터는 TLS 통신을 한다. kubectl 서버는 클러스터에서 보낸 데이터가 정말 클러스터에서 보낸건지 검증을 해야한다. 그래서 클러스터에서 공식으로 발급한 CA PublicKey를 가지고 있..

Ops/Kubernetes 2025.08.25

Traefik에서 대량으로 포트 오픈 시 발생한 이슈

이슈사항 Kubernetes Ingress Controller로 Traefik을 사용하고 있다.Traefik 로드밸런서에 MetalLB로 외부 ip를 부여하고 EntryPoint을 등록해서 Port를 열려고 하는데 문제가 하나 발생했다. 단일한 포트 몇 개 여는데는 문제가 없으나 특정 범위의 포트를 일괄 개방하려니, Traefik에서 해당 기능을 지원하지 않았다. 그래서 파이썬 코드를 작성하여 특정 범위의 포트를 모두 단일 포트로 Traefik Helm의 values.yaml에 직접 넣어주었더니... values.yaml 이 거대해짐에 따라 여러가지 문제가 발생하였다. 결론부터 말하면이슈가 여러 개 발생하여, 결국 만 개에서 7천개 정도로 개방할 포트 수를 줄여서 임시방편으로 문제를 해결하였다. 내..

Ops/Kubernetes 2025.08.07

Kubernetes 네트워크 동작원리

쿠버네티스 네트워크의 핵심 개념은 2가지이다. 1) kube-proxy2) CNI ( Container Network Interface ) kube-proxy는 서비스에서 파드로 트래픽을 이동시키는 역할을 하고 CNI는 서로 다른 노드 간의 트래픽 이동을 담당한다. 만약 A 노드에 배포된 kube-proxy가 B 노드에 있는 파드로 트래픽을 이동시킨다고 하면 서로 다른 노드이므로 CNI를 타고 트래픽을 이동하는 것이다. 정리하면트래픽 이동을 위한 룰은 kube-proxy가 담당하고 실제 노드 간 트래픽 이동은 CNI가 담당하는 것이다. kube-proxy kube-proxy는 iptables라는 tool을 이용하여 netfilter가 바라보는 룰을 조작하는 프로그램이다. 리눅스 서버는 netfil..

Ops/Kubernetes 2025.06.18

[K8S] Containerd에 Registry 설정하기 ( with Harbor )

Containerd로 생성된 컨테이너가 특정 Registry에서 이미지를 가져오도록 설정해보자. https://github.com/containerd/containerd/blob/main/docs/cri/registry.md#using-self-signed-certificates containerd/docs/cri/registry.md at main · containerd/containerdAn open and reliable container runtime. Contribute to containerd/containerd development by creating an account on GitHub.github.com 공식문서에는 deprecated된 방법이 메인으로 작성되어 있어서 혼란이 있을..

Ops/Kubernetes 2025.06.04

kubectl alias 및 자동완성 설정하기

1. 설정할 리눅스 계정에 접속하기 ( root, mingu … )su - mingu 2. home 디렉토리의 .bashrc 파일 가장 밑에 아래 설정 추가하기 # kubectl 자동완성 기능 추가하기 source k로 aliasalias k=kubectl# k 명령어에 kubectl 같은 자동완성 기능 부여하기complete -F __start_kubectl k##### kubeadm에 자동완성 기능 부여하기 ( Optional )source 3. 설정 적용하기 source ~/.bashrc

Ops/Kubernetes 2025.05.20

Nebuly MPS Nvidia Device Plugin의 GPU 메모리 파티셔닝

이슈Nebuly 사에서 제공하는 오픈소스 Nvidia Device Plugin을 테스트 해본 결과, GPU가 1개일 때는 동적 파티셔닝을 제대로 이루어진다. GPU가 2개일 때는 GPU 0번의 파티셔닝은 제대로 이루어지지만 GPU 1번의 파티셔닝이 제대로 되지 않음을 OOM 테스트를 통해 알게 되었다. 예를들어, 4GB로 메모리를 파티셔닝하면 GPU 0번에서 가상화된 GPU는 4GB만 쓰고 OOM이 발생하지만 GPU 1번에서 가상화된 GPU는 4GB를 넘어서 물리 GPU 전체 메모리를 사용한 후 OOM이 발생한다. 내용https://github.com/nebuly-ai/k8s-device-plugin/tree/v0.13.0?tab=readme-ov-file GitHub - nebuly-ai/k8s-d..

Ops/Kubernetes 2025.05.07

Host DNS 설정 변경 시, CoreDNS 파드 재시작 필요

GPU Operator로 Nvidia Driver 파드를 띄우는 과정에서 DNS 관련 resolving 에러가 발생하였다. W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease Temporary failure resolving 'archive.ubuntu.com'W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-security/I..

Ops/Kubernetes 2025.05.07

노드 재부팅 후 K8S 클러스터가 동작하지 않은 현상 ( swap off )

현상K8S 클러스터를 구축한 노드를 재부팅 하였더니, kubectl 명령이 동작하지 않은 현상이 발생 원인journalctl로 kubelet 로그를 확인한 결과, kubelet이 swap이 켜져 있어 동작하지 못한다는 로그를 뱉고 있었음. 해결클러스터 구축 당시, swap 기능을 off 했지만, /etc/fstab 에 swap 관련 줄을 주석처리 하지 않아, 재부팅 후 swap 기능이 다시 on되어 발생한 현상.

Ops/Kubernetes 2025.05.07

BIRD is not ready: BGP not established 이슈

이슈K8S 클러스터의 노드 하나가 BGP 커넥션 형성 실패 ( BIRD is not ready: BGP not established ) 설명CNI로 Calico를 사용중이다. Calico는 클러스터의 각 노드에 가상라우터를 생성하고 BGP 방식으로 각 노드의 파드 서브넷을 광고하고 서로의 라우팅 테이블을 학습한다. 그러므로 BGP 커넥션이 형성이 중요한데 형성되지 못하는 이슈가 발생하였다. Calico Node 파드 로그 Warning Unhealthy 16m (x2 over 17m) kubelet Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to..

Ops/Kubernetes 2025.05.07