Container/Kubernetes 6

NGINX ingress controller 생성 실패 시 전부 삭제하기

Kubernetes 가지고 놀다 보면 nginx를 서비스나 ingress로 자주 사용하게 되는데, 이 ingress-nginx 관련 pod나 서비스를 모두 삭제해야 하는 경우가 발생할 때가 있다.이런 상황에서 그냥 편하게 긁어다 실행시키기 위해 (까먹기 전에 관련 커멘드를 기록해 놓기) 간단히 작성해본다.kubectl delete namespace ingress-nginxkubectl delete serviceaccount ingress-nginxkubectl delete configmap ingress-nginx-controllerkubectl delete clusterrole ingress-nginxkubectl delete clusterrolebinding ingress-nginxkubectl de..

쿠버네티스의 CoreDNS

DNS란?DNS는 Domain Name System의 약자이다. DNS는 사람이 쉽게 해석할 수 있는 도메인명(ex, www.bluewhale.com)을 IP 주소(179.10.2.10)로 변환하는 기능을 의미한다. DNS는 /etc/hosts 파일에 저장된 도메인-IP 맵핑 정보를 읽거나, 이를 갖고 있는 네임 서버와의 통신을 통해 이루어진다.DNS in LinuxLinux 환경에서 DNS를 사용하는 방법은 크게 2가지가 있다./etc/hosts/etc/hosts 파일은 컴퓨터가 도메인명으로 IP를 찾을 때 가장 먼저 열어보는 파일이다. 윈도우에서는 C:\Windows\System32\drivers\etc\hosts 경로에 파일이 위치한다.파일을 열어보면 아래와 같이 localhost가 이미 추가되어 ..

Spegel: 클러스터 로컬 OCI 레지스트리 미러

쿠버네티스 클러스터에 20개의 파드 복제본이 있는 StatefulSet이 있다고 가정해 보자.파드의 컨테이너에 사용되는 이미지가 상당히 큰 경우, 워커 노드에서 이미지를 가져오는 데 시간이 걸린다.따라서 StatefulSet의 모든 파드가 하나씩 실행되는 데 많은 시간이 걸립니다. 다른 시나리오에서는 워커 노드 중 하나가 비정상 상태가 되어 그 노드에서 실행 중인 파드가 퇴거되었다고 가정해 보자.따라서 다른 노드에서 파드가 다시 스케줄되지만, 인터넷을 통해 컨테이너 레지스트리에서 이미지를 다시 가져와야 하므로 중단 시간이 길어지게 된다. 이 때 Spegel이 도움이 된다.Spegel은 상태 비저장 클러스터 로컬 OCI 레지스트리 미러이다.Spegel은 쿠버네티스 클러스터의 각 노드가 로컬 레지스트리 미러..

쿠버네티스에서는 스왑이 기본적으로 비활성화 된다?

알다시피, 운영체제는 더 많은 프로세스들이 메모리를 더 안정적으로 사용할 수 있도록 하기 위해 덜 사용되는 데이터를 메모리에서 디스크로 옮기는 스왑(swap)을 지원한다. 이를 통해 서버는 더 안정적으로 메모리를 관리할 수 있게 되는 것이다. 그런데, 쿠버네티스의 경우 기본 정책 상 swap을 비활성화시키도록 정책이 설정되어 있다. 물론 23년 8월 경에 알파 릴리스의 형태로 swap이 활성화된 형태로 파드를 생성할 수 있게 하는 설정이 추가되긴 했으나 아직은 프로덕션 환경에서 사용하기에는 시기상조로 보인다. 쿠버네티스에서 스왑 비활성화를 더 선호하는 이유는 "보안"이 가장 큰 이유로 볼 수 있다. 별도의 네임스페이스를 만들어서 마운트시킨 쿠버네티스 환경에서 굳이 격리된 데이터를 디스크로 스왑하는 작업은..

pod가 초기화 상태에서 멈춰서 시작을 못하는 경우

쿠버네티스의 파드는 여러 개의 컨테이너를 가질 수 있다. 이 중, "init containers"라고 불리는 컨테이너들이 있는데, 이 컨테이너들은 파드의 초기화를 담당한다. 파드가 생성되고 시스템적 격리가 이루어지는 초기단계에 수행되어야 할 작업들을 명시하기 위해 사용된다. Init container들이 모두 정상적으로 끝나야 초기화가 완료되고 main container 들이 실행되게 된다. 만약 init container가 실패 상태로 종료되고 restart 정책이 Never로 설정되어있다면 파드 자체의 초기화 실패로 단정하고 파드의 상태를 Failed로 바꾸게 된다. 또한, init container가 어떠한 이유로 인해 종료되지 않거나 restart 정책이 꼬여서 무한 재시작을 하고 있는 상태라면 ..

맥북에서 minikube 쿠버네티스 서비스 접근이 안될 때

쿠버네티스 공부를 로컬호스트 상에 Kubernetes 클러스터 구축을 위해 가장 많이 사용되는 방식은 아마 도커와 minikube를 사용하는 방법일 것이다. 이 minikube를 사용한 클러스터의 경우 가장 큰 단점으로는 NodePort나 LoadBalancer와 같은 서비스에 대해서 external IP가 제대로 할당되지 않아서 서비스를 만들어도 외부 클러스터에서 접근이 잘 안되는 문제일 것이다. 이 문제를 처음 접하는 사람들은 "혹시 서비스가 제대로 만들어지지 않았나?"나 "kube-proxy"에 뭔가 문제가 있나?" 등의 삽질을 많이 하게 될 것이다. 실제로 필자 역시 처음 minikube를 사용해서 쿠버네티스 공부를 할 때에는 문제를 제대로 파악하지 못해서 몇시간동안 삽질을 했던 적이 있다. 서비..