Home 1. kubernetes concept
Post
Cancel

1. kubernetes concept

kubernetes concept

Kubernetes 기본

쿠버네티스는 대부분의 리소스를 오브젝트 형태로 관리한다.

1
kubectl api-resources

쿠버네티스를 잘 사용하는 방법은 YAML파일을 잘 작성하는 것이다!

쿠버네티스 노드 -> 마스터노드 / 워커노드 마스터 노드: 쿠버네티스가 제대로 동작할 수 있게 클러스터를 관리하는 역할 API 서버(kube-apiserver), 컨트롤러 매니저(kube-controller-manager), 스케줄러(kube-scheduler), DNS서버(coreDNS) 워커 노드: 어플리케이션 컨테이너가 생성 모든 노드에서는 오버레이 네트워크 구성을 위해 프락시(kube-proxy), 네트워크 플러그인(calico, flannel)

쿠버네티스 클러스터 구성을 위해서는 kubelet이라는 에이전트가 필요하다

Pod, 컨테이너를 다루는 기본 단위

컨테이너 어플리케이션을 구동하기 위해 반드시 알아야 할 오브젝트는 다음과 같다.

  • Pod(포드)
  • Replica Set(레플리카셋)
  • Service(서비스)
  • Deployment(디플로이먼트)

쿠버네티스에서는 컨테이서 어플리케이션의 기본 단위를 Pod라 부르며, 1개이상의 컨테이너로 구성된 컨테이너의 집합이다. 도커엔진은 컨테이너, 도커스웜은 서비스, 쿠버네티스는 포드.

쿠버네티스 YAML

  • apiVersion : YAML 파일에서 정의한 오프젝트의 API버전.
  • kind : 이 리소스의 종류. 예를들어 Pod
  • metadata : 라벨, 주석, 이름 등
  • spec : 리소스를 생성하기 위한 자세한 정보를 입력
1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
spec:
  containers:
  - name: my-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP

yaml파일로 생성

1
kubectl apply -f {name_of_yaml_file}

생성 확인

1
kubectl get pods
1
kubectl describe pods my-nginx-pod
1
2
3
kubectl exec -it my-nginx-pod bash

kubectl exec -it my-nginx-pod -c {컨테이너명} bash # 어떤 컨테이너에 대해 명령을 내릴 지 정할 수 있다.
1
kubectl logs my-nginx-pod
1
kubectl delete -f nginx-pod.yaml

그렇다면 왜 도커가 아닌 포드인가?

여러 리눅스 네임스페이스(namespace)를 공유하는 여러 컨테이너들을 추상화된 집합으로 사용하기 위해서이다. 포드 내의 컨테이너들은 네트워크 네임스페이스와 같은 리눅스 네임스페이스를 공유한다. 따라서 컨테이너가 실행중이 아니더라도 접속이 가능한 경우가 생길 수 있다.

포드에 정의된 부가적인 컨테이너를 사이드카(side car) 컨테이너라고 부른다.

Replica Set, 일정 개수의 포드를 유지하는 컨트롤러

  • 정해진 수의 동일한 포드가 항상 실행되도록 관리한다.
  • 노스 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성한다.

포드와 레플리카셋의 정의 중 라벨 셀렉터(Label Selector)를 통해 느슨한 연결이 이루어진다.

This post is licensed under CC BY 4.0 by the author.