From 60ccd739e83016a38a468dbbf5004dabe69efd1f Mon Sep 17 00:00:00 2001 From: Sungchan Yi Date: Sat, 1 Jul 2023 13:39:08 +0900 Subject: [PATCH] feat: recover 2 kubernetes articles (#25) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: recover 2 kuberenetes posts (#19) * [PUBLISHER] upload files #14 * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : 01.jpeg * [PUBLISHER] upload files #15 * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * DELETE FILE : assets/img/posts/01.jpeg * [PUBLISHER] upload files #16 * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * [PUBLISHER] upload files #17 * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * [PUBLISHER] upload files #18 * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * DELETE FILE : _posts/Development/Kubernetes/Part I - Overview/2021-02-28-02-first-steps-with-docker-and-kubernetes.md * [PUBLISHER] upload files #20 * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * DELETE FILE : assets/img/posts/k8s/k8s-01.jpeg * DELETE FILE : assets/img/posts/k8s/k8s-02.jpeg * [PUBLISHER] upload files #21 * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * DELETE FILE : assets/img/posts/k8s/k8s-01.jpeg * DELETE FILE : assets/img/posts/k8s/k8s-02.jpeg * [PUBLISHER] upload files #22 * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * DELETE FILE : assets/img/posts/k8s/k8s-02.jpeg * [PUBLISHER] upload files #23 * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * DELETE FILE : _posts/Development/Kubernetes/Part I - Overview/2021-02-28-01-introducing-kubernetes.md * DELETE FILE : _posts/Development/Kubernetes/Part I - Overview/2021-03-07-02-first-steps-with-docker-and-kubernetes.md * [PUBLISHER] upload files #24 * PUSH NOTE : 수학 공부에 대한 고찰.md * PUSH NOTE : 01. Introducing Kubernetes.md * PUSH ATTACHMENT : k8s-01.jpeg * PUSH NOTE : 02. First Steps with Docker and Kubernetes.md * PUSH ATTACHMENT : k8s-02.jpeg * PUSH NOTE : 블로그 이주 이야기.md * PUSH ATTACHMENT : blog-logo.png * PUSH ATTACHMENT : github-publisher.png --- .../2021-02-28-01-introducing-kubernetes.md | 203 +++++++++++ ...-first-steps-with-docker-and-kubernetes.md | 314 ++++++++++++++++++ .../Development/Web/2023-06-25-blog-moving.md | 2 + assets/img/posts/k8s-01.jpeg | Bin 0 -> 61789 bytes assets/img/posts/k8s-02.jpeg | Bin 0 -> 25435 bytes 5 files changed, 519 insertions(+) create mode 100644 _posts/Development/Kubernetes/2021-02-28-01-introducing-kubernetes.md create mode 100644 _posts/Development/Kubernetes/2021-03-07-02-first-steps-with-docker-and-kubernetes.md create mode 100644 assets/img/posts/k8s-01.jpeg create mode 100644 assets/img/posts/k8s-02.jpeg diff --git a/_posts/Development/Kubernetes/2021-02-28-01-introducing-kubernetes.md b/_posts/Development/Kubernetes/2021-02-28-01-introducing-kubernetes.md new file mode 100644 index 0000000..6867299 --- /dev/null +++ b/_posts/Development/Kubernetes/2021-02-28-01-introducing-kubernetes.md @@ -0,0 +1,203 @@ +--- +share: true +toc: true +categories: [Development, Kubernetes] +tags: [kubernetes, sre, devops, docker] +title: "01. Introducing Kubernetes" +date: "2021-02-28" +github_title: "2021-02-28-01-introducing-kubernetes" +image: + path: /assets/img/posts/k8s-01.jpeg +--- + +![k8s-01.jpeg](../../../assets/img/posts/k8s-01.jpeg) _Overview of Kubernetes Architecture (출처: https://livebook.manning.com/book/kubernetes-in-action/chapter-1)_ + +기존에는 소프트웨어가 커다란 덩어리였지만 최근에는 독립적으로 작동하는 작은 **마이크로서비스**(microservice)로 나뉘고 있다. 이들은 독립적으로 동작하기 때문에, 개발하고 배포하거나 스케일링을 따로 해줄 수 있다는 장점이 있으며, 이 장점은 빠르게 변화하는 소프트웨어의 요구사항을 반영하기에 적합하다. + +마이크로서비스를 여러 개 띄우기 시작하면 이들을 효율적으로 관리하는 방법이 필요하다. + +**쿠버네티스**(Kubernetes)는 하드웨어 인프라를 추상화하여 데이터 센터 (혹은 소프트웨어가 운영되는 서버나 클라우드)를 커다란 하나의 리소스로 바라볼 수 있게 해준다. + +## 1.1 쿠버네티스가 필요한 이유 +--- + +### 1.1.1 하나의 거대한 앱에서 마이크로서비스로 + +소프트웨어가 거대한 하나의 앱이면 오랜 기간 유지 보수를 거치면서 지나치게 복잡해지고, 의존성이 늘어나기 마련이다. + +서버에 부하가 늘어나게 되면 **스케일링**을 해야한다. + +#### 스케일링의 종류 + +- **Vertical scaling** (scaling up): CPU/메모리 추가 등, 코드를 수정할 필요는 없지만 비싸다. +- **Horizontal scaling** (scaling out): 서버 증설 등, vertical scaling 에 비하면 싼 편이지만, 코드를 수정해야 하기도 하며, 때로는 불가능한 경우도 있다 (ex. DB) + +만약 앱이 하나의 거대한 덩어리라면, 일부가 스케일링이 불가능하면 전체도 스케일링 할 수 없다. 한편 이를 작은 마이크로서비스로 나누면? + +마이크로서비스는 독립적인 프로세스로 동작하며, 다른 마이크로서비스와 API를 이용하여 통신한다. 독립적이기 때문에 해당 마이크로서비스가 하려는 일에 적합한 언어를 사용하여 서비스를 만들면 된다. 또 각 마이크로서비스 개별적으로 개발하고 배포할 수 있다. 다른 마이크로서비스에 변경 사항이 생기더라도 API만 유지된다면 의존성을 크게 고려하지 않아도 된다. + +따라서 마이크로서비스는 서비스별로 스케일링해주면 되며, 부하가 심한 마이크로서비스만 스케일링 해주면 되고, 나머지 부분은 그대로 두면 된다! + +#### 마이크로서비스의 단점 + +마이크로서비스로 애플리케이션을 나누게 되면 각 서비스끼리 통신을 하게 될텐데 스케일링을 많이 하면 할수록 통신을 더 많이 해야한다. 복잡도가 증가하게 된다. 복잡한 시스템을 효율적으로, 에러 없이 운영하는 것은 어렵다. + +디버깅할 때 골치아프다. 문제가 여러 마이크로서비스에 걸쳐있을 수도 있다. + +마이크로서비스 마다 요구하는 라이브러리가 다를 수 있고, 같은 라이브러리를 사용하지만 버전이 다를 수도 있다. 의존성을 관리하기 어려워 질 수도 있다. + +### 1.1.2 앱에 일관된 환경 제공 + +개발 환경과 운영/배포 환경은 다르다! + +개발 환경과 배포 환경을 동일하게 만들어서 같은 운영체제, 라이브러리, 시스템 설정, 네트워크 환경 등을 똑같이 할 수 있다면 배포 환경에서만 생기는 문제들 때문에 골치 아파야 할 일은 줄어들 것이다.[^1] + +### 1.1.3 지속적인 배포: DevOps and NoOps + +**DevOps**: 애플리케이션 개발, 배포와 운영을 담당 + +개발자가 애플리케이션 배포와 운영에 참여하게 되면서 사용자의 필요나 이슈를 잘 파악할 수 있게 되고, 운영에 있어서 발생하는 어려움을 더 잘 이해하게 된다. + +**NoOps**: 개발자가 하드웨어 인프라에 대한 지식 없이, 또 운영 팀의 도움 없이 서비스를 배포 + +## 1.2 컨테이너 기술 소개 +--- + +쿠버네티스에서는 **리눅스의 컨테이너 기술**을 사용하여 애플리케이션의 동작을 분리한다. + +### 1.2.1 컨테이너란? + +마이크로서비스를 운영하려면 각 서비스별로 독립적인 환경을 제공해야 한다. 이를 하기 위해서는 각 마이크로서비스를 **가상 머신**(virtual machine)에 올리면 된다. + +하지만 VM은 너무 시스템 자원을 많이 소모하고, 각 VM마다 설정을 따로 해야하니 피곤하다. + +대안으로 **컨테이너 기술**을 사용한다. 여러 개의 서비스가 하나의 머신에서 작동하면서도 각 서비스에게 독립적인 환경을 제공할 수 있게 되며, VM에 비해 훨씬 가볍다. + +컨테이너에서 돌아가는 프로세스는 호스트(컨테이너를 실행한) 머신의 운영체제 아래에서 돌아간다. (다른 프로세스들과 마찬가지!) + +#### VM과의 차이점 + +VM은 독자적인 운영체제를 사용하기 때문에 시스템 프로세스가 필요하고 이는 추가적인 리소스의 소모로 이어진다. (윈도우 VM에 RAM 4GB씩 준다고 생각하면 몇 개를 띄울 수 있을지...) + +반면 컨테이너는 호스트 머신에서 돌아가는 프로세스이기 때문에 추가적인 시스템 프로세스가 필요 없어서 애플리케이션이 필요한 리소스만 소모하게 된다. VM에 비해 훨씬 가볍기 때문에 한 머신에서 여러 컨테이너를 돌릴 수 있게 된다. + +VM을 사용하게 되면 hypervisor 가 하드웨어 자원을 가상 자원(virtual resource)으로 나누어 각 VM안의 OS가 사용할 수 있게 해준다. VM 안에서 돌아가는 애플리케이션은 VM의 OS에 system call 을 하게 되고, VM의 커널은 hypervisor를 통해 호스트의 CPU에서 명령을 수행하게 된다. + +컨테이너는 호스트의 OS 커널에서 돌아가기 때문에 가상화 작업이 불필요하다. 결국 시스템 자원을 VM에 비해 적게 소모하므로 실행도 빠르다. + +#### 컨테이너의 동작 원리 + +- **Linux Namespace** + +각 프로세스가 독립적으로 시스템을 바라보게 되어 독립적인 환경을 제공한다. 같은 namespace 에 있는 자원만 확인할 수 있으므로, 여러 namespace 를 만들고 자원을 할당하면 프로세스 입장에서는 시스템 내에서 독립적으로 돌아가는 것 처럼 보일 것이다. + +- **Linux Control Groups** (cgroups) + +각 프로세스가 사용할 수 있는 자원에 제한을 걸어둔다. + +### 1.2.2 Docker (도커) + +애플리케이션을 패키징하고, 배포하고 실행하는 플랫폼이다. + +VM 이미지가 아니라 용량이 더 작은 **컨테이너 이미지**를 사용한다. + +컨테이너 이미지는 여러 layer 로 구성되어 있어서 이를 공유하거나 재사용 할 수 있다. 같은 layer 가 필요한 다른 서비스에서 그대로 가져다 쓸 수 있게 된다. + +(실제로 Dockerfile 명령 줄 별로 이미지 layer 를 구성하던 것 같다. Hash 를 떠두고 만들어 둔 이미지가 있으면 새로 만들지 않고 그대로 가져와서 쓰던 기억이 있다.) + +공유하는 대신 이미지 layer 는 read-only 이다. 컨테이너가 실행되면 writable layer 가 layer 의 맨 위에 생겨서 해당 layer 에 필요한 작업을 하게 된다. + +#### 도커의 3가지 주요 개념 + +- **이미지**(Images): 애플리케이션과 애플리케이션이 동작하는 환경을 패키징한 것이다. '환경'에는 파일시스템이나, 실행 파일들의 경로와 같은 메타데이터도 들어간다. + +- **레지스트리**(Registries): 도커 이미지의 저장소라고 생각하면 쉽다. 이미지를 만들어서 저장소에 push 할 수 있고, 직접 만든 혹은 만들어진 공식 이미지들을 pull 해서 사용할 수 있다. + +- **컨테이너**(Containers): 이미지로부터 만들어진 컨테이너로 호스트에서 돌아가는 하나의 프로세스이지만, 리눅스 컨테이너 기술이 적용되어 있어 독립적인 프로세스처럼 돌아간다. + +#### 컨테이너 이미지의 한계 + +모든 컨테이너는 호스트의 머신에서 돌아가는 프로세스이기 때문에 해당 컨테이너가 요구하는 커널 버전이나 운영체제, 아키텍쳐 (x86)가 있다면 해당 조건이 만족 되어야 컨테이너를 실행할 수 있다. M1 맥에서 도커 지원을 위해 추가 개발이 필요한 이유이다. + +VM은 자체적으로 OS를 가지고 있기 때문에 VM을 사용하게 되면 이런 문제가 없다. + +### 1.2.3 rkt (rock-it) + +도커와 같은 컨테이너 엔진이다. + +보안, 결합성, 표준을 지키는 것에 조금 더 중점을 둔다. + +## 1.3 쿠버네티스 소개 +--- + +마이크로서비스를 스케일링 하고 컨테이너가 많아지면 운영이 어려워진다! 이를 효율적으로 할 수 있게 해줄 도구가 필요하다. + +### 1.3.1 쿠버네티스의 기원 + +구글에서 Borg, Omega 와 같은 서비스 관리 시스템을 자체 개발하여 사용하다가 2014년에 쿠버네티스를 공개했다. + +### 1.3.2 High-level에서 바라본 쿠버네티스 + +쿠버네티스는 컨테이너화 된 애플리케이션을 쉽게 배포하고 운영하게 해주는 소프트웨어이다. + +수많은 노드에서 돌아가는 애플리케이션이 마치 한 컴퓨터에서 돌아가는 것처럼 운영해준다. + +클러스터를 위한 운영체제로 생각할 수 있다. + +개발자의 입장에서는 인프라 관련된 기능들을 애플리케이션에 덜 넣어도 된다. (서비스가 준비되었는지 알아낸다거나, 스케일링, 로드 밸런싱, 에러로부터 회복, leader election 등) 개발자는 이제 애플리케이션의 기능에 더욱 집중할 수 있다. 인프라와 통합하는데 개발 리소스를 투입하지 않아도 된다. + +쿠버네티스를 사용하면 사람이 직접 컨테이너와 작업을 스케쥴링 하는 것보다 자원을 효율적으로 사용할 수 있게 된다. + +### 1.3.3 쿠버네티스 클러스터 구조 + +쿠버네티스 시스템에는 **마스터 노드**(master node)와 **워커 노드**(worker node)가 있다. + +- 마스터 노드: Kubernetes Control Plane 이 실행되고, 쿠버네티스 시스템을 관리 +- 워커 노드: 배포한 애플리케이션이 동작하는 노드 + +#### Kubernetes Control Plane + +클러스터를 제어하고 동작하게 한다. + +- **Kubernetes API 서버**: Control Plane 내부의 각 부분이 서로 통신할 때 사용하는 API 서버이다. 워커 노드에서 API를 이용하기도 한다. + +- **스케쥴러**: 애플리케이션 배포시 워커 노드에 서비스를 할당한다. + +- **Controller Manager**: 클러스터 수준의 기능을 담당한다. 컴포넌트를 복제하거나 워커 노드 개수를 관리하거나, 노드 에러를 처리하는 등 작업을 담당한다. + +- **etcd**: 클러스터의 설정을 저장하는 persistent 분산 데이터 스토어이다. + +#### Worker Nodes + +- **Container runtime**: 컨테이너를 실행해준다. +- **Kubelet**: API 서버와 통신하고 노드의 컨테이너를 관리한다. +- **Kubernetes Service Proxy** (kube-proxy): 애플리케이션 컴포넌트 간 네트워크 로드 밸런싱을 담당한다. + +### 1.3.4 쿠버네티스에서 애플리케이션 실행 + +우선 컨테이너 이미지를 만들어서 이미지 레지스트리에 등록해둬야 한다. + +그리고 Kubernetes API 서버에 애플리케이션의 구성 명세를 알려줘야 한다. + +명세에는 애플리케이션의 컴포넌트들에 대한 정보, 각 컴포넌트들의 관계, 같은 노드에 실행되어야 하는 컴포넌트들, 컴포넌트의 복제본 개수, 외부로 공개할 컴포넌트 등에 대한 여러 정보가 들어있다. + +**API 서버**가 애플리케이션의 구성 명세를 처리하면, **스케줄러**는 컨테이너들을 적절하게 노드에 할당한다. **Kubelet**은 **Container Runtime** 에게 필요한 이미지를 가져와 실행하라고 한다. + +컴포넌트의 복제본 개수(replica)를 정해두면 이 값을 지키도록 쿠버네티스가 자동으로 동작한다. 만약 개수가 적으면 더 실행하고, 많으면 줄인다. 또 들어오는 요청이 많거나, CPU 부하가 심할 때와 같이 상황에 맞게 자연스럽게 스케일링도 해준다. 이렇게 하나의 클러스터 내에서 컨테이너를 옮겨다니며 리소스를 효율적으로 쓰기도 하고 관리를 편하게 해준다. + +**kube-proxy** 의 경우 하나의 고정된 IP 주소로 들어오는 요청에 대해 로드 밸런싱을 수행하여 클러스터 내의 적절한 컨테이너에게 작업을 넘겨준다. + +### 1.3.5 쿠버네티스 사용의 장점 + +개발자들은 클러스터를 구성하는 서버에 대해서 잘 몰라도 된다. 추상화로 인해 모든 노드/클러스터가 커다란 서버가 된다. + +물론 서버에 GPU가 필요하거나 추가적인 제약 조건이 따른다면 이를 잘 조절해 줘야 한다. (AWS GPU 인스턴스, DB 인스턴스 등) + +쿠버네티스를 사용하게 되면 애플리케이션과 인프라가 분리된다! 무엇보다 개발 환경과 배포 환경을 유사하게 설정할 수 있어서 편해진다. + +쿠버네티스가 하드웨어 리소스를 효율적으로 사용할 수 있도록 도와준다. 컴포넌트들을 관리하며 스케쥴링을 해주고 오류 발생시 자동으로 처리해주고 (노드 재시작 등), 부하가 심한 경우 자동으로 스케일링을 제공한다. + +새로운 버전의 애플리케이션을 배포할 때 연속적인 배포를 할 수 있게 된다. 중간에 서비스를 중단하지 않아도 된다. + +--- +[^1]: 물론 컨테이너를 씀으로 인해 발생하는 새로운 문제를 얻겠지만, 개인적으로 장점이 더 크다고 생각한다. \ No newline at end of file diff --git a/_posts/Development/Kubernetes/2021-03-07-02-first-steps-with-docker-and-kubernetes.md b/_posts/Development/Kubernetes/2021-03-07-02-first-steps-with-docker-and-kubernetes.md new file mode 100644 index 0000000..82f91cf --- /dev/null +++ b/_posts/Development/Kubernetes/2021-03-07-02-first-steps-with-docker-and-kubernetes.md @@ -0,0 +1,314 @@ +--- +share: true +toc: true +categories: [Development, Kubernetes] +tags: [kubernetes, sre, devops, docker] +title: "02. First Steps with Docker and Kubernetes" +date: "2021-03-07" +github_title: "2021-03-07-02-first-steps-with-docker-and-kubernetes" +image: + path: /assets/img/posts/k8s-02.jpeg +--- + +![k8s-02.jpeg](../../../assets/img/posts/k8s-02.jpeg) _Running a container image in Kubernetes (출처: https://livebook.manning.com/book/kubernetes-in-action/chapter-2)_ + +도커와 쿠버네티스를 사용하여 간단한 애플리케이션을 배포해 보자! + +## 2.1 컨테이너 이미지 생성, 실행, 공유하기 +--- + +### 2.1.1 도커 설치 + +도커 공식 홈페이지에 있는 대로 설치한다! + +- Mac 이나 Windows 를 쓰면 도커가 VM을 세팅하고 VM 안에서 도커 데몬이 실행된다. + +#### 컨테이너 실행 + +```bash +$ docker run :[TAG] [COMMAND] +``` + +- 이미지를 다운받고 실행해주는 명령 + +예시로 `docker run busybox echo "Hello world"` 가 있는데, 별거 아닌 것 같아 보여도 한 줄로 앱이 통째로 설치되고 실행이 되고 있기 때문에 생각보다 대단한 것이다! + +#### `docker run` 이 실행될 때... + +- 우선 해당 이미지의 latest version (`IMAGE:latest`) 가 로컬에 있는지 확인한다. 없으면 Docker Hub 에서 다운받는다. +- 이미지로부터 컨테이너를 생성하고 `[COMMAND]` 를 실행한다. + +매 번 `docker run` 을 할 때마다 실행할 명령을 입력하는 것은 불편하므로 보통은 Dockerfile 을 사용해서 실행할 명령을 이미지 생성 과정에 포함시킨다. + +이미지도 업데이트 될 수 있기 때문에, 이름은 유지한 채 tag 를 업데이트하여 버전을 관리한다. `latest` 태그는 당연히 이미지의 최신 버전을 가리킨다. + +### 2.1.2 Creating a trivial Node.js app + +HTTP 요청을 받으면 실행 중인 머신의 hostname 을 포함하여 응답을 돌려주는 앱을 node.js 로 만들고 Docker 이미지로 패키징 한다. + +패키징 후 컨테이너를 실행하여 HTTP 요청을 날려보면 응답에 포함된 hostname 을 확인하면 컨테이너 내에서 독립적인 hostname 을 갖는다는 것을 확인할 수 있을 것이다. + +(Docker 가 실행 중인 머신의 hostname 이 아닌 다른 결과가 나올 것) + +### 2.1.3 Dockerfile 만들기 + +애플리케이션을 이미지로 패키징하려면 Dockerfile 에 이미지를 만들 때 실행해야 하는 명령들을 넣어주면 된다. + +- `FROM` : 베이스 이미지로 사용할 이미지를 정한다. `FROM ubuntu:20.04` 라고 하면 ubuntu 20.04 환경에서 시작한다. +- `ADD ` : 로컬의 `src` 경로의 파일을 컨테이너 내 `dst` 경로로 복사한다. +- `ENTRYPOINT ["executable", "param1", "param2"]` : 컨테이너 내부 shell 에서 `$ executable param1 param2` 를 실행하는 것과 동일하다. 다만 Dockerfile 전체에서 가장 마지막 `ENTRYPOINT` 명령만 실행되므로 한 번만 사용할 수 있다. + +### 2.1.4 컨테이너 이미지 빌드 + +'이미지를 빌드한다'는 것은 Dockerfile 에 있는 명령을 실행한다고 생각하면 될 것이다. 물론 Dockerfile 없이 빌드 할 수 있다. 깃헙에서 commit changes 하듯이, 컨테이너 내부에서 명령을 직접 실행한 뒤 컨테이너의 상태를 저장 할 수 있다. 하지만 당연히 직접 실행하는 것보다는 파일로 관리하는 것이 편할 것이다. + +```bash +$ docker build -t +``` + +- `-t` 옵션은 이미지의 태그를 지정해준다. +- `PATH` 에 있는 Dockerfile 을 이용하여 이미지를 빌드한다. + +이미지 빌드시 `PATH` 의 모든 파일이 도커 데몬에 옮겨진 다음 그 곳에서 이미지를 빌드한다. + +#### 이미지 레이어 + +이미지는 여러 레이어로 구성이 되어있다. `docker build` 를 해보면 step 별로 진행 되는 것을 볼 수 있는데 각 step 마다 layer 가 하나 생성된다. Dockerfile 명령 한 줄마다 layer 하나를 쓰게 된다. + +다만 `&&` 를 사용해서 Dockerfile 의 line 수를 줄이면, 나중에 명령을 수정할 때 만들어 둔 layer 를 재사용하지 못하게 되는 경우가 있다. 그러면 이미지 빌드가 느려진다. + +이미지는 용량을 많이 차지하게 될 수 있으므로 한 번만 저장하고 같은 레이어는 재사용하게 된다. + +```bash +$ docker images +``` + +- 로컬에 있는 이미지 목록을 보여준다. + +### 2.1.5 컨테이너 실행 + +```bash +$ docker run [OPTIONS] # 기본형 +$ docker run --name -p : -d +``` + +- `IMAGE` 로부터 컨테이너를 실행한다. +- `--name` 옵션은 실행된 컨테이너에 `CONTAINER_NAME` 으로 이름을 부여한다. +- `-p` (`--publish`) 옵션은 호스트의 포트를 이용하여 컨테이너의 포트에 접근할 수 있도록 한다. 컨테이너의 포트를 호스트 포트로 publish 한다. +- `-d` (`--detach`) 옵션은 background 에서 작업이 수행되도록 한다. + +```bash +$ docker ps +``` + +- 실행 중인 컨테이너의 목록과 간략한 정보를 확인한다. +- 컨테이너 ID, 이름, 컨테이너 생성에 사용된 이미지, 컨테이너 내부에서 실행 중인 명령을 확인할 수 있다. +- 자세히 보고 싶으면 `docker inspect ` 를 사용하여 JSON 으로 자세한 정보를 확인한다. + +### 2.1.6 컨테이너 내부 들여다보기 + +안에서 명령을 실행할 일이 분명 생긴다. + +```bash +$ docker exec [OPTIONS] [ARGS] # 기본형 +$ docker exec -it +``` + +- `exec` 는 `CONTAINER` 내에서 `COMMAND` 를 실행하라는 의미이다. +- `-i` (`--interactive`) 는 STDIN (표준 입력)을 열어준다. +- `-t` (`--tty`) 는 pseudo-TTY (유사 터미널)을 열어준다. + +그러므로 `docker exec -it bash` 를 하게 되면 컨테이너 내부에서 `bash` 명령이 터미널 내에서 실행되고, 표준 입력이 연결되어 있으므로 명령을 입력할 수 있게 된다. (쉘을 딸 수 있다는 것이다) + +#### 독립된 공간 + +컨테이너 내에서 `ps aux` 를 입력하면 호스트 머신에서 돌아가는 프로세스들은 보이지 않는다. 한편 호스트 머신에서 `ps aux` 를 입력한후 `grep` 으로 프로세스를 찾아보면 컨테이너 내에서 동작 중인 프로세스가 목록에 있음을 확인할 수 있다. + +즉 독립적인 공간에서 실행되는 것처럼 환경을 제공하지만, 실제로는 호스트의 프로세스인 것임을 확인할 수 있다. + +마찬가지로 `ls` 명령을 쳐보면 내부에 독립적인 파일시스템을 갖고 있음을 확인할 수 있다. (물론 Dockerfile 에서 직접 추가한 파일이 있을 수도 있고, 특정 디렉토리를 마운트 한 경우 공유가 되기도 한다.) + +### 2.1.7 컨테이너 정지 및 삭제 + +```bash +$ docker stop # 정지 +$ docker rm # 삭제 +``` + +컨테이너를 정지하게 되면 그 잔해가 남아있게 되는데, `rm` 을 이용해 삭제해주면 완전히 제거된다. + +정지한 컨테이너는 `docker ps` 로 확인이 불가능하므로 (실행 중인 컨테이너만 보인다), `docker ps -a` 로 확인한다. + +### 2.1.8 이미지 레지스트리에 이미지 push 하기 + +주의사항: Docker Hub 에 push 하려면 이미지의 레포지토리 이름이 Docker Hub ID 로 시작해야 한다. + +#### 이미지 태그 + +```bash +$ docker tag +``` + +- 새로운 태그 `TARGET_IMAGE` 를 만들어서 `SOURCE_IMAGE` 를 가리키게 한다. +- Alias 를 만든다. 이미지를 복사하는 것이 아니다. `docker images` 로 확인하면 `SOURCE_IMAGE` 가 이름이 바뀐게 아니라 새로 생겼음을 확인할 수 있다. (메모리 낭비 금지) + +`docker login` 으로 로그인 한 뒤, `docker push ` 으로 이미지를 push 할 수 있다. 당연히 그 반대인 `docker pull` 도 가능하다. + +## 2.2 쿠버네티스 클러스터 설정 +--- + +일단 로컬에서 하려면 Minikube 를 설치하면 된다. + +### 2.2.1 Minikube 를 이용한 단일 노드 클러스터 + +- Minikube 를 설치하고, `kubectl` 을 설치하면 된다. +- `minikube start` 하고 `kubectl cluster-info` 하면 클러스터가 생성된 것을 확인할 수 있다. + +개인적으로 oh-my-zsh 를 사용하는데 `kubectl` 까지 치면 옆에 현재 context 가 나와서 참 좋다. + +### 2.2.2 Google Kubernetes Engine (GKE) + +- 세팅은 패스 (요새 무료 크레딧도 주던데...) + +```bash +$ gcloud container clusters create --num-nodes --machine-type +``` + +- 쿠버네티스 클러스터 (노드의 집합)를 생성한다. +- 클러스터 내에 몇 개의 노드가 있는지 설정할 수 있다. +- `--machine-type` 옵션으로 얼마나 비싼 기계를 쓸지 고를 수 있다. + +각 worker 노드에서는 Docker, Kubelet, kube-proxy 가 실행되고 있고, 마스터 노드가 이들을 관리하게 된다. +`kubectl` 을 이용하면 마스터 노드에 있는 REST API 서버를 호출하여 작업하게 된다. + +노드를 생성했으니 노드의 목록을 확인하는 방법을 알아보자. + +```bash +$ kubectl get nodes +``` + +- 노드 목록을 보여준다. + +사실 `kubectl get` 은 docs 에도 나와 있듯이 '하나 이상의 리소스를 나열'한다. 더 자세히 보고싶으면, + +```bash +$ kubectl describe node +``` + +으로 확인하면 된다. + +### 2.2.3 Alias for `kubectl` + +솔직히 `kubectl` 매번 입력하기 귀찮다. 적당히 자주 쓰는 명령 alias 해둔다. + +`bash-completion` 을 사용하면 편리하다고 한다. + + +## 2.3 Kubernetes 에서 앱 실행하기 +--- + +### 2.3.1 Node.js 앱 배포하기 + +```bash +$ kubectl run [NAME] --image=[IMAGE] --port=[PORT] --generator=run/v1 +``` + +- 설정 파일 (`.yaml`) 없이도 실행할 수 있게 해준다. +- `--image` 옵션으로 사용할 이미지를 설정할 수 있다. +- `--port` 옵션으로 포트를 개방할 수 있다. +- `--generator` 는 *ReplicationController* 를 생성하기 위함이라고 한다. + +쿠버네티스는 컨테이너를 개별적으로 다루지는 않는 편이다. 대신 함께 존재하는 여러 컨테이너들을 다룬다. 이러한 컨테이너의 묶음을 **pod** 라고 한다. + +Pod 안에 여러 개의 컨테이너가 존재할 수 있고, 그 컨테이너는 모두 같은 worker 노드에서 실행되며, Linux namespace 를 공유한다. 각 pod 는 마치 개별적인 머신처럼 동작하여 IP, hostname, 프로세스 등을 개별적으로 갖게 된다. + +당연히, pod 를 가져오는 명령은 + +```bash +$ kubectl get pods +``` + +이다. `READY` 열을 보면 컨테이너가 실행 대기 중인 경우 `0/1` 과 같이 나올 수도 있다. + +#### 무슨 일이 일어났나요? + +- `kubectl run` 을 실행하면 Kubernetes API 서버에 REST HTTP 요청을 보낸다. +- Kubernetes API 서버는 요청을 받아 새로운 ReplicationController 오브젝트를 생성한다. +- ReplicationController 가 새로운 pod 를 생성하게 되고, 이는 Scheduler 에 의해 어떤 worker 노드에 할당된다. +- Kubelet 이 동작하여 Docker 를 실행하게 하고 Docker 가 컨테이너를 실행한다. + +### 2.3.2 애플리케이션에 접근하기 + +배포한 앱은 pod 에서 실행되므로 IP가 할당되는데, 이 IP는 클러스터 내부에서 사용되는 IP이므로 외부에서 접속이 불가능하다. Service 오브젝트를 사용하여 외부로 공개해야 한다. + +`LoadBalancer`-type service 를 생성하면 이 load balancer 의 공개 IP를 이용하여 pod 에 접근할 수 있게 된다. + +```bash +$ kubectl expose rc --type=LoadBalancer --name +``` + +- `expose` 에서 외부로 공개한다는 의미를 알 수 있다. +- `rc` 는 `ReplicationController` 의 약자다. + +서비스 오브젝트를 생성했다면 서비스 목록을 확인한다. + +```bash +$ kubectl get services +``` + +- 실행 중인 서비스 목록을 확인한다. +- `EXTERNAL-IP` 에 공개 IP가 적혀있다. 서비스 생성에 시간이 걸릴 수 있으니 IP가 할당되려면 조금 기다려야 할지도? + +### 2.3.3 The logical parts of your system + +#### Pod + +Kubernetes 의 basic building block 은 pod 이다! Pod 안에는 여러 개의 컨테이너가 실행될 수 있고, pod 는 각각 IP 주소와 hostname 을 갖는다. + +#### ReplicationController + +Pod 를 만든 것은 ReplicationController 인데, 얘는 pod 의 개수를 조절하고 관리한다. Pod 를 한 개 만들라고 했다면 정확히 1개가 유지되도록 한다. 오류가 나서 종료되더라도 다시 시작시켜 준다. 또 서비스가 굉장히 커져서 pod 하나만으로는 트래픽을 감당할 수 없다면, pod 를 여러 개 복제하여 실행하는데 사용할 수 있다. + +#### Service + +Pod 의 경우 오류가 나거나 로드 밸런싱이나 효율적인 시스템 자원의 활용을 위해 중지되거나 다른 노드로 옮겨가는 등 수시로 생겼다 사라졌다 할 수 있다. 이 때마다 (내부) IP가 바뀌게 되므로 이를 효율적으로 관리해주는 service 가 필요하게 된다. 공개 IP를 하나 설정하여 외부에서 접근이 가능하도록 한다. + +### 2.3.4 Horizontal Scaling + +```bash +$ kubectl get replicationcontorllers +``` + +- 존재하는 ReplicationController 를 확인한다. +- `DESIRED` 와 `CURRENT` 열에서 있어야 하는 pod 개수와 현재 pod 개수를 확인할 수 있다. + +```bash +$ kubectl scale rc --replica= +``` + +- `DESIRED` 값을 `NUM` 으로 설정한다. +- 그러면 ReplicationController 가 알아서 개수를 맞춰준다. + +변경사항이 있다면 `kubectl get rc` 와 `kubectl get pods` 로 `DESIRED` / `CURRENT` 값이 변경 되었고 pod 가 실행 중인지 확인하면 된다. Kubernetes 없이 복제하려 했으면 얼마나 번거로웠을까? + +위의 node.js 앱을 배포한 상태에서 pod 가 여러 개 생겼으니 외부에서 HTTP 요청을 보내보면, 안에서 load balancing 이 동작하고 있기 때문에 꼭 같은 hostname 을 반환하지는 않는다. + +### 2.3.5 앱이 실행 중인 노드 확인 + +보통 어느 노드에서 실행 중인지 중요하지는 않지만 확인할 수 있긴 하다. 보통은 할당된 노드의 자원 (CPU 사용량, 메모리) 등을 확인해야 하긴 한다. + +```bash +$ kubectl get pods -o wide # 더 많은 정보 출력 +$ kubectl describe pod # 상세 정보 출력 +``` + +### 2.3.6 Kubernetes Dashboard + +GUI 도 지원해 준다. + +```bash +$ kubectl cluster-info | grep dashboard +``` + +- 대시보드가 실행 중인 주소를 알려줄 것이다. +- Minikube 의 경우 `minikube dashboard`. \ No newline at end of file diff --git a/_posts/Development/Web/2023-06-25-blog-moving.md b/_posts/Development/Web/2023-06-25-blog-moving.md index 8b0f870..3fbe2da 100644 --- a/_posts/Development/Web/2023-06-25-blog-moving.md +++ b/_posts/Development/Web/2023-06-25-blog-moving.md @@ -6,6 +6,8 @@ tags: [development, web] title: "블로그 이주 이야기" date: "2023-06-25" github_title: "2023-06-25-blog-moving" +image: + path: /assets/img/posts/blog-logo.jpeg --- ![blog-logo.png](../../../assets/img/posts/blog-logo.png) _New blog logo_ diff --git a/assets/img/posts/k8s-01.jpeg b/assets/img/posts/k8s-01.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12de5ee6e23b4b4b36631c6abd97f3f6819b7150 GIT binary patch literal 61789 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 literal 0 HcmV?d00001 diff --git a/assets/img/posts/k8s-02.jpeg b/assets/img/posts/k8s-02.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3dc89e81ea4a6f26a4148f44fe91696850455cb7 GIT binary patch literal 25435 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%0DZea+f?|Z9qttxSb;+HN-z{;f#9qeh&FNPR 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 pY}w#kwc!u1Kk5GuD7^jHYo%^jV6e+@HM7CyXR