🚀devops/ k8s-in-action3장. 파드 : 쿠버네티스에서 컨테이너 실행약 3분GitHub에서 보기3장. 파드 : 쿠버네티스에서 컨테이너 실행 3.1. 파드란? 파드는 함께 배치된 컨테이너 그룹이며 쿠버네티스의 기본 빌딩 블록이다. 컨테이너를 개별적으로 배포하기보다는 컨테이너를 가진 파드를 배포한다. 일반적으로 파드는 하나의 컨테이너만 포함한다. 파드가 여러 컨테이너를 가지고 있을 경우에, 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며, 여러 워커 노드에 걸쳐 실행되지 않는다. 3.1.1. 왜 파드가 필요한가? 컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계했다. 각 프로세스를 자체의 개별 컨테이너로 실행해야 한다. 이것이 도커와 쿠버네티스를 사용하는 방법이다. 3.1.2. 파드 이해하기 여러 프로세스를 단일 컨테이너로 묶지 않기 때문에, 컨테이너를 함께 묶고 하나의 단위로 관리할 수 있는 구조가 필요하다. 이게 파드가 필요한 이유이다. 그룹 안에 있는 컨테이너가 특정한 리소스를 공유하기 위해 각 컨테이너가 완벽하게 격리되지 않도록 한다. 쿠버네티스는 파드 안에 있는 모든 컨테이너가 자체 네임스페이스가 아닌 동일한 리눅스 네임스페이스를 공유하도록 도커를 설정한다. 파드의 모든 컨테이너는 동일한 네트워크 네임스페이스와 UTS 네임스페이스 안에서 실행되기 때문에, 모든 컨테이너는 같은 호스트 이름과 네트워크 인터페이스를 공유한다. 컨테이너가 동일한 IP와 포트 공간을 공유하는 방법 파드 안의 컨테이너는 동일한 IP 주소와 포트 공간을 공유한다. 이는 동일한 파드 안 컨테이너에서 실행 중인 프로세스가 같은 포트 번호를 사용하지 않도록 주의해야 함을 의미한다. 다른 파드에 있는 컨테이너는 서로 다른 포트 공간을 갖기 떄문에 포트 충돌이 일어나지 않는다. 파드 안에 있는 모든 컨테이너는 동일한 루프백 네트워크 인터페이스를 갖기 때문에, 컨테이너들이 로컬호스트를 통해 서로 통신할 수 있다. 파드 간 플랫 네트워크 소개 쿠버네티스 클러스터의 모든 파드는 하나의 플랫한 공유 네트워크 주소 공간에 상주한다. 모든 파드는 다른 파드의 IP 주소를 사용해 접근하는 것이 가능하다. 둘 사이에는 어떠한 NAT(Network Address Translation)도 존재하지 않는다. 이것은 실제 노드 간 네트워크 토폴로지에 관계없이, 근거리 네트워크에 있는 컴퓨터 간의 통신과 비슷하다. 3.1.3 파드에서 컨테이너의 적절한 구성 각 파드에는 밀접하게 관련 있는 구성 요소나 프로세스만 포함해야 한다. 프론트엔드 서버와 백엔드 서버를 같은 파드에 두어야 하는가? 둘은 항상 같은 노드에서 실행된다. 만약에 두 노드를 가진 쿠버네티스 클러스터가 있고 이 파드 하나만 있다면, 워커 노드 하나만 사용하고 두 번째 노드에서 이용할 수 있는 컴퓨팅 리소스를 활용하지 않게 된다. 파드를 두 개로 분리하면 쿠버네티스가 프론트엔드를 한 노드 그리고 백엔드는 다른 노드에 스케줄링 해 인프라의 활용도를 향상시킬 수 있다. 쿠버네티스는 개별 컨테이너를 수평으로 확장할 수 없다. 대신 전체 파드를 수평으로 확장한다. 일반적으로 프론트엔드 구성 요소는 백엔드와 완전히 다른 스케일링 요구 사항을 갖고 있어 개별적으로 확장하는 경향이 있다. 그러므로 프론트엔드 파드와 백엔드 파드를 나누는 것이 바람직할 것 이다. 파드에서 여러 컨테이너를 사용하는 경우 하나의 주요 프로세스와 하나 이상의 보완 프로세스로 구성된 경우 예시: 주 컨테이너가 특정 디렉터리에서 파일을 제공하는 웹 서버 추가 컨테이너 : 외부 소스에서 주기적으로 콘텐츠를 받아 웹 서버의 디렉터리에 저장 파드에서 여러 컨테이너를 사용하는 경우 결정 컨테이너를 함께 실행해야 하는가? 혹은 서로 다른 호스트에서 실행할 수 있는가? 여러 컨테이너가 모여 하나의 구성 요소를 나타내는가? 혹은 개별적인 구성 요소인가? 컨테이너가 함께 스케줄링 되어야 하는가? 혹은 개별적으로 스케줄링 되어야 하는가? 3.2. YAML 또는 JSON 디스크립터로 파드 설정
3장. 파드 : 쿠버네티스에서 컨테이너 실행 3.1. 파드란? 파드는 함께 배치된 컨테이너 그룹이며 쿠버네티스의 기본 빌딩 블록이다. 컨테이너를 개별적으로 배포하기보다는 컨테이너를 가진 파드를 배포한다. 일반적으로 파드는 하나의 컨테이너만 포함한다. 파드가 여러 컨테이너를 가지고 있을 경우에, 모든 컨테이너는 항상 하나의 워커 노드에서 실행되며, 여러 워커 노드에 걸쳐 실행되지 않는다. 3.1.1. 왜 파드가 필요한가? 컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계했다. 각 프로세스를 자체의 개별 컨테이너로 실행해야 한다. 이것이 도커와 쿠버네티스를 사용하는 방법이다. 3.1.2. 파드 이해하기 여러 프로세스를 단일 컨테이너로 묶지 않기 때문에, 컨테이너를 함께 묶고 하나의 단위로 관리할 수 있는 구조가 필요하다. 이게 파드가 필요한 이유이다. 그룹 안에 있는 컨테이너가 특정한 리소스를 공유하기 위해 각 컨테이너가 완벽하게 격리되지 않도록 한다. 쿠버네티스는 파드 안에 있는 모든 컨테이너가 자체 네임스페이스가 아닌 동일한 리눅스 네임스페이스를 공유하도록 도커를 설정한다. 파드의 모든 컨테이너는 동일한 네트워크 네임스페이스와 UTS 네임스페이스 안에서 실행되기 때문에, 모든 컨테이너는 같은 호스트 이름과 네트워크 인터페이스를 공유한다. 컨테이너가 동일한 IP와 포트 공간을 공유하는 방법 파드 안의 컨테이너는 동일한 IP 주소와 포트 공간을 공유한다. 이는 동일한 파드 안 컨테이너에서 실행 중인 프로세스가 같은 포트 번호를 사용하지 않도록 주의해야 함을 의미한다. 다른 파드에 있는 컨테이너는 서로 다른 포트 공간을 갖기 떄문에 포트 충돌이 일어나지 않는다. 파드 안에 있는 모든 컨테이너는 동일한 루프백 네트워크 인터페이스를 갖기 때문에, 컨테이너들이 로컬호스트를 통해 서로 통신할 수 있다. 파드 간 플랫 네트워크 소개 쿠버네티스 클러스터의 모든 파드는 하나의 플랫한 공유 네트워크 주소 공간에 상주한다. 모든 파드는 다른 파드의 IP 주소를 사용해 접근하는 것이 가능하다. 둘 사이에는 어떠한 NAT(Network Address Translation)도 존재하지 않는다. 이것은 실제 노드 간 네트워크 토폴로지에 관계없이, 근거리 네트워크에 있는 컴퓨터 간의 통신과 비슷하다. 3.1.3 파드에서 컨테이너의 적절한 구성 각 파드에는 밀접하게 관련 있는 구성 요소나 프로세스만 포함해야 한다. 프론트엔드 서버와 백엔드 서버를 같은 파드에 두어야 하는가? 둘은 항상 같은 노드에서 실행된다. 만약에 두 노드를 가진 쿠버네티스 클러스터가 있고 이 파드 하나만 있다면, 워커 노드 하나만 사용하고 두 번째 노드에서 이용할 수 있는 컴퓨팅 리소스를 활용하지 않게 된다. 파드를 두 개로 분리하면 쿠버네티스가 프론트엔드를 한 노드 그리고 백엔드는 다른 노드에 스케줄링 해 인프라의 활용도를 향상시킬 수 있다. 쿠버네티스는 개별 컨테이너를 수평으로 확장할 수 없다. 대신 전체 파드를 수평으로 확장한다. 일반적으로 프론트엔드 구성 요소는 백엔드와 완전히 다른 스케일링 요구 사항을 갖고 있어 개별적으로 확장하는 경향이 있다. 그러므로 프론트엔드 파드와 백엔드 파드를 나누는 것이 바람직할 것 이다. 파드에서 여러 컨테이너를 사용하는 경우 하나의 주요 프로세스와 하나 이상의 보완 프로세스로 구성된 경우 예시: 주 컨테이너가 특정 디렉터리에서 파일을 제공하는 웹 서버 추가 컨테이너 : 외부 소스에서 주기적으로 콘텐츠를 받아 웹 서버의 디렉터리에 저장 파드에서 여러 컨테이너를 사용하는 경우 결정 컨테이너를 함께 실행해야 하는가? 혹은 서로 다른 호스트에서 실행할 수 있는가? 여러 컨테이너가 모여 하나의 구성 요소를 나타내는가? 혹은 개별적인 구성 요소인가? 컨테이너가 함께 스케줄링 되어야 하는가? 혹은 개별적으로 스케줄링 되어야 하는가? 3.2. YAML 또는 JSON 디스크립터로 파드 설정