** 본 포스팅은 241110에 업데이트되었습니다 ** minikube란로컬 환경에서 학습용으로 쿠버네티스를 활용할 수 있는 경량화된 쿠버네티스 minikube 설치$ brew install minikube k8s 클러스터 로컬 구성$ minikube start --driver docker - MacOS 15.1 환경에서 minikube 1.34 버전 설치- 위 명령 수행 시 바로 쿠버네티스 클러스터가 구성된다 k8s config 파일 확인$ cat ~/.kube/config - 실제 k8s 설정 파일과 동일하게 k8s config 파일이 구성된다- current-context 환경은 minikube이다 - Mac 환경에 위와 같이 k8s config 파일 및 CA 인증서 파일이 있기 때문에 Ma..
기존 yaml 방식의 '선언적 프로그래밍' 장단점 - k8s manifest, Helm chart, kustomize 등 장점 - 사람이 읽기 쉬움 - 어디서든 사용가능 - 선언적 프로그래밍 형태 - 원하는 상태(Desired state)로 배포 가능 - static 한 파일 명세 단점 - 복잡성에 따라, 다수 환경일 경우 중복 부분 처리 필요(Helm chart, kustomize 등) - 즉, 공통부분에 대한 관리의 어려움이 있으며 별도 툴에 대한 학습 필요 개발자의 요구사항 yaml 방식의 선언적 프로그래밍 방식을 통해 쿠버네티스에 자원을 할당하고 관리하는 방식은 개발자에게 익숙하지 않았다. 즉, 개발자 친화적인 프로그래밍 언어(Go, Java, Python 등), 프레임워크, CLI 등의 형태를 ..
순서 1. Argo Rollout이란 2. Argo Rollout 플러그인 설치 1) Argo Rollout 설치 스크립트 작성 2) 실행 확인 3. Argo Rollout으로 배포 1) Rollout(Canary) 배포 설정 2) Rollout Object 배포 및 확인 3) 애플리케이션 신규 배포 및 Canary 업데이트 확인 Argo Rollout이란 Argo Rollout은 Canary, Blue-Grean와 같은 고급 배포 기능을 위한 Argo의 CRD 및 Kubernetes 컨트롤러이다. 이를 통해 Kubernetes에선 제공되지 않는 다양한 배포 기법을 적용하고 자동화할 수 있다. Canary 업데이트란 cf. Canary 배포에 대한 포스팅: https://jh-labs.tistory.co..
k8s 클러스터 상태 - worker 1, 2로 총 두 개 사용 - worker1 IP: 10.100.0.101 / worker2 IP: 10.100.0.102 - 각 워커에 nginx pod를 deployment controller로 띄운 상태 (label = app: webui) - app: webui label에 대한 NodePort Service 구동 완료 - nginx Pod의 index.html의 컨텐츠를 해당 Pod가 띄워져 있는 노드 번호로 설정한 상태 - 포트 충돌 여지를 줄이기 위해 NodePort definition(yaml)에서 nodePort 키 값 주석처리 - ClusterIP 10.100.100.200 / NodePort 32096 사용 (NodePort는 k8s에서 자동 생성..
CronJob - Deployment와 ReplicaSet의 관계처럼 CronJob에도 Job의 기능이 포함되어 있다. - Deployment가 ReplicaSet을 컨트롤하여 Rolling Update를 지원했던 것처럼 CronJob은 Job을 컨트롤해서 원하는 특정 시간에 Job이 실행될 수 있도록 작업 '예약' 기능을 지원한다. - 예를 들어, 이메일을 주기적으로 보내는 작업, 로그파일을 주기적으로 정리하는 작업, 데이터 백업 작업, 가비지 데이터를 주기적으로 삭제해주는 작업 등 특정 주기를 가지고 반복해서 실행해주는 작업에 대해 CronJob으로 정의할 수 있다. - 애플리케이션이 비정상적으로 동작하여 Pod를 재시작하거나 컨테이너를 재시작하는 것은 Job 컨트롤러 고유의 기능이며 CronJob은..
Job Controller 쿠버네티스의 가장 기본적인 특징은 Pod를 항상 Running 중인 상태로 보장해준다는 것이다. 하지만 배치 처리처럼 특정 시점에만 Pod가 필요하다면 Job 컨트롤러를 사용하는 것이 해답이 될 수 있다. Job Controller에 의해서 Pod를 실행시키면 해당 Job에 대한 결과(정상인지에 대한 여부)를 점검해서 비정상으로 종료되었을 경우에는 다시 재시작해준다는 특징이 있다. 실습 예시 1) restartPolicy: Never - job-exam.yaml 파일 apiVersion: batch/v1 kind: Job metadata: name: centos-job spec: # completions: 5 # parallelism: 2 # activeDeadlineSecon..
StatefulSet StatefulSet은 상태(Pod 이름, Pod 볼륨)를 보존해주는 컨트롤러이다. Pod를 생성할 때 NAME 뒤에 추가되는 5자리의 문자는 랜덤으로 생성된 Hash 값이다. 컨트롤러에 의해 만들어진 모든 Pod는 이와 같이 랜덤 해시 값이 붙은 형태로 Pod 이름이 형성된다. 특정 Pod를 지우고 다시 실행되는 Pod의 이름을 보면 이전과 달라진 해시값을 가진다. 즉, Pod의 이름이 보장되지 않는다는 것을 의미한다. 이전까지 배운 컨트롤러는 'Pod의 개수를 보장'해주었지만 Pod의 이름을 보장해주지는 않았다. StatefulSet은 다른 컨트롤러와 다르게 아래 두 가지를 보장해주는 컨트롤러이다. 1) Pod 이름 2) Pod 저장소 (스토리지, 볼륨) Pod 이름을 어떻게 보..
이전 포스팅에서 다룬 컨트롤러 - ReplicationController: 컨트롤러의 가장 근본적인 역할을 하는 컨트롤러로 Pod의 개수를 보장 - ReplicaSet: 풍부한 label을 지원하여 다양한 조건에 해당하는 Pod 개수 보장 - Deployment: ReplicaSet을 컨트롤하며 Rolling Update를 지원 -> 결국 세 개의 컨트롤러는 모두 'Pod의 개수를 보장'하는 것이 주요 역할이었던 컨트롤러였다. DaemonSet도 Pod의 개수를 보장하지만 다른 컨트롤러와 비교해보면 약간 성격이 다르다. DaemonSet - 이전에 다룬 다른 컨트롤러와 달리 DaemonSet은 노드 당 1개씩의 Pod를 보장하는 컨트롤러이다. - 운영 중에 노드가 추가되면 추가된 노드 개수만큼 Pod를 ..
- Total
- Today
- Yesterday
- docker
- K8s
- Non-Blocking
- 우분투
- container
- ci/cd
- go
- rolling update
- 컨트롤러
- ubuntu
- CICD
- Controller
- spring
- 쿠버네티스
- GitOps
- LFCS
- db
- Java
- jvm
- argocd
- 코틀린
- RDB
- 카프카
- golang
- kafka
- helm
- Linux
- github actions
- Stream
- Kubernetes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |