전체 글

I work diligently to become lazy.
DaemonSet, Job, CronJob Controller 가 무엇이고 언제 사용 하는지 정리 한다.  DaemonSet각 Node 에 자원이 다르게 남아있는 상태에서 ReplicaSet 의 경우 Pod 를 Scheduler 에 의존해서 Node 에 배치할 때, 만약 Node1 에 자원이 많이 남아있는 경우 Pod 를 많이 배치할 것이다. 그리고 Node3 과 같이 자원이 별로 없으면 Pod 를 배치하지 않을 수도 있다. 반면 DaemonSet 은 Node 의 자원 상태와 상관 없이 각 Node 에 Pod 가 하나씩 만들어진다는 특징이 있다. 만약 Node 가 10개면 각 노드에 하나씩 총 10개의 Pod 가 생긴다. 이렇게 각 Node 에 설치해서 사용해야 하는 서비스 들이 있다. 각 Node 에 ..
Deployment 는 하나의 운영 중인 서비스를 업데이트 하여 다시 배포해야 할 때 도움을 주는 Controller 이다. Deployment 에 대해 알아보기에 앞서 k8s 에서 사용하는 몇 가지 업그레이드 방법에 대해 알아 본다.  업그레이드 방법에는 크게 ReCreate, Rolling Update, Bule/Green, Canary 등이 있다.  ReCreateDeployment 를 만들면 v1 의 Pod 들이 만들어 진다. 그리고 각 Pod 마다 각자의 자원을 사용 한다고 할 때 ReCreate 방법으로 를 업그레이드를 하게 되면 Deployment 는 먼저 기존의 Pod 들을 삭제 한다. 그렇기 때문에 서비스에 대한 Downtime 이 발생 하고 자원도 사용하지 않게 된다. 그리고 나서 v2..
k8s 의 Controller 는 서비스를 관리하고 운영하는데 큰 도움을 준다. Auto HealingNode 위에 Pod 가 있는데 이 Pod 가 갑자기 다운 되거나 이 Pod 가 Scheduling 되어 있는 Node 가 다운 될 경우 Controller 는 장애를 바로 인지하고 Pod 를 다른 Node 에 새로 만들어 준다.  Software Update다수의 Pod 에 대한 버전을 upgrade 해야 할 경우 Controller 를 통해 한 번에 쉽게 할 수 있고, upgrade 도중에 문제가 생기면 rollback 할 수 있는 기능을 제공 한다.  Auto ScalingPod 의 리소스가 최대치에 다다랐을 경우 Controller 는 이 상태를 파악하고 Pod 를 하나 더 만들어 줌으로 부하를 ..
본격적인 사용 방법을 알아보기에 앞서 Namespace, ResourceQuota, LimitRange 를 왜 사용해야 하는지 먼저 정리한다.  k8s Cluster 라고 해서 전체 사용할 수 있는 자원이 있다. 일반적으로 Memory, CPU 가 있고 Cluster 안에는 다수의 Namespace 를 Namespace 안에는 다수의 Pod 를 만들 수 있다. 각 Pod 는 필요한 자원을 Cluster 자원을 공유하여 사용하는데, 만약 한 Namespace 안에 있는 Pod 가 Cluster 에 남은 자원을 모두 사용해버리면 다른 Pod 입장에서는 더 이상 사용할 수 있는 자원이 없어서 자원이 필요할 때 문제가 생기게 된다. 이런 문제를 해결하기 위해 ResourceQuota 가 존재하는데 이것은 Nam..
본격적인 사용 방법을 알아보기에 앞서 ConfigMap 과 Secret 이 언제 사용되는지 먼저 정리한다.  개발 환경과 운영 환경이 있다. A Service 는 환경에 따라 SSH 설정 및 User 와 key 값을 설정해야 한다. 하지만 이 값은 Container 안에 있는 Service 에 들어있는 값이기 때문에 이 값을 바꾼다는 것은 환경에 따라 Container Image 를 따로 관리해야 한다는 것을 의미한다. 단순히 이 값을 관리하기 위해 용량이 큰 Image 를 별도로 관리하는 것은 부담되는 일이다. 보통 환경에 따라 변하는 값들을 외부에서 결정할 수 있도록 한다. 이것을 도와주는 것이 ConfigMap 과 Secret 이라는 오브젝트 이다. 관리 해야 하는 일반적인 상수들을 모아 Confi..
emptyDirContainer 간 데이터 공유를 위해 Volume 을 사용하는 것을 말한다. 최초 Volume 이 생성될 때는 항상 내용이 비어있기 때문에 emptyDir 이란 이름을 가지게 되었다.만약 Container 1 이 web 역할을 하는 서버이고 Container 2 는 백엔드를 처리해주는 서버라고 하자. 이 때 web 서버로부터 받은 파일을 mount 된 Volume 에 저장해두고 백엔드의 Container 역시 같은 Volume 을 mount 해두면 이 두 서버가 Volume 을 자신의 로컬에 있는 파일 처럼 사용할 수 있다. 즉 두 서버 간 파일 전송 없이 같은 파일을 사용할 수 있다. 추가로 Volume 은 Pod 안에 생성되기 때문에 만약 Pod 에 문제가 발생하여 다시 생성 될 경..
ClusterIPService 는 기본적으로 아래 그림과 같이 자신의 ClusterIp 를 가지고 있다.그리고 이 Service 를 Pod 에 연결시켜두면 Service 의 IP 를 통해 Pod 에 접근할 수 있게 된다.앞서 Pod 에도 동일하게 Cluster 내에서 접근할 수 있는 IP 가 존재함에도 불구하고 굳이 Service 를 붙여서 접근하는지 의문이 생긴다. 이렇게 하는 이유는 Pod 는 k8s 에서 다양한 이유로 언제든 다운될 수 있으며 언제든 다시 생성될 수 있는 오브젝트이기 때문이다. (다시 생성 될 경우 Pod 의 IP 는 매번 달라진다.)반면 Service 의 경우 사용자가 직접 명령을 하지 않는 한 스스로 삭제 되거나 다시 생성되지 않는다. 즉, 이 Service IP 를 사용하면 항..
PodPod 안에는 하나의 독립 된 서비스를 구동할 수 있는 Container 들이 있다. 그리고 각 Container 들은 서비스가 연결될 수 있도록 port 를 가지고 있다. 하나의 Container 는 하나 이상의 port 를 가질 수 있지만, 하나의 Pod 내에서 같은 port 를 가지는 Container 는 존재할 수 없다.Container1 과 Container2 는 하나의 host 로 묶여 있다고 볼 수 있기 때문에, 만약 Container1 에서 Container2 로 접속을 할 때 [localhost:8080](http://localhost:8080) 으로 접근할 수 있다.Pod 가 생성될 때 IP 주소가 할당 되는데 k8s Cluster 내에서 Pod 에 접근할 때 사용하는 것으로 외부..
nimkoes
한칸짜리책상서랍