쿠버네티스란?
도커 환경에서 우리가 다룰수 있는 가장 작은 단위는 컨테이너이다. 쿠버네티스에서는 Pod으로 작업을 한다. 팟은 하나 이상의 컨테이너로 구성된다. 쿠버네티스에서 팟을 배포하지 하지않고서는 어떤 컨테이너도 배포할 수 없다.
컨테이너 운영환경에서, 컨테이너들을 적절하게 매니징하는 여러가지 솔루션이 있다
예를 들어, 서비스 요청이 많아지는 경우 이에 대한 부하를 줄이기 위해 노드 수를 동적으로 늘린다
- 스케쥴링: 컨테이너별 자원 최적화, 적절한 위치에 배포
- 정상/비정상 상태 체크 및 재기동
- 컨테이너 리소스 모니터링
- 컨테이너 동적으로 삭제 관리
command line 사용
'kubectl run'에 옵션을 지정하면 파드를 디플로이먼트 컨트롤러의 제어하에 실행하는 것이 가능하다.
하지만, 파드를 단독으로 실행하고 싶을 때는 '--restart=Never' 옵션을 사용하면 된다.
kubectl run hello-world --image=hello-world 에 의해 파생되어 만들어진 오브젝트는
pod, deployment.apps, replicaset.apps 가 있다
이번에는 웹 서버의 파드를 5개 가동해 보자. 하나의 파드에 문제가 발생해도 디플로이먼트 컨트롤러가 pod 개수가 5개가 되도록 유지시킨다. --replicas=5 옵션 사용한다.
두개의 웹서버 파드를 지워보자.
파드가 삭제되자 새로운 파드가 자동으로 만들어지는 것을 확인 할 수 있다.
pod 이름을 보면 알겠지만 재생성 된것이 아니라 새로운 파드가 생성되었다
클러스터 구조
하나의 마스터와 여러개의 노드 머신으로 이루어진다
manifest 파일
쿠버네티스에서 pod를 배포하는 방법에는 2가지가 있다.
- 커맨드라인: 주로 트러블 슈팅 목적으로 사용
- manifest 파일: yaml, json 으로 정의되며 버전컨트롤을 통해 배포 설정을 저장할 때 사용. 주로 이방법 사용
Naked pod
# nginx 배포하는 간단한 manifest파일
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Pod API(v1 core)
- apiVersion: 사용하려는 api 버전
- kind: 배포하려는 오브젝트의 종류
- metadate: 배포하려는 오브젝트의 정보
- name: Pod의 이름을 지정하는 name은 필수 항목이며, namespace 내에서 유일한 이름이어야 함
- containers: 컨테이너의 사양을 배열로 기술
- name: 컨테이너를 여러개 기술할 경우 필수 항목
- image: 이미지의 레포지터리명과 태그
- ports: 외부로부터 요청을 전달받기 위한 포트 목록(containerPort: Pod에 들어갈 컨테이너의 포트 )
- livenessProbe: 컨테이너 애플리케이션의 정상적으로 동작 중인지 검사하는 프로브
- readinessProbe: 컨테이너 애플리케이션이 사용자의 요청을 받을 준비가 되었는지 검사하는 프로브
- resoures: CPU와 메모리 요구량의 상한치 지정
- vloumeMounts: Pod에 정의한 볼륨을 컨테이너의 파일 시스템에 마운트 하는 설정, 복수개 기술 가능
- command: 컨테이너 가동 시 실행할 커맨드, args가 인자로 적용
- args: command의 실행 인자
- env: 컨테이너 내에 환경 변수를 설정
manifest 파일을 k8s 클러스터에 전송하여 오브젝트를 만드는 방법
'-f' 옵션뒤에 파일명대신 url를 쓸 수도 있어 github에서의 yaml 파일을 그대로 사용할 수도 있다
오브젝트 생성
kubectl apply -f 매니페스트 파일명
오브젝트 삭제
kubectl delete -f 매니페스트 파일명
클러스터 네트워크는 k8s 클러스터를 구성하는 노드 간의 통신을 위한 폐쇄형 네트워크이다.
노드들 간에 통신은 되지만 외부와 통신은 안됨. (외부에서 파드의 포트에 접근하려면 서비스를 이용해야 함)
그러므로 호스트에서 curl로 접속을 시도해 보면 위와 같이 타임 아웃이 뜬다.
k8s 클러스터 내에 별도의 대화형 파드를 기동해서 nginx 파드에 접근해 보자
웹페이지가 잘 나온다 Nake Pod 실습이 끝났당
'DevOps > Kubernetes' 카테고리의 다른 글
[EKS] alb-ingress-controller path 기반 라우팅 404 에러 (0) | 2021.12.20 |
---|---|
[ECS] Fargate 사용해보기 (0) | 2021.09.05 |
[EKS] alb-ingress-controller 사용해보기 (0) | 2021.08.31 |
[EKS] nginx-ingress-controller, NLB 사용해보기 (3) | 2021.08.25 |
쿠버네티스(2) - 컨트롤러 ReplicaSet, Deployments (0) | 2021.08.19 |