클라우드/Kubernetes(쿠버네티스)
[kubernetes] 파드 스케줄링
쿠버네티스에서는 파드를 어떤 노드에 실행할 것인지에 관한 다양한 옵션이 있다. 이 옵션을 조합해서 사용자가 원하는 구조대로 클러스터 안에 파드들을 배치할 수 잇다. 특정 파드들을 노드 하나에 모아두거나 특정 IP대역의 노드들에서만 실행할 수도 있고, 반대로도 설정할 수 있다. 같은 기능이 있는 파드들이 노드 하나에 몰려있지 않게 골고루 분산해서 실행할 수도 있다. 관리가 필요한 노드가 있을 때 해당 노드에 있는 파드들을 다른 노드로 옮길 수도 있다. 1. 노드 셀렉터 가장 간단한 스케줄링 옵션으로는 파드의.spec 필드에 설정할 수 있는 노드셀렉터가 있다. 용어 그대로 노드를 선택하는 기능 파드가 클러스터 안 어떤 노드에서 실행될지를 키-값 쌍으로 설정한다. kubectl get nodes --show-..
[kubernetes] 사용자 권한 (keycloak)
kubernetes 권한관리 ABAC (Attribute based access control) 속성 기반 권한 관리 사용할 수 있는 속성 : 사용자, 그룹, 요청 동사 권한 설정 내용을 파일로 관리하므로 권한을 변경하려면 직접 마스터에 접속해서 파일을 변경할 수 kube-apiserver 컴포넌트를 재시작해야 하므로 관리하기 번거롭다. RBAC (Role based access control) 역할 기반 권한 관리 대부분의 권한 관리 시스템에서 많이 사용 사용자와 역할을 별개로 선언한 후 두 가지를 조합해서 사용자에게 권한을 부여한다. ABAC처럼 마스터에 접근할 필요 없이 kubelet이나 API를 이용해 관리할 수 있다. 최근에는 ABAC는 거의 사용하지 않고 RBAC를 이용해 권한을 관리한다. R..
[kubernetes] Jenkins vs Jenkins X
Jenkins 개념 Java Runtime위에서 동작하는 자동화 서버 다양한 플러그인을 종합해서 CI/CD Pipeline을 만들어서 자동화 작업 개발 시 지속적으로 통합 서비스를 제공하는 CI툴. 젠킨스와 같은 CI툴이 등장하기 전에는 개발자들이 당일 작성한 소스들의 커밋이 모드 끝난 심야 시간대에 이러한 빌드가 타이머에 의해 집중적으로 진행되었는데, 이를 nightly-build라고 한다. 하지만 젠킨스는 정기적인 빌드에서 한발 나아가 Git과 같은 버전관리시스템과 연동하여 소스의 커밋을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가 작동되도록 설정할 수 있다. Jenkins X 개념 Question 왜 Jenkins는 잘나가는 Jenkins 툴을 두고 새로운 툴을 개발하였을까? Answer 클라..
[kubernetes] Tekton
Tekton 이란? Tekton은 지속적 통합 및 배포(CI/CD) 시스템을 만들 수 있는 강력하면서도 유연한 Kubernetes 기반 오픈소스 프레임워크 쿠버네티스의 CRD(Custom Resource Definition)를 활용하여 쿠버네티스 제어판에서 파이프라인 태스크를 실행. 또한 Tekton은 Jenkins, Jenkins X, Skaffold, Knative와 같은 기존 CI/CD 툴과 효과적으로 연동 재사용 tekton의 모든 task들은 다른 pipeline과 완전히 독립적으로 사용할 수 있다. 모듈화가 잘 돼있어 여러 pipeline에서 필요한 task를 갖다 쓸 수 있다. 표준화 Tekton은 Kubernetes의 Custom Resource를 사용해 정의된다. 기능의 확장성 Tekto..
[쿠버네티스] Helm
helm 이란? package managing on your kubernetes clusternode.js 의 npm, python의 pip 과 비슷한 형태로 쿠버네티스 패키지 배포를 가능하게 하는 toolk8s 리소스들을 간편하게 관리할 수 있도록 도와주는 툴chart 라는 packaging format을 사용한다.쿠버네티스 클러스터에 애플리케이션을 쉽게 설치, 업그레이드, 롤백 및 삭제할 수 있다.쿠버네티스를 사용하다보면 결국 수많은 템플릿을 관리해야한다. 헬름은 이런 템플릿 파일들의 집합(차트라고 함)을 관리하는 쿠버네티스 패키지 매니저 도구이다.쿠버네티스의 하위 프로젝트로 시작되었다가 2018년 6월 CNCF의 정식 프로젝트로 승격되었다. helm 구조helm create 을 통해서 Chart의..
[쿠버네티스] 시크릿
시크릿이란? 비밀번호, OAuth 토큰, SSH키 같은 민감한 정보들을 저장하는 용도로 사용한다. 컨테이너 안에 저장하지 않고 별도로 보관했다가 실제 파드를 실행할 때의 템플릿으로 컨테이너에 제공한다. 시크릿 만들기 내장 시크릿 쿠버네티스 클러스터 안에서 쿠버네티스 API에 접근할 때 사용 클러스터 안에서 사용하는 ServiceAccount라는 계정을 생성하면 자동으로 관련 시크릿을 만든다. 이 시크릿으로 ServiceAccount가 사용 권한을 갖는 API에 저근할 수 있다. 사용자 정의 시크릿 사용자가 만든 시크릿 kubeclt create secret 명령으로 만들 수 있고 다른 자원처럼 템플릿으로 만들 수도 있다. 시크릿 사용하기 시크릿은 파드의 환경 변수나 볼륨을 이용한 파일 형식으로 사용할 수..
[쿠버네티스] 컨피그맵
컨피그맵이란? 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능. 클라우드 네이티브 아키텍처에서 컨테이너는 변하지 않는 자원이어야 한다. 개발할 때 사용하는 컨테이너와 상용 서비스에서 사용하는 컨테이너가 같아야 한다는 것이다. 그래야만 개발과 서비스 사이의 환경 차이에서 오는 잠재적 문제를 없앨 수 있다. 그런데 개발용과 상용 서비스에서는 서로 다른 설정이 필요할 때가 많다. 사용하는 데이터베이스가 다를 수도 있고, 실제 개발할 때는 디버그 모드로 로그를 출력하는데, 서비스용에서는 시스템 정보를 나타내는 모드로 로그를 출력해야 하는 등의 차이가 있다. 이렇게 다른 설정으로 컨테이너를 실행해야 할 때 사용하는 것이 컨피그맵이다. 컨피그맵 사용하기 data의 하위 필드로 실제 사용하려는 환경 ..
[쿠버네티스] 레이블과 애너테이션
레이블, 애너테이션 이란? 레이블과 애너테이션은 쿠버네티스에서 자원들의 메타데이터를 관리하는 데 사용한다. 레이블은 셀렉터와 함께 특정 레이블이 있는 자원들을 선택할 때 주로 사용한다. 애너테이션은 주석 성격의 메타데이터를 기록하는 데 사용한다. 레이블은 쿠버네티스 클러스터 안에서 사용자가 오브젝트를 생성할 때 해당 오브젝트를 구분하는 용도이다. 사용자가 임의로 원하는 값을 지정해서 사용한다. 애너테이션은 레이블처럼 사용자가 원하는 값을 설정하기보다 쿠버네티스 시스템에서 필요한 정보들을 표시하는 데 사용한다. 레이블 키-값 쌍으로 구성 사용자가 클러스터 안에서 오브젝트를 만들 때 메타데이터로 설정할 수 있다. 레이블이 생성된 다음에도 언제든지 수정할 수 있다. 레이블의 키는 쿠버네티스 안에서 컨트롤러들이..