컨테이너화된 workroad와 service를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 플랫폼
-개발환경에서는 app을 실행하는 container를 관리하고 가동 중지 시간이 없는지 확인이 필요하다.
-이때 kubernetes는 app의 확장과 장애 조치를 처리하고 배포 패턴등을 제공하며 이를 쉽게 관리 할 수 있다.
https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
.yaml
, .yml
기본적으로 Key-Value 구조
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: yoon
image: yoon:1.25
STRING
# 일반적인 문자열은 그냥 작성해도 되고, 따옴표로 감싸도 가능
example: this is string
example: "this is string"
---------
# 반드시 따옴표로 감싸주어야 하는 경우 :
# 숫자를 문자열 타입으로 지정하고 싶은 경우
example: 123
example: "123"
---------
# y, yes, true 등의 YAML 예약어와 겹치는 경우
example: "y"
---------
# :, {, }, ,, #, *, =, \n 등의 특수 문자를 포함한 경우
example: "a : b"
example: "a#bc*"
---------
INTEGER
# integer type
example: 123
# hexadecimal type: 0x 로 시작
example: 0x1fff
# - 를 사용하여 list 를 명시할 수 있다
examples:
- ex_one: 1
- ex_two: 2
---------
# [ ] 로 입력 가능
examples: ["1", "2", "3"]
---------
# list 의 원소는 어떤 자료형이든 가능합니다.
spec:
containers:
- name: yoon
image: yoon:1.25
- name: ubuntu
image: ubuntu
commands:
- sleep
- 3600
- name: python
image: python:3.8
|
example: |
Hello
yoon
# "Hello\nyoon\n \n" 으로 줄바꿈이 가능
---------
>
example: >
Hello
yoon
# "Hello yoon \n" 으로도 줄바꿈이 가능
---를 통해 하나의 yaml에 여러개의 doc를 작성 할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: one
---
apiVersion: v1
kind: Service
metadata:
name: two
---
apiVersion: v1
kind: Deployment
metadata:
name: three
쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위
-쿠버네티스는 Pod 단위로 스케줄링, 로드밸런싱, 스케일링 등의 관리 작업을 수행
-하나의 Pod 은 한 개의 Container 혹은 여러 개의 Container로 구성 가능
apiVersion: v1 # kubernetes resource 의 API Version을 의미
kind: Pod # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: counter
spec: # 메인 파트!!!! : resource 의 desired state 를 명시
containers:
- name: yoons'container # container 의 이름
image: yoon # container 의 image
args: [/bin/sh, -c, 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done'] # 해당 image 의 entrypoint 의 args 로 입력하고 싶은 부분
vi pod_ex.yaml
kubectl apply -f pod_ex.yaml
#kubernetes resource 를 생성
kubectl get pod_ex
# ContainerCreating & 조회
kubectl get pod -n kube-system
# kube-system namespace 의 pod 을 조회합니다.
-> Pod와 Replicaset에 대한 관리를 제공하는 단위
여기서 관리란 Self-healing, Scaling, Rollout(무중단 업데이트)를 의미
apiVersion: apps/v1 # kubernetes resource 의 API Version
kind: Deployment # kubernetes resource name
metadata: # 메타데이터 : name, namespace, labels, annotations 등을 포함
name: nginx-deployment
labels:
app: nginx
spec: # 메인 파트!!! : resource 의 desired state 를 명시
replicas: 3 # 동일한 template 의 pod 을 3 개 복제본으로 생성
selector:
matchLabels:
app: nginx
template: # Pod 의 template 을 의미
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # container 의 이름
image: nginx:1.14.2 # container 의 image
ports:
- containerPort: 80 # container 의 내부 Port
vi deployment.yaml
kubectl apply -f deployment.yaml
kubectl get deployment
# 다음과 같은 메시지가 출력
# NAME READY UP-TO-DATE AVAILABLE AGE
# nginx-deployment 0/3 3 0 10s
kubectl get deployment ,?pod
kubectl delete pod <pod-name>
# 해당 pod을 삭제하면 자동으로 새로운 pod가 생성된다.
# deployment.yaml내에는 relicas가 여전히 3으로 지정되어 있기 때문
kubectl scale deployment/nginx-deployment --replicas=5
kubectl get deployment
# replicas의 숫자를 변경하여 추가 및 삭제가 가능하다.
kubectl delete deployment <deployment-name>
kubectl get deployment
# deployment의 name을 지정하여 삭제 또한 가능
-> 쿠버네티스에 배포한 애플리케이션(Pod)을 외부에서 접근하기 쉽게 추상화한 리소스
-> Persistent Volume Claim (PVC) 는 stateless 한 Pod 이 영구적으로(persistent) 데이터를 보존하고 싶은 경우 사용하는 리소스