docker
-
쿠버네티스 서비스(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..
-
쿠버네티스 컨트롤러 : 복제세트(replica set)Kubernetes 2018. 6. 15. 09:00
복제세트(replicaset)는 복제컨트롤러의 다음 버전입니다. 복제 컨트롤러와 동일하게 동작하고 차이점은 집합 기반(set-based)의 셀렉터(selector)를 지원하는 것이 다릅니다. 복제 컨트롤러 같은 경우에는 셀렉터가 등호기반(equal-based)라서 라벨을 선택할때 같은지(=) 다른지(!=)만 확인합니다. 하지만 집합기반의 셀렉터는 in, notin, exists같은 연산자를 지원합니다. 또 다른 차이점은 복제컨트롤러는 kubectl rolling-update명령어를 사용가능하지만 복제세트는 rolling-update명령어를 사용할 수 없습니다. 롤링업데이트가 필요한경우에는 디플로이먼트(deployments)를 사용해야 합니다.