본문 바로가기

DevOps/쿠버네티스

쿠버네티스 yaml 스펙 상세 설명


쿠버네티스의 pod, service, ingress 등을 배포하기 위해서는 아래와 같은 예시 yaml 파일을 배포한다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 8090

특징

  1. 띄어쓰기 구분을 잘해야한다.
    - 각 셋팅의 하위 셋팅은 종속적이기 때문에 띄어쓰기가 틀리게 되면 적용 실패된다.
    - tab보다는 space를 추천

  2. 원하고자 하는 kind에 따라 apiVersion 종류가 달라진다.


apiVersion 설명

- 스크립트를 실행하기 위한 쿠버네티스 API 버젼

v1

쿠버네티스에서 발행한 첫 stable release API
(대부분의 api가 포함되어 있음)

apps/v1

쿠버네티스의 common API 모음, Deployment, RollingUpdate, ReplicaSet을 포함

autoscaling/v1

pod의 autoscale 기능을 포함하는 API, 현재는 CPU metric을 사용한 scaling만 가능
(추후에 alpha, beta version에서 memory, custom metric으로 scaling 기능 추가예정)

batch/v1

배치 프로세스, job-like task를 위한 배포 api

batch/v1beta1

batch/v1에서 cronJob으로 job을 돌리는 api가 추가

certivicates.k8s.io/v1 beta

클러스터의 secure network function들이 추가된 API
(TLS 등의 기능 추가)

extensions/v1beta

Deployments, DaemonSets, ReplicatSets, Ingress 등 상당수 feature들이 새롭게 정의된 API
그러나 상당수의 api들이 apps/v1과 같은 그룹으로 이동되어서, 쿠버네티스 1.6버젼 이후부터는 deprecated 됨

policy/v1beta1

pod에 대한 security rule이 정의된 API

rbac.authorization.k8s.io/v1

쿠버네티스의 role-based access control이 가능한 function이 정의됨


kind 설명

- 리소스의 종류 정의

Pod

pod을 정의하여 쿠버네티스 선언(아직 배포되지 않은 상태)

ReplicationController(or ReplicaSet)

쿠버네티스에 선언된 pod을 배포하기 위한 선언(replicas 갯수, readiness probe 등 선언)

Service

동적으로 생성된 pod(각각 다른 ip)을 라벨(label)과 라벨 셀렉터(label selector)을 사용하여 하나의 서비스로 묶어주는 역할.
(ex. pod에 라벨이 "wonyoung"이 선언되어 있으면, service는 "wonyoung" label이 붙은 서비스만 골라내서 그 pod간에만 로드벨런싱을 동해 서비스를 외부에 제공)


End of Document