Kubernetes #2

임상규·2023년 12월 3일
1

Kubernetes

목록 보기
2/19

data plane

kubelet

  • 각 kubernetes 노드에서 동작하는 node agent
  • 컨테이너 런타임과 연계하여 컨테이너의 기동 및 정지 등을 관리
  • pod 스펙 설정을 kube-apiserver로부터 전달받아 pod 컨테이너의 실행을 직접적으로 관리
  • pod가 아닌 프로세스의 형태로 뜸

kubelet 구성 확인

# kubelet 확인
$ minikube status

# kube-system 네임스페이스의 configmap 확인
$ kubectl get configmap -n kube-system

# kubelet configmap 확인
$ k describe configmap kubelet-config -n kube-system

# minikube의 VM으로 로그인
$ minikube ssh

# kubelet 확인
$ ps -ef | grep kubelet
$ systemctl status kubelet

# kubelet 로그 확인
$ journalctl -u kubelet

kube-proxy

  • 클러스터 내 각 노드에서 실행되는 네트워크 프록시
  • 가상 네트워크의 동작을 관리
  • IP translate과 라우팅

kube-proxy 네트워크 모드

kube proxy가 네트워크를 관리할 때 쓰는 방법

  • userspace > iptables > ipvs로 진화
  • ipvs가 더 다양한 로드밸런싱 알고리즘을 갖고 있고 더 높은 성능을 냄
  • EKS의 경우 기본적으로 iptables로 지원하고 있으며 네트워크 모드를 ipvs로 변경 후 문제가 발생하였을 경우 AWS로부터 기술적 지원을 받지 못할 수 있으므로 본인의 워크로드에 맞는 네트워크 모드를 선택하여야 함

kube-proxy 구성 확인

# kubelet configmap 확인
$ k describe configmap kube-proxy -n kube-system

# minikube VM 로그인
$ minikube ssh

# 네트워크 모드 확인
$ curl localhost:10249/proxyMode

container-runtime

  • 실제로 컨테이너를 실행시키는 런타임 환경
  • 가장 많이 사용하는 런타임으로 Docker를 주로 사용했으나 2020.12 이후 지원 중단
    • containerd
    • CRI-O
    • Docker Engine
    • Mirantis Container Runtime

container-runtime 수준

고수준과 저수준 런타임

  • 고수준 (high-level): containerd, CRI-O, docker ..
  • 저수준 (low-level): runc, runv

container-runtime 구성 확인

# container-runtime 구성 확인
$ k describe nod minikube | grep -i container

CoreDNS

  • kubernetes 클러스터 내부의 주소 해석이나 서비스 디스커버리에 사용되는 내부 DNS 서버 (Add-on)
  • kube 1.12 버전 전에는 kube-dns라는 이름이었으나, 이후에는 CoreDNS라는 이름을 사용

coredns 구성 확인

# coredns 구성 확인
$ K describe configmap coredns -n kube-system

도메인 호출 테스트

# 네임스페이스 생성
$ k create ns app

# 테스트 pod (nginx) 생성
$ k run nginx --image nginx -n app
$ k get pod -n app
$ k get pod -n app -o wide

# 테스트 pod (curl) 생성
$ kubectl run curl -it --rm --image curlimages/curl -- sh

# nginx pod 호출 (ip 사용, curl pod안에서)
$ curl x.x.x.x

# nginx pod 호출 (domain record 사용, curl pod 안에서)
$ curl x-x-x-x.app.pod.cluster.local

# resolv.conf 확인 (curl pod 안에서)
$ cat /etc/resolv.conf
profile
Junior DevOps Engineer

0개의 댓글