[Kubernets] Replication Controller, ReplicaSet - Template, Replicas, Selector
·
Infra/Kubernetes
Kubernetes  이번 포스팅에서는 컨트롤러에 대해 알아볼 것이다. `Kubernetes`의 컨트롤러는 여러 기능을 통해 서비스를 관리하고 운영하는데 큰 도움을 준다.  Auto Healing노드 위에 `Pod`가 있는데 해당 `Pod`가 갑자기 다운되던가 아니면 해당 `Pod`가 스케줄링 되어있는 노드가 다운되면해당 `Pod`에서 돌아가던 서비스에 장애가 온 것이다.이때, `Controller`는 이걸 즉각적으로 인지하고 `Pod`를 다른 노드에 새로 만들어준다.이걸 `Auto Healing` 기능이라고 한다. Auto Scaling`Pod`의 리소스가 리미트 상태가 됐을 때 `Controller`는 이 상태를 파악하고 `Pod`를 하나 더 만들어준다.즉, 부하가 분산되며 `Pod`가 죽지 않도록 ..
[Kubernetes] Namespace, ResourceQuota, LimitRange
·
Infra/Kubernetes
Kubernetes  이번 포스팅에서는 `Namespace`, `ResourceQuota`, `LimitRange`에 관해 알아보려 한다. 우선, 해당 오브젝트들을 왜 사용해야 되는지 먼저 알아보자.  `Kubernetes` 클러스터 안에는 사용할 수 있는 자원들이 존재한다. 일반적으로는 메모리나 CPU가 있을 것이다. 클러스터 안에는 여러 `Namespace`들이 존재하며 `Namespace` 안에는 여러 `Pod`가 생성이 가능하다. 각 `Pod`는 필요한 자원을 클러스터 자원을 공유해서 사용하는데,만약 한 `Namepsace` 안에 있는 `Pod`가 이 클러스터에 남은 자원을 모두 사용해 버리면 다른 `Pod` 입장에서는더 이상 쓸 자원이 없어서 자원이 필요할 때 문제가 발생한다. 이런 문제를 해결..
[Kubernetes] ConfigMap, Secret - Env, Mount
·
Infra/Kubernetes
Kubernetes  이번 포스팅에서는 `ConfigMap`과 `Secret`에 관한 설명이다. 설명하기에 앞서 해당 오브젝트를 사용해야 하는 상황은 어떤 경우일까? 개발 환경과 상용 환경이 있다고 하자.또한, A라는 서비스가 있다고 가정하자. 이때, A 서비스에는 일반 접근과 보안 접근이 가능하다. A 서비스(개발 환경)SSH: FalseUser: DevKey: LS0tLs... 따라서, 개발 환경에서는 해당 보안 접근을 해제할 수 있는 옵션이 있다.(`SSH : False`)만약, 보안 접근을 한다면 접근 유저와 키를 세팅할 수도 있다.(`User: Dev`, `Key: LS0tLs`)  개발 환경에서는 위처럼 사용한다고 하고, 상용 환경에서 배포를 해야 한다면 해당 값은 변경되어야 할 것이다. A ..
[Kubernetes] Volume - emptyDir, hostPath, PV/PVC
·
Infra/Kubernetes
Kubernetes  이번 포스팅에서는 `emptyDir`과 `hostPath` 그리고 `pvc`와 `pv`라고 하는퍼시스턴트 볼륨 클라임과 퍼시스턴트 볼륨에 관해 알아보도록 하자.   emptyDir 먼저 `emptyDir`은 컨테이너들끼리 데이터를 공유하기 위해 `Volume`을 사용하는 것이다.최초로 해당 `Volume` 이 생성될 때는 항상 해당 `Volume`안의 내용이 비어있기 때문에 `emptyDir`이라는 명칭이 붙어졌다. 만약, 컨테이너1이 웹 역할을 하는 서버이고 컨테이너2가 백엔드단을 처리해주는 서버라고 했을 때, 해당 웹서버로 받은 어떤 특정 파일을 마운트가 된 `Volume`에 저장을 해놓고,백엔드단의 컨테이너 역시 해당 볼륨을 마운트를 하면 이 두 서버가 해당 `Volume`을 ..
[Kubernetes] Service - ClusterIP, NodePort, LoadBalancer
·
Infra/Kubernetes
Kubernetes  Service  서비스는 기본적으로 자신의 `클러스터 IP`를 가지고 있다.그리고 이 서비스를 파드에 연결을 시켜 놓으면 서비스의 IP를 통해서 파드에 접근이 가능하다. 그런데, 전 포스팅에서 살펴본 것처럼 파드도 똑같이 클러스터 내에서 접근할 수 있는 IP가 있었다.  그렇다면 굳이 왜 서비스를 이용하는 것일까?  사용 이유 `Pod`라는 존재는 `Kubernetes`에서 시스템 장애건, 성능 장애건 언제든지 죽을 수가 있다.그리고 그때 다시 재생성 되도록 설계가 되어있는 오브젝트이다. 근데 이때, `Pod`는 재생성시 IP가 변경된다. 따라서, 이 파드의 IP는 신뢰성이 떨어진다.그러나, `Pod`와는 별개로 서비스는 사용자가 직접 지우지 않는 한 삭제되거나 재생성되지 않는다. ..
[Kubernetes] Pod - Container, Label, NodeSchedule
·
Infra/Kubernetes
Kubernetes   Pod`Pod` 안에는 하나의 독립적인 서비스를 구동할 수 있는 `컨테이너`들이 존재한다.해당 `컨테이너`는 서비스가 연결될 수 있도록 포트를 가지고 있는데, 한 `컨테이너`가 포트를 여러 개는 가질 수 있지만, 한 `Pod`내에서 포트가 중복될 순 없다. 한 `Pod` 내에서 컨테이너는 `localhost:{해당 컨테이너 포트}`으로 접근할 수 있다.  그리고 `Pod`는 생성이 될 때 고유의 IP 주소가 할당이 된다.하지만, 이는 `Kubernetes Cluster` 내부에서만 접속이 가능하고, 외부에서는 접속이 불가능하다. 또한, 만약 `Pod`에 문제가 생기면 시스템이 이걸 감지해서 `Pod`를 삭제하고 다시 재성성한다.이때, 고유의 IP 주소는 변경이 된다. 즉, 휘발성이..