Cloud Architect 꿈꾸기

Cloud Computing/Kubernetes 18

Kubernetes - Replication Controller, ReplicaSet

Kubernetes의 Controller와 ReplicaSet에 대해 살펴보겠다. 먼저 Controller는 다음과 같은 기능을 수행할 수 있는데, Auto Healing Controller가 장애를 즉각적으로 인지하고 다른 노드에 Pod를 만들어준다. Auto Scaling Pod가 죽지 않도록 부하분산을 시키는 역할을 수행해준다. Software Update 여러 Pod에 대한 버전을 업그레이드 해야할 경우, Controller를 통해 한번에 업그레이드가 가능하고, 도중에 문제가 생기면 롤백이 가능하도록 지원해준다. Job 일시적인 작업을 해야할 경우, Controller가 필요한 순간에만 Pod를 만들어 해당 작업을 이행하고 삭제시킨다. 필요한 순간에만 자원이 사용되고 작업 후에는 반환되기 때문에 ..

Kubernetes Object - Namespace, ResourceQuota, LimitRange

Namespace, ResourceQuota, LimitRange 쿠버네티스 클러스터에는 일반적으로 Memory, CPU가 존재하고, 클러스터 내에는 여러 Namespace를 만들 수 있다. Namespace안에는 여러 파드를 만들 수 있으며, 각 Pod는 클러스터 자원을 공유해서 사용한다. 만약 한 Pod가 클러스터 자원을 모두 사용하면, 다른 Pod는 사용할 수 있는 자원이 없어서 문제가 발생하게 되는데, 이러한 문제를 해결하기 위해 resourceQuota를 Namespace마다 최대 하나씩 설정하여, Pod의 사용가능한 자원사용량을 조절할 수 있다. 또, 한 Pod가 자원사용량을 너무 크게 설정해버리면 다른 Pod들이 해당 Namespace에 더이상 들어오지 못하기 때문에 limitRange를 설..

Kubernetes Object - ConfigMap, Secret

이번 포스팅에서는 Pod에 환경 변수를 설정해주기 위한 ConfigMap, Secret 두 가지의 오브젝트에 대해 알아보겠다. 개발 환경과 상용 환경에 따라서는 보안접근, 접근 유저, 키 등 세팅값이 변경되기 마련인데, 컨테이너 내부 서비스에 설정된 값을 각각의 이미지로 별도 관리하기에는 필요치 않은 용량 소모가 발생하게 된다. 이를 방지하기 위해 환경에 따라 변하는 값들을 외부에 결정할 수 있게 도와주기 위한 기능으로써 ConfigMap과 Secret을 사용하곤 한다. ConfigMap과 Secret을 만들 때 데이터를 저장하는 방법으로는 상수를 저장하는 방법 파일을 환경 변수에 저장하는 방법 이 있다. 1. 상수를 저장하는 방법 ConfigMap은 Key:Value로 구성되어있다. 이러한 구성으로 상..

Kubernetes Object - Volume

Kubernetes의 Volume 중 세 가지 Volume에 대해 알아보겠다. emptyDir hostPath PVC / PV 1. emptyDir emptyDir은 컨테이너들끼리 데이터를 공유하기 위해 사용하는 Volume이다. Volume이 생성될 때는 기본적으로 Volume 내부가 비어있다. emptyDir은 Pod 안에 생성되기 때문에 Pod에 문제가 발생해서 재생성되면 Volume이 사라져버리게 된다. 따라서 일시적인 사용목적의 데이터만 저장하는 것을 권장한다. 두 가지의 컨테이너를 같은 Volume에 마운트 시키면 같은 Volume을 공유하기 때문에 데이터를 공유할 수 있다. 2. hostPath hostPath는 emptyDir과 다르게 Node 내부에 Volume을 생성한다. Volume의..

Kubernetes Object - Service

Service Kubernetes에 존재하는 세 가지 타입의 서비스를 알아보겠다. ClusterIP NodePort Load Balancer 1. ClusterIP 서비스는 기본적으로 자신의 ClusterIP를 가지고 있다. Pod에 서비스를 연결시켜두면 Service IP를 통해 Pod에 접근이 가능하다. Pod에도 IP가 할당되어 있는데 Service IP를 이용해 접근하는 이유는, 앞선 Pod에서도 설명했듯이, Pod는 쿠버네티스에서 시스템, 성능 장애로 인해 언제든지 죽을 수 있으며, 재생성될 떄 IP가 변하는 휘발성 IP를 가지고 있다. 반면, Cluster IP로 할당된 IP는 변하지 않기 때문에 Service IP로 접근하게 되면 항상 연결된 Pod에 접근할 수 있다. 서비스를 만들 때 타입..

Kubernetes Object - Pod, Label, Node Schedule

1. Pod Pod 안에는 하나의 독립적인 서비스를 구동할 수 있는 컨테이너들이 존재한다. 컨테이너는 각 서비스가 연결될 수 있는 포트를 가지고 있는데, 한 컨테이너에서 여러개의 포트를 가질 수는 있지만, 한 Pod 안에서 컨테이너끼리는 포트가 중복될 수 없다. Pod가 생성될 때는 고유의 IP 주소가 할당 되는데, 만약 컨트롤러를 통해 Pod가 죽은 후 다시 생성되면 IP 주소가 변경된다. (휘발성) Pod는 쿠버네티스 클러스터 내에서만 주소에 접근이 가능하며 외부에서는 접근이 불가능하다. 2. Label Label은 Pod 뿐만 아니라 모든 오브젝트에서 사용될 수 있는데, 사용 목적에 따라 오브젝트를 분류하고, 분류된 오브젝트들만 따로 골라 연결하기 위해 존재하는 태깅이다. Label은 Key:Val..

Kubernetes 시작하기

Kubernetes 쿠버네티스는 여러 컨테이너들을 하나의 Pod으로 묶어서 배포해줄 수 있다. 쿠버네티스의 자원 관리 기능으로는 Auto Scaling, Auto Healing, Deployment 등이 존재하는데, 이는 추후 포스팅에서 자세하게 다룰 계획이다. 쿠버네티스는 서버 한대를 Master로 쓰고 다른 서버들을 Node로 사용하여, 마스터에 노드들을 연결함. 이를 통틀어서 Kubernetes Cluster라고 한다. 클러스터 자원을 늘리기 위해서는 Node를 추가하여 자원을 확장시킬 수 있다. 클러스터 안에는 Namespace가 쿠버네티스 오브젝트들을 독립 공간으로 분리시키고 있으며, Namespace 내부는 쿠버네티스 최소 단위인 pod이 존재하고, Pod 안에 여러 Container를 담아 ..

Kubernetes 환경 세팅

처음 Kubernetes를 사용해보기 위해서 간단하게 환경 구축을 해주겠다. 가상 머신 내부에서 돌리기 위해 Vagrant를 통해 가상 환경을 구축해주고 내부에 kubernetes를 설치하겠다. 먼저 가상머신을 만들 Vagrantfile부터 만들겠다. # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu/bionic64" config.vm.hostname = "master" config.vm.network "private_network", ip: "192.168.111.110" config.vm.synced_folder ".", "/home/vagrant/sync", disable..