쿠버네티스를 다룬다고 다뤘지만 아직 많이 부족하기에.. 책을 읽어보았는데 역시나 새로 알게된 것들이 많았다.
'쿠버네티스 입문' 이라는 책이었는데 내용도 설명도 좋은 것 같다! (추천)
Kubernetes
간단하게 설명하면, 쿠버네티스는 컨테이너 오케스트레이션 플랫폼이다.
쿠버네티스를 통해 무중단 서비스를 제공할 수 있다.
- 점진적 업데이트 기능을 통해 서비스를 중단하지 않고 업데이트 할 수 있다.
- Self Healing 기능을 통해 특정 컨테이너에 갑작스런 장애가 발생해도 복제 컨테이너를 통해 서비스를 유지할 수 있다.
Vendor Lock In 문제도 해결할 수 있다.
- vendor lock in = 서로 다른 업체(vendor)의 클라우드 제품 간에 호환 문제가 발생하는 문제
- 쿠버네티스를 통해 클라우드의 환경을 이전할 수 있다.
파드에 CPU와 메모리 자원 할당하는 법
spec:
containers:
-name: kubernetes-simple-pod
image: arisu1000/simple-container-app:latest
resources:
requests:
cpu: 0.1
memory: 200M
limits:
cpu: 0.5
memory: 1G
ports:
- containerPort: 8080
- requests → 최소 자원 요구량으로 이 만큼 자원 여유가 있는 노드가 있어야 스케질링해 실행 가능
- limits → 자원을 최대로 얼마까지 사용할 수 있는지
컨트롤러 (Controller)
Pod의 설정나 배포를 관리하는 개념으로 여러 종류의 컨트롤러가 있다. (이렇게 많은 종류가 있는지 몰랐다)
레플리카세트
- Replicaset를 이용해 pod을 관리하면 replicas 만큼 pod의 갯수를 유지
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-repplicaset
spec:
...
replicas: 3
selector:
matchLabels:
app: nginx-replicaset
디플로이먼트
- 배포 기능을 세분화 한 것으로 실행시켜야 할 파드 개수 유지뿐만 아니라 롤링 업데이트, 롤백 등 앱 배포를 더 세밀하게 관리
데몬세트
- 클러스터 전체 노드에 특정 파드를 실행할 때 사용하는 컨트롤러로 새로운 노드가 추가되었을 때 데몬세트가 자동으로 해당 노드에 파드를 실행
- 로그 수집기를 실행하거나 노드를 모니터링하는 파드에 사용됨
스테이트풀세트
- 상태가 있는 파드들을 관리하는 컨트롤러
- volume을 사용해서 특정 데이터를 저장한 후 파드를 재시작했을 때 해당 데이터를 유지
- 여러 개의 파드 사이에 순서를 지정해서 실행되도록 할 수도 있음
잡
- 실행된 후 종료해야 하는 성격의 작업을 실행시킬 때 사용하는 컨트롤러
- 특정 개수만큼의 파드를 정상적으로 실행 종료함을 보장
크론잡
- 잡을 시간 기준으로 관리하도록 생성
- 지정한 시간에 한번만 잡을 실행하거나 지정한 시간동안 주기적으로 잡을 반복 실행
서비스
파드에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상적인 방법으로 여러 종류가 있다.
Cluster IP
apiversion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
- Cluster 내에서 사용하는 IP
- 예를 들어 클러스터 내에서 pod이 해당 클러스터 IP로 통신하면 해당 pod에 통신하게 되는 것
NodePort
apiversion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: NodePort
selector:
app: nginx-for-svc
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
- 말 그대로 Node에 Port를 열어서 해당 pod과 연결하는 것
LoadBalancer
- 쿠버네티스 클러스터를 외부 로드밸런서와 연계해서 설치할 때 사용
Ingress
클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음
Label
- 롤링 업데이트: 일정 개수씩 배포된 파드를 바꾸면서 배포 (디플로이먼트의 기본 배포 방법)
- 블루 / 그린: 기존에 실행된 파드 개수와 같은 개수의 신규 파드를 모두 실행한 후 정상적으로 실행됐는지 확인! 트래픽을 한꺼번에 신규 파드 쪽으로 옮김
- 카나리 (canary): 일부 버전만 신규 파드로 교체해서 버그나 이상은 없는지 반응은 어떤지 확인할 때 유용
ConfigMap
- 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기술
- 개발용과 상용 서비스에서는 다른 설정이 필요할 때가 많은데 이를 위한 것이 컨피그맵
- 하나를 개발용, 하나를 서비스용으로 설정을 달리하게 할 수 있음
'Cloud Native' 카테고리의 다른 글
[Jenkins] Kubernetes에 Jenkins 분산 빌드 환경 설정 (Master-Slave) (0) | 2021.03.23 |
---|---|
[Kubernetes] 쿠버네티스 API 확장하기 - custom resource, crd (0) | 2020.12.06 |
[Kubernetes] 쿠버네티스 플러그인 추천 (kubectx, kubens, ...) (0) | 2020.12.05 |
Container 총정리 (0) | 2020.09.16 |