컨테이너 기술 발달
컨테이너 기술이 발전함에 따라 현재는 많은 기업들이 쿠버네티스(이하 쿠버)를 많이 사용하고 있다
리눅스의 자원 격리 기술을 기반으로 컨테이너 기술이 생기고,
여기서 사람들이 많이 아는 현재의 도커가 모습을 드러냈다
시간이 지나면서 사람들은 더 많은 컨테이너를 관리해야 했고,
MSA가 유행하는 현재는 쿠버네티스를 사용하기 정말 좋은 시대가 된 것 같다
쿠버네티스 종류
현재 사용해본 것만 기술하면
kubeadm과 minikube가 있다
kubeadm의 경우 멀티 노드 구성 및 다양한 기능을 사용할 수 있지만 설치 방법이 어렵다는 점이 있다
minikube는 반대로 kubeadm와 달리 초기 셋업은 쉽지만 kubeadm 만큼 기능이 다양하지 않다
제공되는 기능
컨테이너 자체 관리에 탁월하다
컨테이너가 죽으면 되살려주고 (Auto Healing)
부하가 들어오면 정해진 댓수만큼 늘려주거나, 자원 사용량을 확장시킨다 (Auto Scaling)
수동으로 구현해야 했던 롤링 배포를 지원하며
배포에 문제가 생길 시 손쉽게 처음으로 돌아갈 수 있다
오브젝트들
파드, Pod
컨테이너를 한 개 이상 가질 수 있는 쿠버네티스가 관리하는 최소 단위이다
쿠버 관리자는 각 pod에 최소, 최대 자원량을 할당할 수 있고 (CPU, Memory)
pod들의 평균 자원 사용량이 임계치에 이르면 오토 스케일러(HPA, VPA)에 의해 수평/수직 확장 될 수도 있다
그리고 파드끼리는 포트가 같아도 된다.
왜냐하면 클러스터 내에서는 파드들이 각자 별도의 IP를 가지고 있다
클러스터 내부가 하나의 거대 네트워크인 것 처럼 여러 IP를 가지고 있다
서비스, Service
각 오브젝트간의 통신을 담당한다
ClientIP(Default), NodePort, LoadBalncer가 있으며
ClientIP는 내부망에서 접근
NodePort는 Node에 Port를 부여해서 사내에서 개발 및 테스트를 하기 위한 목적으로 사용한다
LoadBalencer는 실질적으로 외부와 통신이 가능하다(운영 환경). 단 추가적인 설정을 해야 하고 제조사마다 모두 다르다
볼륨, Volume
PVC, PV가 있다
PV를 통해서 노드에 저장소를 만든다
그리고 PVC를 통해서 각 pod가 영구 저장소인 PV에 접근한다
컨피그맵, 시크릿, ConfigMap, Secret
Spring Boot의 application.yml 같은 친구다
이 친구의 존재로 인해 백엔드와 인프라의 환경의 경계가 모호해진 것 같다
이것으로 설정 정보 관리가 가능하다
또, Secret을 이용하면 양방향 암호 처리도 가능하다
다만 Secret 보안성에 큰 긍정적인 영향을 주는지는 모르겠다. 양방향은, 개발자가 언제든지 복호할 수 있다는 거니까..
네임 스페이스, Namespace
자바의 package 혹은 Gradle의 서브 모듈같은 존재이다
어느 한 namespace에 pod등의 오브젝트를 정의하면, 다른 namespace에서는 접근을 못한다
컨트롤러 오브젝트들
So in the Kubernetes world, a controller will basically monitor and measure the cluster resources state to adjust those resources that diverge from the desired state.
따라서 쿠버네티스 세계에서 컨트롤러는 기본적으로 클러스터 리소스 상태를 모니터링하고 측정하여 원하는 상태와 차이가 나는 리소스를 조정합니다.
- 출처
아래는 컨트롤러 카테고리에 속하는 오브젝트들이다.
레플리카셋, ReplicaSet
컨트롤러란 오브젝트가 운영자가 목표한 상태를 갖도록 매니징하는 오브젝트다
이전에는 Replication Controller라는 object가 존재했다
둘 모두 template, replicas라는 속성을 사용 가능하고
ReplicaSet만 selector 속성을 사용 가능하다 (다만 많이 사용할 일이 없는 것 같다)
template - 메타 데이터
replicas - 유지할 오브젝트 갯수
selector - 라벨 상세 선택 기능
스테이트풀셋, StatefulSet
...
레플리카셋과 다르게 DB와 같이 Stateful한 속성을 다루기 위한 컨트롤러 오브젝트이다
레플리카셋처럼 단순하게 수평적으로 replicas가 형성되지 않는다 (이부분은 다시 봐야한다)
ReplicaSet은 이름이 hash로 부여되며 한번에 생성된다. 그리고 삭제도 한번에 된다
반면에 StatefulSet은 이름에 정수 오름차순으로 생성된다. 그리고 삭제도 역순으로 하나씩 된다
또 StatefulSet은 삭제되더라도 ReplicaSet과 다르게 volume이 유지된다
디플로이먼트, Deployment
ReplicaSet의 상위 호환이다. 배포 방식을 추가로 지정할 수 있다
- RollingUpdate
- Blue/Green
- Canary
데몬셋, DaemonSet
싱글톤 마냥 하나가 둥둥 떠댕길 수 있는 오브젝트이다
크론 잡, CronJob
스케줄러 기능이라고 보면 된다, 주기적으로 한 작업을 실행한다
HPA(Horizontal Pod Autoscaler)
수평 확장기. Pod들의 자원 사용량에 따라 수평적으로 확장할 수 있다.
바보처럼 트래픽이 몰아치는데, 하나씩 늘리는 것이 아닌,
현재 자원 사용량을 고려하여 한 번에 적정 갯수만큼 늘린다 (공식이 있다)
대비되는 개념으로 VPA가 있다
Probe(Readinessprobe, Livenessprobe)
최초에 Startup Probe이 실행되며 한번이라도 api 테스를 통과하면 아래의 두 프로브를 동작시킨다
Liveness probe를 통해 앱이 실행되는 시점을 알게 된다.
만일 이 프로브가 테스트에 (2번) 실패하면 App을 재기동한다
Readness probe를 통해 앱이 실제로 구동되는 시점을 알게 된다. 이게 통과해야 외부와 연결이 된다
약어
그리고 쿠버에서는 약어를 사용할 수 있다!
터미널 작업시 요긴하게 편하니까 약어를 이용해서 실습을 하면 보다 쾌적하게 학습을 할 수 있다 ㅎ
풀 네임 | 약어 |
pod | pod |
service | scv |
configmap | cm |
namespace | ns |
'Infra, DevOps > Kubernetes, Docker' 카테고리의 다른 글
[k8s] 쿠버로 무중단 배포 3종 모두 해보자 (argo없는 Blue Green) (0) | 2024.01.30 |
---|---|
[배포 기록] 도커 역사 및 빠른 재정리 (feat. 삽질 ..) (0) | 2024.01.20 |
윈도우에서 쿠버네티스 긴급 사용 후기 (2) | 2024.01.16 |
순전히 GPT의 도움으로 Docker기반 MySQL 셋업하기 (0) | 2023.07.08 |
Docker _ 생코 (0) | 2021.04.05 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!