Docker & Kubernetes

컨테이너 환경 표시 도커 클라이언트와 서버 버전 표시 docker version 구체적인 환경 정보 표시 docker info 컨테이너의 3대 기능 기본이 되는 기능을 뽑자면 아래 3가지 기능이다. 1. 컨테이너 이미지 빌드 현 디렉터리에 있는 Dockerfile을 바탕으로 이미지를 빌드 docker build -t 리포지터리:태그 . docker image build -t 리포지터리:태그 . 로컬 이미지 목록 docker images docker image ls 로컬 이미지 삭제 docker rmi 이미지 docker image rm 이미지 로컬 이미지 일괄 삭제 docker rmi -f 'docker images -aq' docker image prune -a 2. 이미지의 이동과 공유 원격 리포지터..
컨트롤러란? 컨트롤러는 파드를 제어한다. 파드에게 부여할 워크로드의 타입, 즉 처리에 따라서 적절한 컨트롤러를 선택해야 한다. 워크로드 타입 프런트엔드 처리 스마트폰, IoT기기, 컴퓨터 등의 클라이언트로부터 요청을 직접 받아들이는 워크로드를 총칭한다. 이 타입의 워크로드는 대량의 클라이언트 요청에 대해 짧은 시간에 응답을 반환하는 것이 중요하다. 실시간으로 반응해야 하고 사용자들이 답답합을 느껴선 안된다. IoT 기기로부터의 요청은 기기로 부터 끈임없이 만들어지는 데이터를 받아들여서 처리해야 한다. 이러한 워크로드 특성에 대응하기 위해서는 요청에 대응하는 처리를 복수의 파드에 분담하도록 설계해야 한다. 또한, 24시간 무정지로 서비스를 제공하면서도 빠르게 신기능을 배포할 수 있어야 한다. 백엔드 처리 ..
서비스란? 쿠버네티스의 서비스는 클라이언트의 요청을 파드에 전달하는 역활을 담당한다. 이러한 서비스가 필요한 이유는 파드의 IP 주소가 기동할 때마다 바뀌기 때문이다. 그래서 파드에 접속해야하는 클라이언트는 서비스가 가지는 대표 IP를 사용해서 접속해야 한다. 서비스는 로드밸런서의 역활을 가지며, 클라이언트의 요청을 받기 위한 대표 IP 주소를 획득한다. 서비스의 이름은 내부 DNS에 등록되기 때문에 클라이언트는 서비스의 이름만으로 서비스의 IP 주소를 획득할 수 있다. 서비스는 실렉터(selector)에 지정된 라벨과 일치하는 파드 중 하나에게 요청을 전달한다. 더보기 파드는 기동될 때 라벨이나 IP 주소를 포함한 자신의 오브젝트 정보를 마스터 노드의 etcd에 등록한다. 그래서 서비스의 전송처를 결정..
클러스터 네트워크란? 클러스터 네트워크는 쿠버네티스 클러스터 내부에서 사용되는 네트워크다. 파드는 이 네트워크상의 IP 주소를 부여받아 다른 노드에 있는 파드와 서로 통신한다. 서비스의 IP 주소나 포트번호를 클러스터 외부 네트워크에서 접근할 수 있게 하려면, 서비스 타입을 NodePort 혹은 LoadBalancer로 설정하거나 인그레스를 함께 사용하면 된다. Flannel 간단한 L3 네트워크를 노드 간에 구축한다. 각 노드 위에 서브넷을 구성해서 한 노드 위에 파드가 다른 노드 위에 파드랑 통신할 수 있도록 한다. Flannel의 파드는 데몬셋 컨트롤러에 의해 배포된다. 그래서 클러스터에 새로운 노드가 추가되면 자동적으로 파드 네트워크가 확장된다. Flannel은 네트워킹 기능만을 갖추고 있으며, ..
파드의 라이프 사이클 쿠버네티스의 트러블 슈팅 중 가장 많이 발생하는 것이 파드의 기동 실패 원인 분석이다. 개인의 개발 환경에서 컨테이너 이미지를 빌드하고 쿠버네티스 환경에 배포했을 때 제일 먼저 경험하는 것이 컨테이너가 기동하지 않거나 재시작을 반복하는 현상이다. 파드의 상태가 가지는 의미를 이해하고 적절한 대처를 할 수 있어야 문제를 해결할 수 있다. 문제를 파악하기 위해서는 kubectl get pods 명령어를 실행 해 나타나는 STATUS 열의 정보가 중요하다. 이 필드의 정보는 Kubernetes API를 통해 획득하는데, 이 API를 통해서 얻을 수 있는 다양한 정보 중에서 도움이 될 만한 정보가 선별되어 STATUS 열에 표시된다. STATUS 의미와 대책 ContainerCreating..
파드란? 파드는 쿠버네티스에서 컨테이너를 실행하는 최소 단위로 한개 혹은 여러 개의 컨테이너를 포함한다. 하나의 파드에 속하는 모든 컨테이너들은 같은 노드에서 동작한다. 파드는 다음과 같은 특징을 가진다. 컨테이너 재사용 촉진을 위한 플랫폼 파드는 하나의 목적을 위해 만들어진 컨테이너를 부품처럼 조합할 수 있도록 설계되었다. 파드 내부의 컨테이너들은 파드의 IP 주소와 포트번호를 공유한다. 파드의 내부 컨테이너들은 localhost로 서로 통신할 수 있다. 파드의 내부 컨테이너들은 System V 프로세스 통신이나 POSIX 공유 메모리를 사용하여 서로 통신할 수 있다. 파드의 내부 컨테이너들은 파드의 볼륨을 마운트하여 파일 시스템을 공유할 수 있다. 이 기능들은 같은 파드 내의 컨테이너 사이에서만 가능..
쿠버네티스 API란? 쿠버네티스의 대한 조작은 모두 API를 통해 이뤄진다. 커맨드 라인 유저 인터페이스인 kubectl은 마스터 노드상의 kube-apiserver에게 쿠버네티스 API 규약에 맞게 기술된 목표 상태 선언서인 매니페스트를 YAML 형식 혹은 JSON 형식으로 전송하여 오브젝트를 만들고, 바꾸고, 제거하는 일을 한다. 이 API 규약은 새로운 버전이 공개될 떄마다 추가나 변경된 점이 반영된 API 래퍼런스가 공개된다. 오브젝트란? 쿠버네티스 오브젝트란 클러스터 내부의 엔티티로서, 이후 설명할 파드, 컨트롤러, 서비스 등의 인스턴스를 의미한다. 각각의 오브젝트는 쿠버네티스 API의 리소스 종류에 맞게 설정되고 생성된다. 오브젝트는 지정된 상태가 유지되도록 쿠버네티스에 의해 제어된다. 각 오..
쿠버네티스의 아키텍처 및 구성요소 쿠버네티스는 마스터와 노드로 구성된다. 쿠버네티스 클러스터를 구성하는 코어 프로세스(컨테이너) kubectl K8s 클러스터를 조작하기 위한 도구로 가장 비번하게 이용되는 커맨드 라인 인터페이스다. kube-apiserver kubectl 등의 API 클라이언트로부터 오는 REST 요청을 검증하고, API 오브젝트를 구성하고 상태를 보고한다. kube-scheduler 쿠버네티스의 기본 스케줄러이며, 새로 생성된 모든 파드에 대해 실행할 최적의 노드를 선택한다. 스케줄러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 높은 노드를 선택한다. kube-controller-manager 컨트롤러를 구동하는 마스터상의 컴포넌트 cloud-controller-man..
레지스트리와 쿠버네티스의 관계 쿠버네티스에서도 레지스트리에 이미지를 다운받아 컨테이너를 실행한다. 쿠퍼네티스에서 컨테이너가 동작할 때까지의 흐름을 설명하면 다음과 같다. docker build로 이미지를 빌드한다. docker push로 이미지를 레지스트리에 등록한다. kubectl 커맨드로 매니페스트에 기재한 오브젝트들의 생성을 요청한다. 매니페스트에 기재된 리포지터리로부터 컨테이너의 이미지를 다운로드 한다. 컨테이너를 파드 위에서 가동한다. 이처럼 레지스트리는 쿠버네티스를 사용할 때 반드시 필요한 서비스다. 도커와 쿠버네티스의 연동 쿠버네티스는 도커를 컨테이너의 런타임 환경으로 사용한다. 쿠버네티스를 설치할 때 제일 먼저 도커를 설치해야 하는 이유도 이 때문이다. 도커 데몬 프로세스인 dockerd와..
도커의 아키텍처 리눅스 커널이 제공하는 기능을 활용하면 도커가 아니라 자체적으로 컨테이너를 만드는 것도 가능하다. 그러나 직접 개발한 컨테이너는 커뮤니티가 개발한 컨테이너를 재상용하는 것이 어렵고 공유하기도 어렵다. 도커는 스프트웨어 개발자가 컨테이너를 이용해 개발 생산성을 높일 수 있도록 컨테이너를 Build(작성), Ship(이동), Run(실행)할 수 있는 기능을 지원한다. 이런한 기능을 제공하는 도커는 도커 데몬 서버와 클라이언트인 도커 커맨드, 그리고 이미지 보관소인 레지스트리로 구성된다. 1. 도커 데몬 도커 데몬은 클라이언트인 도커 커맨드의 명령을 받아들여서 도커 오브젝트인 이미지, 컨테이너, 볼륨, 네트워크 등을 관리한다. 그리고 네트워크 너머에 있는 원격 클라이언트로 부터 요청을 받는 것..
beekei
'Docker & Kubernetes' 카테고리의 글 목록 (4 Page)