[Kubernetes] Kubernetes

yoonseok choi·2022년 8월 23일
0

AWS

목록 보기
6/11

Kubernetes

컨테이너화된 workroad와 service를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 플랫폼

-개발환경에서는 app을 실행하는 container를 관리하고 가동 중지 시간이 없는지 확인이 필요하다.
-이때 kubernetes는 app의 확장과 장애 조치를 처리하고 배포 패턴등을 제공하며 이를 쉽게 관리 할 수 있다.

https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/


YAML

  • 데이터 직렬화에 쓰이는 포맷/양식 중 하나
    • 데이터 직렬화란?
      • 서비스간에 Data 를 전송할 때 쓰이는 포맷으로 변환하는 작업
        • ex) 쿠버네티스 마스터에게 요청을 보낼 때 사용
    • 다른 데이터 직렬화 포맷
      • XML, JSON
  • 파일 포맷
    • .yaml, .yml


Grammer

Key-Value

기본적으로 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

# - 를 사용하여 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

Multi Line strings

|

example: |
  Hello
  yoon
# "Hello\nyoon\n \n" 으로 줄바꿈이 가능

---------

>

example: >
  Hello
  yoon
# "Hello yoon \n" 으로도 줄바꿈이 가능

Multi document yaml

---를 통해 하나의 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 단위로 스케줄링, 로드밸런싱, 스케일링 등의 관리 작업을 수행
    	-하나의 Pod 은 한 개의 Container 혹은 여러 개의 Container로 구성 가능

POD 예시


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 로 입력하고 싶은 부분

POD 생성 및 조회

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 을 조회합니다.
  • namespace 란 ?
    • namespace 는 kubernetes 에서 리소스를 격리하는 가상의(논리적인) 단위


Deployment

-> Pod와 Replicaset에 대한 관리를 제공하는 단위
여기서 관리란 Self-healing, Scaling, Rollout(무중단 업데이트)를 의미

Deployment 예시

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

Deployment 생성 및 조회


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

Deployment,pod,replica 생성 & 삭제


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을 지정하여 삭제 또한 가능

Service

-> 쿠버네티스에 배포한 애플리케이션(Pod)을 외부에서 접근하기 쉽게 추상화한 리소스

PVC

-> Persistent Volume Claim (PVC) 는 stateless 한 Pod 이 영구적으로(persistent) 데이터를 보존하고 싶은 경우 사용하는 리소스

profile
Concilio et Labore ( 지혜와 노력으로 )

0개의 댓글