DevOps 46

쿠버네티스 Deployment를 통한 배포 및 롤백

쿠버네티스 롤백$ k rollout status deployment kubia## deployment 확인하여 error가 있는지 확인 $ k rollout undo deployment kubia## 이전 버젼으로 deploynment 배포(롤백) 특정버젼으로 롤백하기$ k rollout undo deployment kubia --to-revision=1## revision 숫자로 돌아감. 배포관련 옵션 설정spec: strategy: maxSurge: 1 ## 최대 신규 버젼 배포추가 가능건 maxUnavailable: 0 type: RollingUpdate ## rolling update에 있어서 새버젼을 먼저 배포하고 기존 배포건을 지울 것인지, 혹은 기존배포건을 지우고 새버젼을 배포할 것인지 설정..

쿠버네티스를 통한 지속적 배포 전략(rolling, blue green) 실습

쿠버네티스 배포 ## pod들이 배포되어있을때 어떻게 배포할까? ## green blue전략 : 똑같은 수의 pod을 추가로 만들어서 service가 바라보는 쪽을 변경하는 전략. 그러나 리소스가 제한적일 때는 적용 힘듦. ## Rolling update전략 : scale out하면서 기존의 version1 pod들을 제거하는 전략. zero down time, 리소스가 적더라도 적용 가능. 그러나 일정시간에는 고객에게 version1, version2가 혼재함. ※ update version마다 rc가 만들어져야함 중요!! 그러므로 name에 version명을 적어주는게 좋음. apiVersion: v1 kind: ReplicationController metadata: name: kubia-v1 sp..

쿠버네티스 배포를 하기 위한 준비 readinessProbe, livenessProbe

쿠버네티스의 배포 ## 쿠버네티스의 배포는 아래와 같이 진행됨## pod 삭제(kill) -> restart(redeploy) -> okReadiness probes## probe check, 응답이 없으면 end point로 보내지 않는다.(해당 pod정보를 유효하지 않는다고 판단한다.) ## liveness probe : 응답없으면 kill, 정상적인 image인지 판단## readiness probe : 대기, 기다리다가 사용자 connection가능하면 연결시켜줌 ## 보통 2개를 동시에 사용한다. 서로 보완하는 관계## tcp socket, http health 등 사용가능 nginx-ingress-controller.yml apiVersion: extensions/v1beta1 kind: De..

INGRESS를 사용한 쿠버네티스 네트워크 심화(sticky session, ssl connection)

Annotation## label(key=value)이랑 비슷하지만 annotation은 label로 적합하지 않은 값 컨트롤 가능## ingress controller에 추가할 기능들을 annotation으로 설정 하면 좋음 Ingress sticky Session## clientIP의 ip로 부터 호출이 오면 해당 호출을 받은 pod에만 지속적으로 가도록(설정하지 않으면 round robin으로 pod이 계속 바뀐다.## NGINX는 cookie만 가능 - cookie로 같은 컴퓨터로 부터 호출인지 판단함. apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/affinity: "co..

INGRESS를 사용한 쿠버네티스 네트워크 설치 및 연결

## nginx와 INGRESS를 사용하여 쿠버네티스 내부의 어떤 Node에 해당하는 Service로 보낼지 규칙을 정할 수 있다. 예를 들면 zuul 처럼 ## 기본적으로 host기반 그 뒤에 path 기반 ex) kubia.example.com/kubia -> service 1ex) kubia.example.com/foo -> service 2ex) foo.exmple.com -> service3 Namespace 생성하기namespace.yml apiVersion: v1 kind: Namespace metadata: name: ingress-nginx $ k create -f namespace.yml Namespace안에 서비스 생성하기default-backend.yaml apiVersion: ex..

쿠버네티스 service를 사용한 네트워크 설정

POD 배포하기 test-pod.yml apiVersion: v1 kind: ReplicationController metadata: name: kubia spec: replicas: 3 selector: app: kubia template: metadata: labels: app: kubia spec: containers: - name: kubia image: reg.cloud.com/kubia ports: - containerPort: 8080 $ k create -f test-pod.yml## test pod 실행 총 3개 실행 8080으로 열기Service 배포하기test-service.yml apiVersion: v1 kind: Service metadata: name: kubia spec: p..

쿠버네티스 service를 통한 네트워크 설정 개념정리

kubernetes에는 3개의 service라고 불리는 네트워크 객체가 있다. Load balancer > Node Port > ClusterIP 총 3개의 service 존재 네트워크 종류별 사용 연결 예제 stateless application으로 띄울 경우 ip는 항상 바뀌므로 이를 명심하여 사용. ClusterIP * 내부 POD끼리만 통신가능, 외부는 안됨 * 내부 ip를 알아내기 위해 internal DNS를 사용 Node Port * 외부 사용자 혹은 client와 통신하기 위함 * Node Port를 만들면자동으로 clusterIP가 생성됨. * 내부 clusterIP가 아닌 또 다른 클러스터 바깥의 Load balancer을 통해서 요청이 들어옴. 해당 요청이 다시 clusterIP의 내..

쿠버네티스 RC를 통한 POD생성 및 Probe를 통한 health check

yml파일을 사용해서 쿠버네티스에서 pod만들기 multiContainer.yml apiVersion: v1 kind: Pod metadata: name: multi labels: app: wordpress spec: containers: - name: wordpress image: reg.cloud.com/wordpress ports: - containerPort: 80 - containerPort: 443 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1 - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD value: password - name: db image: reg.cloud.co..

젠킨스 파이프라인 문법(Pipeline Syntax) 총정리

젠킨스 파이프라인을 구성하기 위해서는 파이프라인 문법을 작성하는게 중요하다. 단순히 groovy에 대한 문법 뿐만아니라 jenkins에서 사용가능한 준비된 function들(혹은 block들)을 잘 익히고 사용하는 것이 매우 중요하다!(ex. timeout) [개발이야기/Jenkins] - Jenkins Pipeline 개요 및 파이프라인 스크립트 예제 에서 간단한 파이프라인에 대한 개요를 확인 할 수 있다. 파이프라인 선언 파이프라인 선언은 간단하게 아래와 같은 block으로 이루어 진다. 모든 파이프라인은 반드시 pipeline block으로 감싸져야 한다. 파이프라인 안쪽의 statement, expression은 groovy 언어를 따른다. pipeline { /* insert Declarativ..

DevOps/CI & CD 2018.03.12
Jenkins Pipeline 개요 및 파이프라인 스크립트 예제

젠킨스 파이프라인 시작하기 젠킨스파이프라인은 CD(Continuous delivery)를 하기에 적합하다. Pipeline DSL을 통해 다양한(간단한 파이프라인 부터 복잡한 파이프라인 까지) 파이프라인을 "코드로" 개발할 수 있다. 사전작업 젠킨스 파이프라인을 사용하려면 아래의 준비물이 필요함 Jenkins 2.x or later Pipeline plugin(https://plugins.jenkins.io/workflow-aggregator) 파이프라인을 설치하고 관리하는 방법 보러가기 -> 젠킨스 파이프라인 설치 및 관리 파이프라인 정의하기 젠킨스 파이프라인은 groovy syntex로 제한적으로 스크립트 언어로 수행가능하다. 그러므로 groovy 언어를 학습하는 것은 파이프라인을 구성하는데 유용하다..

DevOps/CI & CD 2018.03.09
젠킨스 오류 pending - Waiting for next available executor

젠킨스, Jenkins젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합(continuous integration) 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다. MIT 라이선스를 따른다.(출처 - 위키피디아) 젠킨스 오류 pending - Waiting for next available executor 젠킨스를 실행시키려고 Build Now나 기타버튼을 누르게 되면 실제로 실행이 되지 않고 위와 같은 메시지가 뜨게 된다. 해당 메시지는 해당 젠킨스가 실행시킬수 있는 execute 갯수가 넘었을때 queue에 들어가서 기다리고 있을 때 보여주는..

DevOps/CI & CD 2017.07.06
Gradle build tool 4.0 가이드

About Gradle - Gradle DocWe would like to introduce Gradle to you, a build system that we think is a quantum leap for build technology in the Java (JVM) world. Gradle provides: Ant처럼 유연하고 관용적이며 확장성 있는 build tool타 빌드프로그램으로 수운 변경강력한 multi 프로젝트 빌드강력한 dependency managementMaven 혹은 Ivy repository 사용가능Groovy(그루비 위키피디아) build script Gradle command-line - Gradle Doc커맨드라인을 사용한 gradle사용법을 알아보자 Executing m..