Kubernetes
-
쿠버네티스 인그레스(kubernetes ingress)Kubernetes 2018. 7. 18. 09:00
인그레스(ingress)는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙들의 모음입니다. 외부에서 접근가능한 URL을 사용할 수 있게 하고, 트래픽 로드밸런싱도 해주고, SSL 인증서 처리도 해주고, 도메인 기반으로 가상 호스팅을 제공하기도 합니다. 인그레스 자체는 이런 규칙들을 정의해둔 자원이고 이런 규칙들을 실제로 동작하게 해주는게 인그레스 컨트롤러(ingress controller)입니다. 클라우드 서비스를 사용하게 되면 별다른 설정없이 각 클라우드 서비스에서 자사의 로드밸런서 서비스들과 연동해서 인그레스를 사용할 수 있게 해줍니다. 클라우드 서비스를 사용하지 않고 직접 쿠버네티스 클러스터를 구축해서 사용하는 경우라면 인그레스 컨트롤러를 직접 인그레스와 연동해 주어야 합니..
-
쿠버네티스 서비스(kubernetes services) (2)Kubernetes 2018. 7. 13. 09:00
kube-proxy 소개 및 종류쿠버네티스에서 서비스를 만들었을 때 나오는 ClusterIP나 NodePort로 접근하게 해주는건 큐브프록시(kube-proxy)입니다. 큐브프록시는 쿠버네티스 클러스터의 각 노드마다 실행되고 있으면서 클러스터 내부 IP로 연결되기 바라는 요청을 적절한 곳으로 전달해 주는 역할을 합니다. 큐브프록시가 네트워크를 관리하는 방법은 userspace, iptables, ipvs 3가지가 있습니다. 초기에는 userspace가 기본 모드였고 현재(2018년 6월)에는 iptables가 기본모드입니다. 그리고 iptables에서 ipvs 모드로 넘어가려고 하고 있습니다. userspace 모드userspace모드로 설정하면 다음 그림같은 구조를 가지게 됩니다. 클라이언트에서 서비스..
-
쿠버네티스 서비스(kubernetes services) (1)Kubernetes 2018. 7. 10. 09:00
서비스 소개 쿠버네티스 클러스터안에 컨트롤러를 이용해서 포드를 띄웠다면 이제 그 포드들에 접근하는 방법에 대해 알아봐야할 때입니다. 포드는 컨트롤러에 의해 관리되기 때문에 한군데에 고정되서 떠 있지 않고, 클러스터내를 옮겨다니게 됩니다. 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터내의 포드 IP가 변경되기도 합니다. 이렇게 동적으로 변하는 포드들에 고정된 방법으로 접근하기 위해서 사용하게는 쿠버네티스의 서비스(service)입니다. 서비스를 사용하게 되면 포드가 클러스터내의 어디에 있는지에 상관없이 고정된 주소를 이용해서 접근이 가능해 집니다. 그리고 클러스터 외부에서 포드에 접근하는것도 서비스를 통해서 가능합니다. 나중에 인그레스(ingress)에 대해 알게 되면 인그레스를 통해서도 가능해 지..
-
쿠버네티스 컨트롤러 : 크론잡(CronJob)Kubernetes 2018. 6. 27. 09:00
크론잡은 잡을 시간 기준으로 관리하는 합니다. 지정된 시간에 한번만 잡을 실행하거나 주기적으로 지정된 시간동안 반복하면서 잡을 실행합니다. 시간을 지정하는 형식은 리눅스나 유닉스에서 많이 사용하는 크론 형식으로 지정합니다. 크론잡은 지정된 시간에 잡을 실행하는데 정확하게 한번에 하나의 잡만을 실행하는게 아니라, 2개의 잡이 실행될수도 있고 잡이 실행되지 않을수도 있습니다. startingDeadlineSeconds 옵션을 크게 설정하거나 아니면 따로 설정하지 않고 concurrencyPolicy 옵션을 Allow로 두면 잡은 최소한 한번(at least once)은 실행됩니다. 크론잡은 잡을 생성하는 역할만 하고 잡이 실행되고 나면 일반 잡과 마찬가지로 작동합니다. 다음 내용을 cronjob.yaml로 ..
-
쿠버네티스 컨트롤러 : 잡(Job)Kubernetes 2018. 6. 25. 09:00
잡 컨트롤러는 계속해서 실행되어야하는 성격이 아니라 실행되고나서 종료되어야하는 성격의 작업을 실행시킬때 사용하는 컨트롤러 입니다. 잡은 특정 개수 만큼의 포드가 성공적으로 완료되는걸 보장해 줍니다. 가장 간단한 경우로는 잡이 포드 하나를 실행하고 포드가 정상적으로 종료됐는지 확인하는 것입니다. 실행한 포드가 실패하거나 하드웨어 장애가 발생하거나 노드가 재부팅 되는등 문제가 발생하면 다시 포드를 실행합니다. 잡 하나가 포드를 여러개 실행하는 것도 가능합니다. 다음 예제 yaml을 job.yaml파일로 만들고 kubectl apply -f job.yaml로 실행해 봅니다. apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: cont..
-
쿠버네티스 컨트롤러 : 스테이트풀셋(StatefulSets)Kubernetes 2018. 6. 22. 09:00
앞서 살펴봤던 리플리카컨트롤러, 리플리케이션셋, 디플로이먼트는 모두 상태가 없는(stateless) 포드들을 관리하는 용도 였습니다. 스테이트풀셋(StatefulSets)은 단어의 의미 그대로 상태를 가지고 있는 포드들을 관리하는 컨트롤러 입니다. 스테이트풀셋을 사용하면 볼륨을 사용해서 특정 데이터를 기록해두고 그걸 포드가 재시작했을때도 유지할 수 있습니다. 여러개의 포드를 띄울때 포드 사이에 순서를 지정해서 지정된 순서대로 포드가 실행되게 할수도 있습니다. 이런식으로 어떠한 상태를 가지고 있어야 할때 사용하는게 스테이트풀 셋입니다. 스테이트풀셋을 실행할수 있는 예제 yaml은 다음과 같습니다. apiVersion: v1 kind: Service metadata: name: nginx labels: ap..
-
쿠버네티스 컨트롤러 : 데몬셋(DaemonSet)Kubernetes 2018. 6. 20. 09:00
데몬셋(daemonset)은 클러스터 전체에 포드를 띄울때 사용하는 컨트롤러 입니다. 데몬셋을 이용해서 포드를 실행하면 항상 그 포드가 클러스터 전체 노드에 떠 있게 됩니다. 데몬셋으로 포드를 실행하면 클러스터내에 새롭게 노드가 추가되었을때 자동으로 그 노드에 데몬셋으로 띄운 포드가 실행되게 됩니다. 반대로 노드가 클러스터에서 빠졌을때는 그 노드에 있던 포드는 그대로 사라지고 다른 곳으로 옮겨가서 실행되거나 하지는 않습니다. 그렇기 때문에 데몬셋은 보통 로그수집기를 실행하거나 노드를 모니터링 하는 모니터링용 데몬등 클러스터 전체에 항상 실행시켜 두어야 하는 포드를 실행하는데 사용합니다. 로그수집기를 실행하는 데몬셋 yaml 샘플은 다음과 같습니다. apiVersion: apps/v1 kind: Daemo..
-
쿠버네티스 컨트롤러 : 디플로이먼트(Deployments)Kubernetes 2018. 6. 18. 09:30
디플로이먼트는 쿠버네티스에서 일반적인 상태가 없는(stateless)앱을 배포할때 사용하는 가장 기본적인 컨트롤러입니다. 쿠버네티스가 처음 나왔을때는 이 역할을 복제 컨트롤러가 했지만 이제는 디플로이먼트가 기본적인 배포방법으로 사용되고 있습니다. 디플로이먼트는 복제세트를 관리하면서 앱의 배포를 보다 세밀하게 관리할 수 있게 합니다. 디플로이먼트라는 이름에서 알수 있듯이 배포에 대한 기능이 세분화되어 있습니다. 단순히 실행시켜야할 포드의 개수를 유지 하는 것만이 아니라 배포할때 롤링업데이트가 가능한 것은 물론, 배포도중 멈췄다가 다시 배포하는것도 가능합니다. 배포후 이전 버전으로 롤백도 할 수 있습니다. 다음 내용을 deployments-nginx.yaml이란 이름으로 저장하고 kubctl apply -f..