쿠버네티스 69

쿠버네티스 #24 - Pod 스케쥴링 #2 Affinity

쿠버네티스 고급 스케쥴링 기법#2 Affinity조대협 (http://bcho.tistory.com) AffinityTaint가 Pod가 배포되지 못하도록 하는 정책이라면, affinity는 Pod를 특정 Node에 배포되도록 하는 정책이다. affinity는 Node를 기준으로 하는 Node affinity와, 다른 Pod가 배포된 위치(node) 를 기준으로 하는 Pod affinity 두 가지가 있다. Node affinity Node affinity는 Pod가 특정 node로 배포되도록 하는 기능이다. 예전에 label에서 설명했던 node selector 도 node의 label과 pod의 selector label이 매칭되는 node에만 배포하도록 하기 때문에, 사실상 Node affinity..

쿠버네티스 #23 - Pod 스케쥴링 #1

쿠버네티스 고급 스케쥴링 기법#1 스케쥴링과 Taint&Toleration조대협 (http://bcho.tistory.com)쿠버네티스 스케쥴링쿠버네티스에서 Pod 를 생성 요청 했을때, Pod를 적정 node에 배치하는 것을 스케쥴링이라고 한다. Pod를 어느 node에 배치할것인가에 대해서는 생각 보다 많은 고려가 필요하다. 먼저 Pod가 생성하기 위한 충분한 리소스 (CPU와 메모리)가 남아 있어야 하고, 디스크 볼륨을 사용할 경우, attach하고자 하는 디스크 볼륨이 해당 node에서 접근이 가능해야 한다.또한 애플리케이션 특성에 따라서, Pod의 배포에 대해 배려가 필요한 경우도 있다. 예를 들어 MySQL을 HA 모드로 배포하기 위해서 마스터, 슬레이브 노드 각각을 배포하고자 할때, 마스터 ..

쿠버네티스용 Continuous Deployment 툴인 Skaffold #2

쿠버네티스를 위한 CD 툴, Skaffold #2조대협 (http://bcho.tistory.com)Skaffold 설정 파일의 구조Skaffold의 개념과 기본적인 사용법을 이해하였으면, 다음으로 Skaffold 설정 파일에 대해서 알아보도록 하자.Skaffold의 설정 파일은 아래와 같이 크게 두가지가 있다. Pipeline config 우리가 앞에서 살펴본 skaffold.yaml 파일이 파이프라인 설정 파일에 해당한다. 컨테이너 빌드 및 레지트리 등록, 테스트 및 컨테이너 배포 일련의 파이프라인에 대한 행동을 정의한다. Global config ~/.skaffold/config 파일에 저장되어 있는 정보로 skaffold의 기본 설정 정보를 정의한다. 예를 들어 디폴트 도커 레지스트리 경로등을 정..

쿠버네티스용 Continuous Deployment 툴인 Skaffold

쿠버네티스용 Continuous Deployment 툴인 Skaffold조대협 (http://bcho.tistory.com)What is skaffold?쿠버네티스 기반에서 개발을 하고 테스트를 하려면 일반적으로 다음과 같은 절차를 거쳐야 한다.소스 코드를 수정한 후, 수정한 코드를 컴파일 한 다음에컴파일한 소스 코드를 포함해서 Dockerfile을 이용해서 컨테이너로 패키징 한후에컨테이너를 레파지토리 새로운 버전 태그를 붙여서 업로드 하고쿠버네티스의 기존 Deployment나 Pod의 yaml 파일에 image 명을 바꾼후kubectl -f apply 를 이용해서 변경된 파일을 반영하고,다음 public IP가 있는 서비스의 경우에는 public IP로 접속하고, 아닌 경우에는 SSH 터널링을 이용해서..

쿠버네티스 패키지 매니저 Helm #2-5. Chart 배포 (Repository)

쿠버네티스 패키지 매니저 Helm#2-5 Helm Chart 배포조대협 (http://bcho.tistory.com) Helm 차트를 작성했으면, 다른 사용자들이 사용하기 쉽게 차트를 차트 리포지토리 (Chart repository)에 배포할 수 있다. Helm 파일 패키징파일을 배포하기 위해서는 먼저 차트 파일들을 *.tgz 파일 형태로 패키징해야 하는데, helm package 명령을 사용하면 된다. %helm package [차트 디렉토리] 형태로 사용하면 된다. 앞의 예제인 helloworld 차트를 패키징 하려면 아래와 같은 명령을 사용하면 된다.%helm package ./helloworldSuccessfully packaged chart and saved it to: /home/terrych..

쿠버네티스 패키지 매니저 Helm #2-4. Chart Hook

쿠버네티스 패키지 매니저 Helm #2-4 Helm Chart Hook 조대협 (http://bcho.tistory.com) Hook은 차트 설치나, 삭제와 같이 차트의 라이프 사이클 중에, 차크 개발자가 동작을 추가해줄 수 있도록 해주는 기능이다. mySQL을 차트로 설치한 후에, mySQL에 테이블을 생성하고 데이타를 로딩하거나, 차트로 Pod를 설치하기전에 Configmap이나 Secret 의 값을 세팅해놓는 것과 같은 작업을 예를 들 수 있다. 등을 들 수 있다. Hook 으로 실행되는 리소스는 따로 있는 것이 아니라, 기존의 쿠버네티스 리소스 (Job, Cron Job 등)에 metadata.annotations.”helm.sh/hook” 으로 태그를 달아주면, 이 리소스들은 Hook으로 정의되..

쿠버네티스 패키지 매니저 Helm #2-3. Charts (디렉토리 구조)

쿠버네티스 패키지 매니저 Helm #2-3. Charts (디렉토리 구조)조대협 (http://bcho.tistory.com)디렉토리 구조Helm 차트의 디렉토리 구조는 다음과 같다. 직접 아래와 같은 디렉토리 구조에 파일을 각각 생성해도 되지만, 기본 템플릿을 helm create [차트명] 으로 생성할 수 있다.아래는 %helm create mychart 명령으로 생성한 디렉토리의 구조이다. mychart/ Chart.yaml # A YAML file containing information about the chart LICENSE # OPTIONAL: A plain text file containing the license for the chart README.md # OPTIONAL: A hum..

쿠버네티스 패키지 매니저 Helm #2-2. Chart (버전과 릴리즈)

쿠버네티스 패키지 매니저 HELM #2-2. Chart 버전과 릴리즈 조대협 (http://bcho.tistory.com)업그레이드와 롤백Chart로 의해서 설치된 리소스들을 쿠버네티스에서 릴리즈라고 한다.예를 들어 같은 차트로 MySQL을 쿠버네티스 클러스터 내에 여러번 설치 할 수 있다. 각각 설치된 MySQL들을 릴리즈라고 하고, 릴리즈에 설정이 변경된 경우에, 차트를 수정해서 변경을 반영할 수 있다. 변경이 반영될때 마다 새로운 버전이 생성된다. 처음 helm install로 설치를 할때 --name 옵션으로 저장한 설치 이름이 릴리즈 명이 되고, 이 릴리즈를 업데이트 하고 싶으면 helm upgrade {Helm 릴리즈명} {차트 디렉토리} 를 실행하면, 해당 릴리즈를 업데이트하고, 새로운 버전..

쿠버네티스 패키지 매니저 Helm #2-1. Chart

쿠버네티스 패키지 매니저 HELM#2-1 .Chart조대협 http://bcho.tistory.comHelm Chart차트는 helm의 패키지 포맷으로, 하나의 애플리케이션을 설치하기 위한 파일들로 구성되어 있다. 예를 들어 tomcat을 설치하기 위한 쿠버네티스의 pod,service,deployment를 위한 YAML 파일등을 포함한다.템플릿과 밸류Helm 은 기본적으로 템플릿의 개념을 사용한다. 템플릿 파일을 만들어놓은 후에, 밸류 값을 채워 넣어서 쿠버네티스 리소스를 정의한 YAML 파일을 생성한다. 예제를 살펴보자Helm 은 기본적으로 템플릿의 개념을 사용한다. 템플릿 파일을 만들어놓은 후에, 밸류 값을 채워 넣어서 쿠버네티스 리소스를 정의한 YAML 파일을 생성한다. 예제를 살펴보자. 먼저 t..

쿠버네티스 패키지 매니저 Helm #1 - 개념, 설치

쿠버네티스 패키지 매니저 HELMHelm의 일반적인 개념Helm은 리눅스의 apt 툴이나, node.js의 npm과 같은 쿠버네티스용 패키지 매니지먼트 도구 이다. 일반적으로 하나의 소프트웨어를 쿠버네티스에 배포하려면, 간단하게 컨테이너만을 배포해서는 사용하기 어려운 경우가 많다. 외부로 IP를 노출 시키기 위해서 쿠버네티스 서비스를 배포해야 하고,쿠버네티스 pod를 관리할 deployment가 필요하며, 디스크 볼륨과 기타 정책등 부가 적인 부분을 추가로 배포해야 한다. 이미 네트워크나 디스크 설정이 완료된 상태에서 애플리케이션을 업데이트 하는 경우에는 쿠버네티스 deployment나 다른 배포 도구를 이용해도 되지만, 처음부터 모든 것을 설치해야 하는 반복적인 작업이 있는 경우에는 배포 도구로 불가능..