Kubernetes PersistentVolume 상태
Kubernetes 환경에서 PV(PersistentVolume)를 다루다 보면, 가끔 PV의 상태가 ‘Released’로 표시되는 것을 볼 수 있습니다. PV가 ‘Available’ 상태가 아니라면 새로운 파드가 볼륨을 사용할 수 없어 당황스러울 수 있죠. 이 글에서는 PV가 왜 ‘Released’ 상태가 되는지, 그리고 이 문제를 어떻게 해결하는...
Kubernetes 환경에서 PV(PersistentVolume)를 다루다 보면, 가끔 PV의 상태가 ‘Released’로 표시되는 것을 볼 수 있습니다. PV가 ‘Available’ 상태가 아니라면 새로운 파드가 볼륨을 사용할 수 없어 당황스러울 수 있죠. 이 글에서는 PV가 왜 ‘Released’ 상태가 되는지, 그리고 이 문제를 어떻게 해결하는...
Kubernetes에서 외부 트래픽을 클러스터 내부 서비스로 라우팅하는 핵심 리소스인 Ingress. 이를 제대로 이해하기 위해서는 Ingress Controller와 Ingress Class의 역할을 명확히 알아야 합니다. 이 포스팅에서는 이 두 가지 개념을 기술적으로 깊이 있게 살펴보고, 실제 트래픽이 어떻게 흐르는지 상세히 설명합니다. In...
C++ 개발자가 Rust를 처음 만났을 때, 가장 먼저 던졌던 질문은 “상속이 없다고? 그럼 코드를 어떻게 재사용하지?”였습니다. 상속에 익숙한 우리에게 트레이트(Trait)는 낯선 개념일 수밖에 없죠. 하지만 Rust의 트레이트는 C++ 상속의 불편함을 해결하는 아주 명쾌한 철학을 담고 있었습니다. Rust 트레이트의 기본부터 그 숨겨진 매력까지...
Filebeat 사이드카 컨테이너 예제 Filebeat를 사이드카 컨테이너로 구성하고 Elasticsearch(ES)로 인증 관련 정보를 보내는 예제는 다음과 같습니다. 이 예제에서는 ConfigMap을 사용하여 Filebeat 설정을 관리하고, Secret을 사용하여 Elasticsearch 인증 정보를 안전하게 저장합니다. 1. Filebeat...
Dockerfile vs. Kubernetes command / args (핵심 비교) 지시어 / 필드 주체 역할 우선순위 기억 핵심 ENTRYPOINT Dockerfile 컨테이너의 실행 파일/주 프로그램 ...
개요 소프트웨어 개발에서 빠르고 안정적인 빌드 및 배포는 성공적인 애플리케이션 개발의 핵심입니다. Docker와 같은 컨테이너 기술은 이를 가능하게 하는 주요 도구로 자리 잡고 있습니다. 오늘은 Docker에 익숙한 개발자들이 Google Cloud Build를 사용하여 Docker 이미지를 클라우드 환경에서 빌드하고, Google Cloud Run...
기본적으로 Jenkins DSL에서 로그를 출력할 때는 sh, echo, println을 많이 사용한다. 이 3개의 함수는 DSL에 정의된 함수로 이중 println은 DSL에도 정의돼 있지만, System.out.println으로 사전에 정의된 함수이기도 하다. 만약 DSL에 정의된 println이 아니라 System.out.println을 사용하...
Jenkins 파이프라인에서 여러 Job을 병렬로 실행할 때, Groovy의 클로저(clousure)와 관련된 레이트 바인딩(late binding) 문제로 인해 의도치 않은 Job이 실행되는 경우가 있습니다. 문제 상황: 병렬 실행 시 동일한 Job이 실행되는 버그 우선, JobEntity라는 클래스를 사용해 두 개의 Jenkins Job(A...
Jenkins master slave 구조 Jenkins를 처음 설정하고 Jenkins job을 실행하면 Jenkins가 설치된 서버위에서 job이 실행된다.Jenkins가 설치된 PC를 master node 혹은 built-node라고 Jenkins가 설치된 서버 이외의 다른 server(node)를 slave라고 부른다. Jenkins는 여러 ...
Jenkins pipeline script는 jvm 방언 중 하나인groovy로 작성하지만, 일반적인 프로그래밍 언어와 다르게 CPS tranform이라는 과정을 거쳐 스크립트가 jenkins위에서 동작하게 된다. NonCPS annotation을 통해 CPS transform을 배제시킬 수 있는데, 처음 코드를 작성하다 보면 어떤 경우에 NonCP...
Rust의 열거형(enums)에 대해 이야기해보려고 합니다. Rust에서의 열거형은 C 언어의 열거형과는 다르게 하스켈(Haskell)의 대수적 데이터 타입과 더 비슷합니다. 열거형을 정의할 때는 enum 키워드를 사용하며, 대문자로 카멜케이스로 된 이름과 해당하는 변형들을 중괄호 안에 나열합니다. Defining Enum 이렇게 정의한 열거형을...
Rust의 컬렉션 소개 Rust는 다양한 컬렉션을 표준 라이브러리에 제공합니다. 이들은 모두 제네릭하게 구현되어 있습니다. 벡터 (Vector) 벡터는 한 가지 타입의 데이터를 여러 개 담을 수 있는 제네릭한 컬렉션입니다. 다른 언어에서는 리스트나 배열과 비슷한 역할을 합니다. let mut v = Vec::new(); // 빈 벡터 생성 v....
러스트의 트레이트는 다른 언어에서의 인터페이스와 유사한 공유 동작을 정의하는 강력한 메커니즘을 제공합니다. 트레이트의 세계로 들어가보고 러스트 프로그래밍에서의 중요성을 이해해봅시다. 트레이트 정의 우리가 여우를 나타내는 RedFox 구조체가 있다고 상상해봅시다. 여우들이 소리를 내는 것과 같은 공통 동작을 가지길 원합니다. 우리는 Noisy라는...
다른 언어에서는 클래스를 사용하지만, 러스트에서는 구조체를 사용합니다. 구조체는 데이터 필드, 메서드, 연관 함수를 가질 수 있습니다. 구조체와 그 필드의 구문은 struct 키워드로 시작하여, 대문자 카멜 케이스로 구조체의 이름을 작성한 뒤 중괄호로 둘러싸는 것으로 이루어집니다. 예를 들어, RedFox라는 구조체가 있다면 다음과 같습니다. st...
clone과 copy Rust에서 Copy와 Clone은 두 가지 서로 다른 트레이트(trait)입니다. 이 두 트레이트는 값의 복사와 복제를 다르게 처리합니다. Copy 트레이트 Copy 트레이트는 값의 복사를 나타내며, 스택에 저장된 값의 복사본이 생성됩니다. Copy 트레이트는 스택에 저장된 고정 크기의 값들에 대해서만 적용됩니다....
Rust의 소유권(Ownership)은 Rust가 다른 언어와 구분돼 갖는 가장 큰 특징 중 하나 입니다. 이 개념은 Rust를 다른 시스템 프로그래밍 언어와 구별되게 만드는 중요한 특징 중 하나입니다. 소유권의 세 가지 규칙 각 값은 소유자(owner)를 가집니다. 값은 하나의 소유자만 가질 수 있습니다. 소유자가 범위를 벗어나면 값...
Rust에서는 문자열에 대한 다양한 개념이 존재하며, 이를 이해하는 것은 중요합니다. 이 글에서는 Rust 표준 라이브러리에서 제공되는 문자열의 두 가지 중요한 타입에 대해 살펴보겠습니다. 불변한 Borrowed String Slice: 문자열 슬라이스는 대부분 빌려오는(borrowed) 형태로 사용됩니다. 리터럴 문자열은 항상 빌려오는 문자열...
Rust는 안전성과 예측 가능성을 중요시하는 언어로, 이를 달성하기 위해 다양한 기능과 도구를 제공합니다. 그 중에서도 nth와 unwrap_or_else 함수는 코드를 안전하고 예측 가능하게 만드는데 도움을 줍니다. nth 함수의 역할과 활용 nth 함수는 이터레이터에서 주어진 인덱스에 해당하는 요소를 가져오는 메서드입니다. Rust에서...
Rust에서는 문자열 리터럴과 String 타입 간의 사용법이 다소 혼동스러울 수 있습니다. 특히 패턴 매칭과 비교 연산에서 이 차이를 명확히 이해하는 것이 중요합니다. 일반적으로 if arg == "sum"과 같은 비교 연산은 문자열 리터럴과 String 타입 간의 비교를 허용합니다. 이는 Rust가 문자열 리터럴을 내부적으로 &str 타입...
Rust는 불변성(immutability)과 타입 변환에 엄격한 규칙을 가지고 있습니다. 코드에서 변수가 불변한(immutable) 상태로 선언되었더라도 해당 변수의 타입이 변경되는 것을 허용하지 않습니다. 이러한 특성은 Rust의 안전성과 예측 가능성을 보장하기 위한 것입니다. 예를 들어, 다음과 같은 코드가 있다고 가정해봅시다. let a: S...
vscode 설정 vscode 설정에서 check command라고 검색하면 Rust-analyzer의 Check command를 변경할 수 있다. 최초에 다음과 같이 check로 돼 있는데, 이것을 clippy로 변경하면 lint가 cargo check에서 cargo clippy로 변경된다. Rustrover 설정 Rustrover의...
Rust 설치하기 Rust를 설치하려면 여기에서 rustup 설치 스크립트를 다운로드하세요. 자신의 운영 체제에 맞는 것을 선택하여 실행하세요. Visual Studio가 설치되어 있지 않다면 여기에서 Visual Studio용 Build Tools를 설치하세요. Rust 및 Cargo 버전 확인하기 설치가 완료되면 터미널에서 다음 명령어를 ...
Install id=$(whoami) sudo apt install wget curl git sudo apt install zsh sudo chsh -s $id $(which zsh) oh-my-zsh 설치 sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/mast...
krew는 kubectl에서 사용할 수 있는 유요한 plugin을 설치할 수 있게 도와준다. kubectrl krew install $pugin_name과 같은 방법으로 plugin을 설치할 수 있다. package manager와 유사하게 다음과 같은 명령어들이 지원된다. kubectl krew list kubectl krew searc...
Overview GCP를 이용하면 간단히 Kuberenetes cluster를 구축하고 이를 통해 cloud를 쉽게 활요하는 것이 가능하다. 이하에서는 GCP를 사용할 수 있는 기본 환경 설정 및 GKE(google kubernetes engine)을 사용하는 방법에 대해 알아보도록 하겠다. 전반적인 과정은 다음과 같다. 우선 GCP를 CLI환경에...
인그레스란? 외부의 HTTP 요청에 대한 서비스 처리 규칙을 정의한 리소스” 인그레스의 주요 기능 라우팅 - URL 및 경로별 백엔드 서비스 분리 SSL/TLS 인증서 연동 인그레스와 인그레스 컨트롤러 - 애플리케이션 관리 효율을 위해 외부 접속에 관한 상세 규칙을 별도 인그레스 리소스로 분리 Traefik Traefik ing...
ipvsadm -Ln명령을 통해 Loadbalance에 할당된 IP가 pod까지 전달되는 라우팅 정보를 확인할 수 있다. Layer 4와 유사 (cf. ingress는 layer7 와 유사) Metallb에 Loadbalance service가 추가 192.168.56.151이 생성된 것을 확인 External-IP 확인 및 Pod 연결 ...
Diagram as Code https://diagrams.mingrammer.com/ 다이어그램을 사용하면 Python 코드로 클라우드 시스템 아키텍처를 그릴 수 있습니다. 코드형 다이어그램을 사용하면 모든 버전 관리 시스템에서 아키텍처 다이어그램 변경 사항을 추적할 수 있습니다. Example) GoDiagram https://god...
Architecture Overview of Harbor https://github.com/goharbor/website/raw/main/docs/img/architecture/architecture.png Harbor는 OCI 호환 클라우드 네이티브 아티팩트 레지스트리로 진화했습니다. 이제 OCI 이미지와 OCI 이미지 인덱스를 지원합니다. OC...
환경 metallb 0.12.1 설정 helm pull metallb/metallb --version=0.12.1 아래와 같이 Main PC에 VM3개를 띄워 cluster를 구축했다고 가정했을 때 graph TD MainPC --> VM1(192.168.56.101) MainPC --> VM2(192.168.56.102) ...
구축 환경 ubuntu20.04 python3.9: ansible 8.5를 위해 필수로 설치 ubuntu20.04에서 python3.9 설치 https://codechacha.com/ko/ubuntu-install-python39/ Ubuntu에서 virtualbox 설치 wget -O- https://www.virtualbox.o...
설치 https://github.com/openebs/charts kubectl apply -f https://raw.githubusercontent.com/openebs/charts/gh-pages/openebs-operator.yaml 테스트 pvc 생성 apiVersion: v1 kind: PersistentVolumeClaim meta...
헬름 차트를 로컬에서 받고 사용하는 my-values.yaml과 같이 두고 사용하는 경우 values.yaml을 어떻게 수정했는지 관리하기가 용이해진다. 이러한 이유로 헬름 차트를 로컬호스트에 내려받고 필요한 변수를 수정해 애플리케이션을 설치하는 방법이 권장된다. Helm 설치 https://github.com/helm/helm/releases ...