Kubernetes

k8s

google에서 만들고 있는 도커 오케스트레이터, 설정이 매우 복잡하지만, GCE에서는 쉽게 쓸수 있다. 다만 이것을 내 머신에 설치하려면 수많은 사전지식과 설정 파일이 필요하다.

why k8s

Kubernetes Object

K8s에서 논리적으로 정의한 관리 단위들이다.

Pod

  • container의 묶음
  • k8s에서는 이 Pod을 기본 단위로 취급
  • 다른 모든 Object 는 이 POD 을 잘 관리하기 위해서 존재한다.

Replicaset

  • 같은 POD을 여러개 띄우기 위한 Object
  • Replicaset 은 POD 의 갯수를 관리한다.

Deployment

  • Replicaset 을 관리하기 위한 Object
  • 배포 정책과 다른 배포에 필요한 정책들을 지정할수 있다.
  • 새버전이 배포되면 새로운 replicaset 을 생성한다.

Service

  • Pod이 외부 혹은 다른 POD와 연결되기 위한 정보를 정의한다.
  • DNS 도 service 단위로 관리 된다.
  • VIP, ClusterIP 등등을 관리한다.
  • 3가지의 타입이 존재한다.
  • L4가 맡는 역활을 맡는다.
    • 단 각 Backend 의 Weight 를 조절할수 없고, on/off만 존재한다.

Ingress

  • URL 에 따라 다른 Service 로 연결하거나 트레픽을 일부에만 흘리거나 한다.
  • L7이 맡는 역활을 맡는다.
    • 구 버전에서는 nginx로 구현되기도 했다.

Namespace

  • C++의 Namespace 와 유사하다.
  • 각 네임스페이스별로 k8s 이름이 유니크 해야한다.
    • 즉 서로 다른 Namespace에서는 같은 이름의 Pod, deployment, configmap 등등이 존재할수 있다.
  • Namespace 별로 권한 관리나 유저설정을 달리할수 있다.

ConfigMap/Secret

  • Pod을 띄울떄 필요한 각종 설정 값을 저장한다.
  • Key-Value 로 저장 할수 있으며 POD에는 환경 변수로 전달하거나 filesystem 으로 마운트 할수 있다.

Daemonset

  • deploy의 특수한 형태이며, 갯수가 아니라 모든 노드에 POD 을 띄운다.
  • 주로 모든 노드에 설치되어야할 Binary 를 설치하거나, 모니터링 하기 위해서 사용된다.
  • Cluster를 운영하는 입장에서는 Deamonset 을 적극적으로 활용하는 편이 유지보수가 쉽다.

Statefulset

  • deploy의 특수한 형태이며, Deployment 는 모든 POD 이 동일한 Resource 를 사용하는 반면 Statefulset 은 POD 별로 다른 Resource를 사용하게 할수 있다.
  • 주로 Local volume 을 쓰거나 각 POD로 설정값이 달라야하는 Storage 성 Application을 띄울떄 유용하다.

기타

  • ServiceAccount
    • K8s에서 사용할 계정을 정의한다.
  • CustomResourceDefinition
    • k8s Object를 확장해서 사용할수 있다.

핵심 component

  • kubelet
  • docker
  • kube apiserver
  • kube schduler
  • kube controller

Cluster 를 만들때의 Tip

k8s 는 kubelet 과 docker만 설치하고 나머지는 kube의 기능들로 배포하는 것이 훨씬 편하다.

  • api server, scheduler 는 manifest로
  • network 는 hostNetwork 인 deamonset 으로
  • monitering용 pod 및 로그 수집/처리기는 deamonset 혹은 deployment로
  • service에서 사용할 storage는 statefulset 으로 띄운 스토리지 데몬들로.

see also