DevOps/Kubernetes
-
Kubernetes 배치 워크플로우 (1) - Job & CronJobDevOps/Kubernetes 2021. 3. 1. 16:14
쿠버네티스에서는 여러 단계에 걸친 작업을 관리해주는 워크플로우를 다양한 방법으로 수행할 수 있다. 그 근간이 되어주는 것이 쿠버네티스 기본 오브젝트인 Job 이다. Job 개념 쿠버네티스의 대부분의 컨트롤러는 모든 파드가 '언제나' 실행되도록 한다는 목표를 공유하고 있다. 그렇기 때문에 ReplicaSet, DaemonSet, StatefulSet, Deployment 모두가 본인들이 관리하는 파드 중 하나가 실패하면 재시작하고 재생성하고 하는 것이다. 그렇지만 내가 원하는 작업을 실행하고 파드가 그냥 죽기를 바란다면? 그때 사용하는 것이 Job이다. Job은 하나 이상의 파드가 할당 받은 명령을 모두 수행하고 작업이 잘 종료되어 정상 종료 코드(0)를 받도록 해주는 것이다. 다른 오브젝트..
-
CKA 04: Volume & PersistentVolumeDevOps/Kubernetes 2020. 8. 21. 16:30
Volume and Mounts hostPath 컨테이너의 라이프사이클에 따라 생성/소멸되는 임시 볼륨 containers: - image ... volumeMounts: - mountPath: /opt name: data-volume volumes: - name: data-volume hostPath: # 여러 워커노드가 있으면 노드마다 이 폴더가 생김 path: /data # 워커노드의 실제 디렉토리 경로 type: Directoy other than hostPath aws 뿐만 아니라 azure, gcp 등등에서 타입 제공 containers: - image ... volumeMounts: - mountPath: /opt name: data-volume volumes: - name: data-vol..
-
Docker StorageDevOps/Kubernetes 2020. 8. 21. 16:25
도커는 어디다 파일을 쓰는가? 서버에 도커를 설치하면 /var/lib/docker 폴더가 생성되고, 다음과 같이 데이터가 저장됨. /var/lib/docker |-- aufs |-- containers |-- images |-- volumes 도커는 어떻게 파일을 쓰는가? Layered Architecture 각 레이어는 이전 레이어 대비 변경된 부분만 저장함. 다른 이미지를 만들 때, 기존에 생성된 레이어와 동일한 부분이 있다면 이 부분은 따로 저장하지 않고 캐시에서 가져와서 씀. 실제로 변경된 부분만. Container Layer 이미지 레이어는 기본적으로 Read Only 이고, 실행중인 컨테이너에 대해서는 Container Layer 라는 게 별도로 있음. 여기에 들어가서 뭔가 할 수 있음. 컨테..
-
CKA 03: 쿠버네티스에서 환경변수 활용DevOps/Kubernetes 2020. 8. 15. 22:50
어떤 도커 컨테이너 이미지가 실행될 때 반드시 실행되는 명령어를 ENTRYPOINT와 CMD를 통해 지정한다. 그 실행될 명령어가 ENTRYPOINT 라면 여기에 기본값을 넣어주는 것이 CMD이다. 그래서 실제로 실행될 때는 ENTRYPOINT + CMD가 붙은 것이 함께 돌아가게 된다. 예를 들어 ENTRYPOINT ['sleep'] CMD ["5"]라고 하면, sleep 5가 기본으로 실행되는 것이다. docker run .... 10이라고 컨테이너 실행시 어떤 인풋을 같이 넣어주게 되면 sleep 10이 실행되는 형태다. K8S에서도 이런 비슷한 역할을 해주는 것이 있는데, command가 ENTRYPOINT 역할이고, args가 CMD 역할이다. 만약 컨테이너 이미지에 ENTRYPO..
-
CKA 02: Kubernetes ObjectsDevOps/Kubernetes 2020. 7. 25. 20:15
Pod 쿠버네티스에서는 컨테이너를 결국 배포해서 실행되게 하는 게 목적이지만, 컨테이너를 직접 노드에다가 실행하지 않는다. 대신 Pod라는 최소 단위로 encapsulate 해서 실행한다. 왜 이렇게 하냐고? 보통 하나의 Pod에 하나의 컨테이너가 들어가기는 하지만, 한 Pod에 여러 컨테이너가 들어갈 수도 있음. (예: logging 등을 전담하는 헬퍼 컨테이너) 하나의 파드에 여러 컨테이너가 들어가게 되면, 1) 네트워크 네임스페이스를 공유하기 때문에 localhost: 방식으로 컨테이너 간 통신이 가능함. 2) 스토리지 볼륨 공유 ReplicaSets Pod가 encapsulate 해주는 거는 좋은데, 결국 얘가 하나 죽으면 서비스가 불가한 상황이 된다. 그러니 여러 Pod를 유지하고 싶은데 죽을 ..
-
CKA 01: Kubernetes ArchitectureDevOps/Kubernetes 2020. 7. 25. 16:26
Cluster Architecture 쿠버네티스 클러스터는 컨트롤 플레인 컴포넌트와 '노드'라고 불리는 서버들의 집합이다. Master node: 전체 클러스터의 뇌 역할. 클러스터 내에서 발생하는 이벤트들을 감지하고 파드 스케줄링 등의 의사결정을 한다. Worker node: 컨테이너화 되어 있는 어플리케이션을 실행. Control Plane: Master Nodes kube-apiserver 쿠버네티스 컨트롤 플레인의 프론트엔드 역할. ETCD와 다이렉트로 통신하는 유일한 존재. 나머지 컴포넌트들은 apiserver를 경유하여 etcd와 상호작용. kubectl 명령어가 들어왔을 때? 사용자 인증 > 요청 검증 > 데이터 추출 > etcd 업데이트 > scheduler에 전달 > kub..