[K8s] 파드(Pod) 사용-1

Aiden·2021년 6월 27일
0

K8S Study

목록 보기
5/9
post-thumbnail

1. 아키텍쳐

1-1. 컴포넌트

쿠버네티스 클러스터는 Control plane(마스터)Node(워커)로 구성

이미지 출처: https://kubernetes.io/docs/concepts/overview/components/

마스터 노드의 핵심 컴포넌트

  • kube-apiserver : 마스터로 전달되는 모든 요청을 받아 드리는 API 서버
  • etcd : 클러스터내 모든 메타 정보를 저장하는 서비스
  • kube-scheduler : 사용자의 요청에 따라 적절하게 컨테이너를 워커 노드에 배치하는 스케줄러
  • kube-controller-manager : 현재 상태와 바라는 상태를 지속적으로 확인하며 특정 이벤트에 따라 특정 동작을 수행하는 컨트롤러
  • cloud-controller-manager : 클라우드 플랫폼(AWS, GCP, Azure 등)에 특화된 리소스를 제어하는 클라우드 컨트롤러

워커 노드의 핵심 컴포넌트

  • kubelet : 마스터의 명령에 따라 컨테이너의 라이프 사이클을 관리하는 노드 관리자
  • kube-proxy : 컨테이너의 네트워킹을 책임지는 프록시, 네트워크 규칙을 유지 관리
  • Container Runtime : 실제 컨테이너를 실행하는 컨테이너 실행 환경 (Docker, containerD, CRI-O)

Adds on

  • CNI : Container Network Interface 는 k8s 네트워크 환경을 구성. 다양한 플러그인이 존재
  • DNS : 쿠버네티스 서비스를 위해 DNS 레코드를 제공. CoreDNS 는Service Discovery 기능을 제공
  • 그 외 대시보드, 모니터링, 로깅 등을 위한 플러그인이 있음

1-2. 동작 확인

클러스터 정상배포 확인

  • k8s API 서버 동작 여부 확인
kubectl cluster-info

  • 노드 정보 확인
kubectl get nodes

  • 네임스페이스 확인
kubectl get namespaces

  • 파드 정보 확인 (kube-system 네임스페이스)
kubectl get pod -n kube-system

  • 칼리코(CNI 플러그인) 노드 상태 확인
kubectl-calico node status

  • 파드 IP Pool 정보 확인
kubectl-calico get ippool -o wide

마스터 노드 구성요소 확인

  • 모든 네임스페이스의 파드 출력
kubectl get pod --all-namespaces

  • 마스터 노드에서 실행중인 컨데이너 확인(Container Runtime: Docker)
docker ps

  • 동작 중인 컨테이너 정보 확인(컨테이너 런타임(containerd)를 통해)
ps axf | grep /usr/bin/containerd

  • APIServer 파드 상세 정보 확인
kubectl describe pod -n kube-system kube-apiserver

  • etcd 파드 상세 정보 확인
kubectl describe pod -n kube-system etcd

워커 노드 구성요소 확인

워커노드에서 입력하여 확인

  • kubelet 상태 확인
systemctl status kubelet

  • kube-proxy 확인
pstree
ps afxuwww |grep proxy | grep -v color=auto
iptables -t filter -S
iptables -t nat -S
iptables -t mangle -S
iptables -t raw -S

2. 파드(Pod)

2-1. 파드 란?

파드(Pod)는 컨테이너 애플리케이션의 기본 단위이며, 파드는 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다.

  • Pod 는 1개 이상의 컨테이너를 가질 수 있다
  • Pod 내에 실행되는 컨테이너들은 반드시 동일한 노드에 할당되며, 동일한 생명 주기를 갖는다
  • 고유의 Pod IP - Pod 는 노드 IP 와 별개로 클러스터 내에서 접근 가능한 고유의 IP를 할당 받는다
  • CNI를 통해 다른 노드에 위치한 Pod 도 NAT 없이 Pod IP로 접근 가능하다
  • IP공유 - Pod 내에 있는 컨테이너들은 서로 IP를 공유하여, 컨테이너끼리는 localhost 통해 서로 접근, 포트를 이용해 구분한다.
  • volume 공유 - Pod 안의 컨테이너들은 동일한 볼륨과 연결이 가능하여 파일 시스템을 기반으로 서로 파일을 주고받을 수 있음

YAML 템플릿

  • K8s 모든 리소스는 YAML 형태의 선언형 명령 정의서(declarative description) 로 표현할 수 있다
  • —dry-run 과 -o yaml 욥션을 사용하여, Pod 를 실제로 생성하지 않고 템플릿 파일을 만들수 있다
kubectl run myweb --image nginx --dry-run=client -o yaml > myweb.yaml
cat myweb.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: myweb
  name: myweb
spec:
  containers:
  - image: nginx
    name: myweb
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • apiVersion : YAML 파일에서 정의한 해당 오브젝트의 API 버전 정의
  • kind : 리소스의 종류
  • metadata : 라벨, 이름, 주석(Annotation) 등과 같은 리소스의 부가 정보
  • spec : 리소스 생성하기 위한 세부 정보
profile
기억이 안되면 기록이라도🐳

0개의 댓글