기본 콘텐츠로 건너뛰기

[Kubernetes - Operator] KUDO 정리 (Kubernetes Universal Declarative Operator - Kudobuilder)

What is KUDO (Kubernetes Universal Declarative Operator - Kudobuilder) 정의 KUDO는 Operator를 위한 Oeprator 선언적 접근 방식을 제공해 애플리케이션의 전체 라이프사이클을 커버하는 범용 오퍼레이터 대부분의 경우는 YAML 만을 사용할 수 있는 정도로 쉽게 Kubernetes Operator를 만들 수 있는 툴 킷 + 런타임 라이프사이클 Operator들 간의 공통화 및 재 사용성 복잡한 상태 저장 애플리케이션에 최적화 Operator 구축시 개발자의 생산성 향상 서비스 운영시 운영자의 생산성 향상 기본 제공되는 리파지토리의 여러 Operator들 중 에서 고르거나 쉽게 커스터마이징이 가능하다. 표준화된 방식으로 Operatators가 동작할 수 있도록 한다. KUDO는 범용적이고 선언적인 접근 방식 (UD - Universal and Declarative) 을 취하기 때문에 어떠한 코드를 사용하지 않고 오퍼레이터를 구성할 수 있도록 지원한다. Developer 측면 개념적으로 "runbooks"와 유사하게 Kubernetes 객체들과 "Plans"를 이용해서 라이프사이클 운영 시퀀스에 대한 추상화 제공 라이프사이클 작업들 간의 공통성과 재 사용성 작업들 간의 코드 중복과 재사용 가능한 Boilerplate 감소 사용자 환경에 맞춤화를 위한 기본 Operator의 "Flavor"를 생성하는 매커님즘 제공 소프트웨어와 Day 2 운영 모범사례를 제공할 수 있는 도구들을 ISV들에 제공 Kubernetes 리소스의 TDD 활성화를 위한 테스트 툴 제공 User 측면 워크로드들을 배포하고, 관리하고 디버깅할 수 있는 kubectl kudo 플러그인 제공 KUDO는 작은 Kubernetes로 kubectl 사용 지원 - KUDO is Kubernets! (단, KUDO 역시 CRD로 정의

[Kubernetes - Operator] KUDO CLI 명령어 정리

How to use KUDO CLI Commands KUDO 및 Package 관리를 위한 KUDO CLI를 정리한다. Global Flags Global Flags : 전체 명령들에 사용할 수 있는 전역 옵션들 --home <path> : Kudo 설정이 있는 Home Directory 지정 (Default: "~/.kudo") --kubeconfig <path> : Kubernetes 설정이 있는 Home Directory 지정 (Default: "~/.kube/config") -n, --namespace <namespace> : 객체를 처리할 대상 Namespace (Default: "Default") --request-timeout <seconds> : 요청 시간 제한을 초단위로 지정 (Default: 0 - 무제한) -v <line count>, --v : 상세 로그 수준을 라인단위로 지정 --validate-install : 명령을 실행하기 전에 KUDO 설치 여부 검증 (Default: true) Semi-Global Flags : 전체 명령들은 아니지만 많은 명령들에 사용할 수 있는 옵션들 --help : 모든 명령에 지정 가능하며, 해당 명령의 상세 정보 출력 -o, --output : 많은 명령들이 지원하며, "Yaml" 또는 "Json" 방식으로 출력 가능 --dry-run : 실제 실행하지는 않고, 점검과 준비만 처리하며, --output 옵션으로 대상 리소스에 대한 출력물 생성 init KUDO Server와 Client 컴포넌트의 초기화 및 업그레이드 처리 kubectl kudo init [options] 옵션들은 설치 및 업그레이드에 대한 변경을 위한 것으로 주로 Server를 대상으로 하며 저장되지 않기 때문에 매번 제공해야

[Container] Multi-Container Design Patterns 간략 비교

Multi-Container Design Patterns 정리 지난 몇 년동안 컨테이너 기술은 코드를 패키징하고 배포하는 대중적인 기술로 발전했다. 여기서도 컨테이너를 통해 분산 응용 프로그램을 구축 하는 방법의 변화에 대해 주목할 필요가 있다. 이번에는 마아크로 서비스 아키텍처에서 컨테이너늘 다루는데 사용할 수 있는 디자인 패턴 3가지에 대해서 정리해 본다. Sidecar Pattern 하나의 컨테이너는 하나의 책임만 가지고 있어야 한다. 예를 들면 웹 서버와 로그 수집기가 같이 존재하는 컨테이너가 있다고 가정했을 때 다음과 같은 고민을 하게 된다. 웹 서버를 수정할 때 로그 수집기의 종속성을 고려해야 한다. 직접적인 관련은 없더라도 오류가 발생했을 때 어디서 문제가 발생했는지 빠르게 파악하지 못할 수도 있다. 위의 같이 상관이 없음에도 고려할 부분이 생길 수 있기 때문에 서로 다른 역할을 하는 서비스는 각각의 컨테이너로 분리해 주는 것이 좋으며, 이런 상황에서 활용할 수 있는 패턴이 Sidecar Pattern 이다. Pod 내의 메인 컨테이너 (위의 그림에서는 Web Server Container)를 확장하고 향상 및 개선하는 역할을 컨테이너를 Sidecar Container 라고 하고, 이렇게 적용하는 패턴을 Sidecar Pattern 이라고 한다. 서로 다른 컨테이너이며 단지 Pod내에 묶여 있는 것이기 때문에 서로 간에 종속성이나 간섭의 문제가 생기지 않는다. 당연히 Web Server를 교체하더라도 로그 수집기 컨테이너는 변경이 없고 특정 기능을 활용하도록 재 사용성이 증가하는 효과를 가져오게 된다. Ambassador Pattern 메인 컨테이너의 네트워크 연결을 전담하는 프록시 컨테이너를 두는 패턴이다. Sidecar Pattern 이 이미 완성되고 동작하는 애플리케이션에 기능 추가를 위한 변경이 없이 보조 기능으로 추가해서 활용하는 측면을 강조한 것이라면 Ambassador Pattern은 개별 기능만을 중점

[Golang] Golang으로 MongoDB 연결하기

How to use MongoDB with Golang 이 문서에서는 아주 간단하게 Docker-compose를 이용해서 MongoDB를 구동하고 Golang을 통해서 연결하는 부분에 대해서 정리하고 있습니다. 환경은 맥북, VSCode, Golang, Docker 등이 이미 설치되어 있는 것을 기준으로 합니다. 간단한 MongoDB 정리 RDBMS와의 비교 RDBMS MongoDB Database Database Table Collection Tuple/Row Document Column Key/Field Table Join Embedded Documents Primary Key Primary Key (_id) 특징과 장/단점 주요 특징 들은 다음과 같다. Document-Oriented Storage : Database > Collections > Documents 구조로 Document는 key-value 형태의 BSON (Binary JSON) 으로 되어 있다. Full Index Support : 다양한 인덱싱을 제공한다. Single Field Indexes : 기본적인 인덱스 타입 Compound Indexes : RDBMS의 복합 인덱스 타입 Multikey Indexes : Array에 매칭되는 값이 하나라도 있으면 인덱스에 추가하는 인덱스 타입 Geospatial Indexes and Queries : 위치기반 인덱스와 쿼리 지원 Text Indexes : String에 대한 인덱스 지원 Hashed Indexes : Btree 인덱스가 아닌 Hash 타입의 인덱스도 지원 Replication & High Availablity : 간단한 설정을 통해서 데이터 복제를 지원하므로 가용성이 향상된다. Auto-Sharding : 자동으로 데이터를 분산해서 저장하며, 하나의 컬랙션처럼 사용할 수 있도록 수평

[Yarn] Yarn 과 NPM 비교

Yarn vs NPM 비교 node + npm이 기본이었는데, 몇 가지 npm의 문제점을 해결하기 위해 yarn 이 발표되었다. 기존 NPM은 배포가 쉽고, 종속성을 쉽게 해결할 수 있지만 패키지가 중복으로 설치 될 수 있고, 파일이 많은 경우에 문제가 될 수 있다. 페이스북에서는 이런 문제점들을 해결하기 위해서 yarn을 발표했다. npm3 보다 패키지 설치 속도가 빠르다. json 포맷을 사용하지 않는다. offline 모드가 가능하다. YARN 설치 설치페이지 를 통해서 직접 설치가 가능하다. 맥북이라면 brew를 이용해서 설치가 가능하다. npm을 통해서도 설치가 가능하다. 터미널에서의 설치는 다음의 명령으로 처리하면 된다. $ npm install -g yarn # npm 사용 $ brew install yarn # 맥북 명령 비교 npm 명령 yarn 명령 설명 npm init yarn init 프로젝트 초기화 npm install yarn or yarn install package.json 의 패키지 설치 npm install --save [package name] yarn add [package name ] 패키지를 프로젝트 의존성 수준으로 추가 (dependencies) npm install --save-dev [package name] yarn add -D[or --dev] [package name] 패키지를 프로젝트 개발 의존성 수준으로 추가 (Devdependencies) npm install --global [package name] yarn global add [package name] 패키지를 전역 수준으로 추가 npm update --save yarn upgrade 프로젝트의 패키지 업데이트 npm run [script name] yarn [script name] package.json의 scripts에 지정된 명령

[OpenCensus - Trace] Opencensus를 이용한 gRPC Trace 와 Metrics 처리하기

Opencensus를 이용한 gRPC Global Tracing Overview Opencensus를 사용해서 시스템의 추적 및 매트릭을 수집하고 선택한 백엔드로 내보내 분산 시스템에 대한 관찰성을 제공할 수 있다. 간단하게 gRPC 상에서 추적을 검증하기 위한 용도이므로 단순히 바이트를 포함하는 페이로드를 받아서 대문자 처리를 하는 서비스를 대상으로 검토해 보도록 한다. Requirements go : Download and install - The Go Programming Language 를 통해 설치 gRPC $ go get -u google.golang.org/grpc Protocol Buffer v3 : Quick start – gRPC 문서의 내용에 따라서 Releases · protocolbuffers/protobuf · GitHub 에서 바이너리를 받을 수 있다. # linux apt or apt-get $ apt install -y protobuf-compiler $ protoc --verion # 버전 3+ 확인 # Mac Homebrew $ brew install protobuf $ protoc --version # 버전 3+ 확인 Go 용 protoc 플러그인 $ go get -u github.com/golang/protobuf/protoc-gen-go Creating our gRPC Service 추적을 활성화하기 위해서는 다음과 같은 패키지가 필요하다. Opencensus gRPC 지원 : go.opencensus.io/plugin/ocgrpc Opencensus Trace 지원 : go.opencensus.io/trace 매트릭을 활성화하기 위해서는 다음과 같은 패키지가 필요하다. 서버 핸들러 : go.opencensus.io/plugin/ocgrpc.SserverHandler 클라이언트 핸들러 : go.opencensus.io/plugin/ocgrpc.ClientHandler 서

[Opencensus - Trace] Opencensus를 활용하는 Trace 정리

Trace 정리 Tracing (이하 트레이싱) 추적은 응용 프로그램을 구성하는 다른 서비스에 의해 처리되는 단일 사용자 요청의 진행과정을 추적하는 것이다. 진행 과정의 각 작업은 Span 으로 부르며, 각 스팬에는 단계에 소요된 시간 (대기 시간), 상태, 시간 이벤트, 속성, 링크를 포함하여 작업을 나타낼 수 있는 메타 데이터가 포함된다. 이 추적 정보를 활용해서 애플리케이션의 오류 및 대기 시간 문제를 디버깅 할 수 있다. Trace (이하 추적) 추적은 스팬 트리로 구성된다. 즉, 작업의 흐름 경로를 보여주는 관찰 가능한 신호의 집합이다. 추적 자체는 고유한 16바이트 시퀀스로 표현되는 TraceID 로 식별된다. 트레이싱을 통해서 수집된 추적 정보는 다음과 같이 표현된다. 위의 그림에서와 같이 여러 단계의 작업(스팬)이 호출된 것을 확인할 수 있다. auth: 사용자 인증 여부 검사 cache.Get: 캐시 검증 mysql.Query: 캐시에 존재하지 않아 DB 조회 cache.Put: DB 조회결과 캐시 처리 Exporting (이하 내보내기) 수집된 추적 정보를 다양한 분석을 위해서 여러 가지 백엔드들에 대한 내보내기를 구성해서 처리할 수 있다. 다양한 내보내기 목록등은 Opencensus 를 참고하면 된다. Span (이하 스팬) 스팬은 추적의 단일 작업을 나타낸다. 주로 HTTP 요청, RPC (원격 프로시저 호출: Remote Procedure Call), 데이터베이스 쿼리 또는 코드가 사용자 코드에서 사용하는 경로 등을 나타낸다. 스팬은 트리 구조를 이루기 때문에 상위 스팬의 존재여부에 따라서 상위 스팬과 하위 스팬으로 나뉜다. 각 스팬은 SpanID 로 식별된다. SpanID 와 옵션 바이트들을 합쳐서 Span Context 라고 한다. 동일 프로세스 내에서 스팬 컨텍스트는 컨텍스트 객체로 전달된다. 프로세스 경계를 넘어서면 프로토콜 헤더로 직렬화 된다. 따라서 수신 측은 스팬 컨텍스트를 읽고 하

[macOS - SSH] macOS에서 SSH를 이용해서 Ubuntu 서버에 접속하기

Access to remote server using ssh key with iterm2 환경 Mac OS ssh-keygen (SSH에 사용할 키 발급) ssh-copy-id (발급된 공개키를 서버에 전송) 원격 서버 (Ubuntu 16.04) 및 사용자 서버에 사용자가 추가되어 있다고 가정한다. 사용자 추가에 대한 부분은 많은 자료들이 존재하므로 참고하도록 한다. ssh-copy-id 설치 ssh-copy-id 는 로컬에서 발급된 공개키를 서버로 전송할 때 사용하는 패키지다. $ brew install ssh-copy-id SSH Key 발급 ~/.ssh 폴더를 기준으로 한다. # ssh-keygen [-t] [rsa] [-b] [2048] # -t : dsa, ecdsa, ed25519, rsa, rsa1 중에 어떤 암호화 알고리즘을 선택할지 지정 (기본 값, rsa) # -b : key를 생성할 때 bit 수 지정 (기본 값, 2048) $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/<현재 사용자>/.ssh/id_rsa): <<< 여기에 저장될 파일 경로 또는 파일명 입력 Enter passphrase (empty for no passphrase): <<< 비밀번호로 사용할 값 Enter same passphrase again: <<< 다시 입력 Your identification has been saved in <파일명> Your public key has been saved in <파일명>.pub. 키 파일에 대한 권한 문제 ssh-key을 통해서 처리한 경우는 문제가 되지 않을 수 있지만 수동으로 처리한 경우는 다음과 같이 파일 권한을 설정해 줘야 한다. 공개 키 : 0644 (-rw-r--r--) 개인 키

[Kubernetes] Kubernetes Dashboard 설치 및 NodePort 접근 설정

How to install and access Kubernetes Dashboard 대시보드는 웹 기반 Kubernetes 사용자 인터페이스로 컨테이너화된 애플리케이션을 배포하고 문제를 해결하고, 클러스터 리소스들을 관리한다. 또한 클러스터의 쿠버네티스 리소스 상태 및 발생했을 수 있는 오류에 대한 정보도 확인할 수 있다. Deployments StatefulSets DaemonSets Jobs Services Ingress Deployments Scaling Rolling Update Pod Management Persistent Volume / Claim 배포 및 액세스 기본적으로 쿠버네티스에 포함되어있지 않기 때문에 별도 배포해 줘야 한다. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding