본문 바로가기

kubernetes19

1년 뒤 다시 찾아본 인터넷 편지 사이트 이 글은 작년에 쓴 글 [육군훈련소에서 인터넷 편지 편하게 받기] 이후의 이야기입니다. 육군훈련소에서 인터넷 편지 편하게 받기 2020년 5월 14일부터 6월 11일까지 육군훈련소에서 기초군사훈련을 받았다. 입소하게 되면 인터넷 편지만큼 재미있는 것이 없다던데, 육군훈련소 훈련병에게 인터넷 편지를 보내는 방법은 생각보 calofmijuck.tistory.com 어느새 훈련소를 다녀온지도 1년이 지났다. 인터넷 편지 사이트를 운영했던 서버에 들어가 보니 cron 으로 돌려놓았던 인편 프로그램은 여전히 자신의 본분을 다하며 하루에 한 줄씩 로그를 꾸준하게 찍고 있었다. 그동안 참 많은 일이 있었다. 내가 훈련소에 다시 들어갈 일은 특별히 없을 것이기에, 솔직히 말하면 잊고 지냈던 프로젝트이긴 하다. 급하게 .. 2021. 5. 3.
Chapter 9. Deployments: updating applications declaratively 주요 내용 Deployment 를 사용하여... 무중단 배포를 하는 방법 롤백하는 방법 9.1 Updating applications running in pods 만약 서비스/앱을 업데이트하고 싶다면 2가지 방법이 있다. Pod 를 모두 지운 후, 업데이트 된 pod 로 새롭게 시작 새로운 pod 를 시작한 뒤 새로운 pod 가 요청을 처리할 준비가 되면 기존 pod 를 지운다. 두 방법 모두 장단이 있다. 1번의 경우 잠시 서비스가 중단된다는 문제가 있고, 2번의 경우 배포 중에 2가지 버전의 서비스가 동시에 존재하게 되므로 이를 잘 처리하기 위해서 서비스/앱 단에서 처리해줘야 한다. (하위 호환성) 9.1.1 삭제 후 새롭게 생성 ReplicationController / ReplicaSet 의 경우.. 2021. 4. 30.
Chapter 8. Accessing pod metadata and other resources from applications 주요 내용 Pod 나 컨테이너의 metadata 를 전달하는 방법 컨테이너 안의 앱이 Kubernetes API 와 통신하고 클러스터의 리소스를 생성/수정하는 방법 8.1 Passing metadata through the Downward API 앱의 config data 는 pod 생성 전에 결정되기 때문에 환경 변수나 configMap, secret volume 을 이용해 전달할 수 있었다. 하지만 pod 가 시작 되어야 알 수 있는 정보들도 있다. (Pod IP, 실행 중인 노드의 이름, pod 자체의 이름 등) 이런 정보를 얻기 위해서 Downward API 가 존재하며, 이 API 를 호출하면 pod 나 실행 환경과 관련된 정보를 얻을 수 있다. 얻은 정보는 환경 변수로 전달되거나, downwa.. 2021. 4. 18.
Chapter 7. ConfigMaps and Secrets: configuring applications 거의 대부분의 앱은 설정(configuration)이 필요하다. 개발 서버, 배포 서버의 설정 사항 (접속하려는 DB 서버 주소 등)이 다를 수도 있고, 클라우드 등에 접속하기 위한 access key 가 필요하거나, 데이터를 암호화하는 encryption key 도 설정해야하는 경우가 있다. 이러한 경우에 해당 값들을 도커 이미지 자체에 넣어버리면 보안 상 취약하고, 또 설정 사항을 변경하는 경우 이미지를 다시 빌드해야하는 등 불편함이 따른다. 이번 장에서는 Kubernetes 에서 돌아가는 어플리케이션에 설정 사항을 넘겨주는 방법을 알아본다. 7.1 컨테이너화 된 어플리케이션 설정하기 보통 어플리케이션의 설정 사항을 관리할 때에는 configuration file 이 존재하게 된다. (.propert.. 2021. 4. 18.
Chapter 6. Volumes: attaching disk storage to containers 컨테이너가 재시작되면 기존 작업 내역이 모두 사라지게 될 수 있으므로, 컨테이너의 작업 내역을 저장하고 같은 pod 내의 다른 컨테이너가 함께 사용하는 저장 공간이다. 6.1 Introducing volumes Pod 의 한 구성 부분으로 pod spec 에 정의되어 있다. 또 standalone Kubernetes object 가 아니라서 독립적으로 생성되거나 삭제될 수 없다. Pod 내의 모든 컨테이너로부터 접근이 가능하지만, 그렇게 하려면 mount 해줘야 한다. 6.1.1 Volume 예시 6.1.2 Available volume types 종류가 굉장히 많은데, 다 알지는 않아도 괜찮다고 한다. Volume types emptyDir: 빈 폴더로 일시적인 데이터 저장에 사용 hostPath: 노.. 2021. 4. 7.
Chapter 5. Services: enabling clients to discover and talk to pods 많은 앱들이 request (요청) 을 받아 서비스를 제공하는 형태인데, 이런 요청을 보내려면 IP 주소를 알아야 한다. 한편 Kubernetes 를 사용하게 되면 pod 의 IP 주소를 알아야 하는데, Kubernetes 의 pod 들은 굉장히 동적이므로 이들의 IP 주소를 알아낼 방법이 필요하다. Pod 들은 스케쥴링 되고 스케일링 되기 때문에 IP 주소가 자주 바뀔 수 있으며, pod 가 시작된 후 IP 주소가 할당될 뿐만 아니라, 하나의 서비스를 위해 pod 를 여러 개 사용하는 경우 하나의 IP 를 사용하여 여러 개의 pod 에 접근할 방법이 필요하다. (쿠버네티스를 사용하지 않으면 고정 IP 등을 사용하거나 따로 설정된 주소로 요청이 가도록 했을 것이다) 5.1 Services 소개 Servi.. 2021. 4. 7.
Chapter 4. Replication and other controllers: deploying managed pods 3장에서는 pod 를 직접 관리하는 방법에 대해 살펴봤다. 하지만 실무에서는 pod 의 관리가 자동으로 되길 원한다. 이를 위해 ReplicationController 나 Deployment 를 사용한다. 4.1 Keeping pods healthy Pod 내의 컨테이너가 (오류로 인해) 죽으면, Kubelet 이 자동으로 해당 컨테이너를 재시작한다. 하지만 컨테이너의 프로세스가 종료되지 않았는데 어플리케이션이 동작하지 않는 경우가 있고, (JVM OOM 에러) 어플리케이션이 deadlock 이나 무한 루프에 빠져서 동작하지 않는 경우가 생길 수도 있다. 이런 경우에도 컨테이너가 자동으로 재시작되게 해야한다. 물론 앱이 자체적으로 에러를 감지해서 프로세스를 종료할 수도 있겠지만, 내부적으로 에러를 감지하.. 2021. 3. 21.
Chapter 3. Pods: running containers in Kubernetes 다양한 쿠버네티스 오브젝트 (resources) 를 살펴보는 단원이다. 가장 기본이 되는 Pod 부터 시작한다. 이외의 모든 것들은 pod 를 관리하거나, pod 를 노출하거나, pod 에 의해 사용된다. 3.1 Introducing Pods Pod 는 컨테이너의 모임이며, 쿠버네티스의 기본적인 building block 이 된다. 하나 기억할 사실은, 하나의 pod 는 하나의 노드 위에 있게 되므로, pod 내부의 모든 컨테이너는 같은 노드에 존재하게 된다. 3.1.1 왜 Pod 를 사용하는가? 그냥 하나의 컨테이너 안에서 모든 것을 실행하면 안 되는 것인가? 하나의 프로세스라면 하나의 컨테이너 안에서 실행해도 괜찮지만, 여러 프로세스가 한꺼번에 동작하는 앱의 경우 한 컨테이너 안에서 돌아가게 되면 관.. 2021. 3. 17.
Chapter 2. First steps with Docker and Kubernetes 도커와 쿠버네티스를 사용하여 간단한 어플리케이션을 배포해 보자! 2.1 컨테이너 이미지 생성, 실행, 공유하기 2.1.1 도커 설치 도커 공식 홈페이지에 있는 대로 설치한다! Mac 이나 Windows 를 쓰면 도커가 VM을 세팅하고 VM 안에서 도커 데몬이 실행된다. (왜일까... Linux 가 아니면 안 돼서 그런가) 컨테이너 실행 $ docker run :[TAG] [COMMAND] 이미지를 다운받고 실행해주는 명령 예시로 docker run busybox echo "Hello world" 가 있는데, 별거 아닌 것 같아 보여도 한 줄로 앱이 통째로 설치되고 실행이 되고 있기 때문에 생각보다 대단한 것이다! docker run 이 실행될 때... 우선 해당 이미지의 latest version (IM.. 2021. 3. 8.