본문 바로가기

k8s5

k8s #5 networking&namespace 이번 포스팅에서는 쿠버네티스 상에서 두개의 컨테이너 간에 통신에 관련하여 알아보겠습니다. 예를 들어서 go언어로 만들어진 서버 컨테이너와 postgresql 데이터베이스 컨테이너가 통신을 하고싶다고 가정해보겠습니다. 첫번째 방법으로는 아래 그림 같은 구조를 생각해볼 수 있습니다. 한개의 pod안에 통신을 하려는 두개의 컨테이너를 모두 집어넣는 것입니다. 그러나 이런 방법은 바람직하지 못합니다. 왜냐하면 예를 들어 pod이 모종의 이유로 작동이 안되면 go언어 서버 컨테이너에 문제가 있는지 아니면 postgresql 컨테이너에 문제가 있는지에 대해서도 찾아봐야할 것이기 때문입니다. 이외에도 상당히 복잡해지기 때문에 보통 이런 경우 2개의 pod으로 나누게 됩니다. 그럼 아래와 같은 구조를 생각해 볼 수 있.. 2021. 11. 24.
k8s #4 Deployment&Rollout k8s의 Deployment는 ReplicaSet과 함께 무중단 배포를 할 때 쓰입니다. 예를 들어 webapp이라는 pod이 있고 2개의 Replica를 만들어서 배포중이라고 가정해봅시다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 apiVersion: apps/v1 kind: Replicaset metadata: name: webapp spec: selector: matchLabels: app: webapp replicas: 2 template: metadata: labels: app: webapp spec: containers: - name: webapp image: cs 그렇다면 위 코드와 비슷한 yaml파일을 작성해볼 수 있습니다. 이제 버젼 업그레이드를 한 새로.. 2021. 11. 23.
k8s #3 ReplicaSets Replicaset이란 실행되는 Pod의 개수를 보증해주는 역할을 합니다. 예를 들어서 Replicaset을 3개로 지정한 경우 Pod 1개가 어떠한 이유로 중지되어도 다시 실행이 되어 3개를 맞추게 해줍니다. 바로 예제 코드를 보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apiVersion: apps/v1 kind: ReplicaSet metadata: name: webapp spec: selector: matchLabels: app: webapp replicas: 2 template: metadata: labels: app: webapp spec: containers: - name: webapp image: cs 코드를 살펴보면 우선 당연히 Replic.. 2021. 11. 22.
k8s #2 무중단 배포 기초 위 같은 그림의 k8s 아키텍쳐가 있을 때 만약 bug fix나 업그레이드 등을 하고 싶다면 서버를 내렸다 다시 올려야하므로 유저 입장에서는 이용을 하지못하는 시간이 발생하게 됩니다. 이런 문제를 release label을 이용하여 해결할 수 있습니다. 위처럼 우선은 service가 release0에 해당하는 pod을 가리키게 하다가 새로운 버젼인 release1의 pod이 준비가 끝나면 service가 release1을 가리키게하면 됩니다. service가 pod을 가리키는 것을 바꾸는 것은 매우 짧은 시간이기 때문에 유저 입장에서는 중단되는 느낌을 받기는 어렵습니다. 코드의 경우는 아래와 같습니다. (전체 코드가 아닌 release의 관련된 코드 일부입니다.) 1 2 3 4 5 metadata: na.. 2021. 11. 22.