이전 포스팅에서 다룬 컨트롤러 - ReplicationController: 컨트롤러의 가장 근본적인 역할을 하는 컨트롤러로 Pod의 개수를 보장 - ReplicaSet: 풍부한 label을 지원하여 다양한 조건에 해당하는 Pod 개수 보장 - Deployment: ReplicaSet을 컨트롤하며 Rolling Update를 지원 -> 결국 세 개의 컨트롤러는 모두 'Pod의 개수를 보장'하는 것이 주요 역할이었던 컨트롤러였다. DaemonSet도 Pod의 개수를 보장하지만 다른 컨트롤러와 비교해보면 약간 성격이 다르다. DaemonSet - 이전에 다룬 다른 컨트롤러와 달리 DaemonSet은 노드 당 1개씩의 Pod를 보장하는 컨트롤러이다. - 운영 중에 노드가 추가되면 추가된 노드 개수만큼 Pod를 ..
jib 개요 Jib은 Docker 데몬 없이 Java 애플리케이션에 최적화된 Docker 및 OCI 이미지를 빌드하고 Docker Hub와 같은 레지스트리로 저장하는 '플러그인'이다. jib은 gradle, maven과 같은 빌드툴과 함께 사용된다. jib과 기존 Dockerfile 기반 빌드 비교 위 그림과 같이 jib은 빌드와 Dockerfile 작성의 과정을 하나의 파이프라인으로 단일화한다. jib은 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 Docker Hub, AWS ECR 등 원하는 레지스트리에 푸시까지 해준다. jib 장점 1) Fast Jib은 애플리케이션을 여러 계층으로 분리하여 클래스에서 종속성을 분리한다. 이제 Docker가 전체 Java 애플리케이션을 다시 빌드할 때까지..
이번 포스팅에서는 Jenkins를 기반으로 CI(Continuous Integration)를 구축했던 과정을 다룬다. Jenkins에서 제공하는 플러그인들과 기능들을 활용하여 빌드 파이프라인 구성뿐만 아니라, 빌드 자동화, 테스트 자동화, 코드 품질 자동화 등의 작업을 파이프라인 상에 같이 연동시켜 사용하는 경우가 많다. 이번 포스팅에서는 Jenkins를 설치하고 간단한 빌드 파이프라인을 구축하는 과정만 다룰 것이고 아래와 같은 순서로 구성된다. 1) Jenkins 설치 및 기본 설정 (컨테이너 기반 Jenkins 설치, 플러그인 설치, SSH 셋업) 2) CI/CD Pipeline Job 구성 (GitHub 연동, Jenkinsfile 작성) 3) 이슈 처리 cf. Jenkins는 Java 프로그램이기..
Deployment - Controller인 ReplicaSet을 제어해주는 부모 역할을 한다. - Deployment는 Rolling Update를 목적으로 만들어졌다. - Deployment를 만들면 Deployment가 ReplicaSet을 만든다. 이때 Deployment는 실행시킬 Pod의 버전과 replicas를 ReplicaSet에게 전달한다. 그 후엔 ReplicaSet이 전달받은 정보를 기반으로 Pod를 생성하고 Pod 수를 보장하게 된다. - 즉, Deployment가 ReplicaSet을 컨트롤하고 ReplicaSet이 Pod를 컨트롤하는 구조이다. - 정리하자면, Deployment는 ReplicaSet Controller를 관리해서 Pod 수를 보장하고, 추가적으로 Rolling ..
ReplicaSet Controller - RC(ReplicationController)와 같은 역할을 하는 컨트롤러이다. - RC보다 다양한 형태의 selector를 지원한다. 이때 selector 필드 아래 matchLabels, matchExpressions 필드를 사용한다. - matchLabels만 사용하면 RC와 같다. (label에 대한 AND 연산) - matchExpressions까지 사용하면 다양한 형태로 표현할 수 있다. - RC, RS 모두 label과 selector 만을 기반으로 Pod를 컨트롤한다. 즉, 어떤 컨테이너인지는 관여하지 않는다. RC vs RS Definition 비교 출처: https://github.com/237summit/Getting-Start-Kuberne..
이번 포스팅에서는 쿠버네티스의 컨트롤러 중에서 ReplicationController에 대해 다룬다. ReplicationController - 요구하는 Pod의 개수를 보장하는 가장 기본적인 컨트롤러 역할을 한다. - 요구하는 Pod 개수가 부족하면 template을 이용해 Pod를 추가한다. - 요구하는 Pod 수보다 많으면 최근에 생성된 Pod를 삭제한다. ReplicationController의 기본 구성 - selector - replicas - template RC Definition 예시 - label은 key:value 형태로 정의된다. - selector에서 정의한 :와 같은 label을 가진 Pod를 replicas 만큼 운영한다. - 컨트롤러는 현재 운영되고 있는 Pod들을 모니터링하..
Controller란? 공식문서에 따르면 쿠버네티스에서 컨트롤러는 클러스터의 상태를 관찰 한 다음, 필요한 경우에 생성 또는 변경을 요청하는 '컨트롤 루프'이다. 그렇다면 컨트롤 루프(Control Loop)란 무엇인가? 컨트롤 루프(Control Loop) - 컨트롤 루프는 쿠버네티스에서만 사용되는 용어는 아니며 공식문서에 따르면 컨트롤 루프란 종료되지 않으면서 시스템 상태를 조절하는 루프라고 한다. - 컨트롤 루프는 컨트롤러를 실행시킨다. - 컨트롤 루프는 크게 3가지 행위를 한다. (모니터링, 상태 차이 발견, 액션) - 3가지 행위를 통해 '현재 상태를 의도한 상태와 같아지도록 만드는 역할'을 한다. 예시 'kubectl create deployment web-pod --image=nginx --..
컨테이너 리소스 할당 개론 - 쿠버네티스가 관리하는 리소스는 CPU와 Memory이다. - 기본적으로 컨테이너 단위로 리소스를 제한한다. 리소스를 제한하지 않을 경우 발생할 수 있는 문제 1) starvation 리소스를 제한하지 않으면 해당 노드에 할당된 컨테이너는 노드의 리소스를 전부 다 사용할 수 있다. 따라서 만약 리소스 제한을 두지 않고 특정 호스트에 Pod를 두 개 이상 띄웠을 경우, 하나의 Pod가 노드의 모든 리소스를 사용한다면 새로운 Pod가 스케줄링될 수 없다. 2) 보안 관련 이슈 만약 특정 Pod에 보안 관련 버그가 발생해서 해커가 해당 Pod에 디도스 공격을 주어 노드의 모든 리소스를 사용하게 된다면, 다른 Pod들은 스케줄링될 수 없다. ** 따라서 Pod 하나를 띄우더라도 해당..
- Total
- Today
- Yesterday
- GitOps
- db
- 쿠버네티스
- 컨트롤러
- Non-Blocking
- Java
- CICD
- Controller
- ubuntu
- github actions
- argocd
- Kubernetes
- container
- kafka
- ci/cd
- golang
- spring
- 카프카
- docker
- LFCS
- Linux
- RDB
- go
- 코틀린
- Stream
- K8s
- rolling update
- helm
- jvm
- 우분투
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |