Docker & Kubernetes

파드 내에 초기화만을 담당하는 컨테이너를 설정할 수도 있다. 그러면 초기화만을 수행하는 컨테이너와 요청을 처리하는 컨테이너를 별도로 개발하여 각각 재사용할 수 있다. 예를 들어 스토리지를 마운트할 때 '스토리지 안에 새로운 디럭터리를 만들고, 소유자를 변경한 후 데이터를 저장'하는 것과 같은 초기화 처리를 전담할 수 있다. Init-sample.yml apiVersion: v1 kind: Pod metadata: name: init-sample spec: containers: - name: main # 메인 컨테이너 image: ubuntu command: ["/bin/sh"] args: ["-c", "tail -f /dev/null"] volumeMounts: - mountPath: /docs # 마운..
파드의 동작 확인 이 전 블로그 글에서 생성한 nginx 파드가 정상적으로 동작하는지 확인해 보겠다. 이 nginx 파드는 백그라운드로 돌면서 클러스터 네트워크의 TCP 80번 포트에서 요청을 대기한다. 클러스터 네트워크는 K8s 클러스터를 구성하는 노드 간의 통신을 위한 폐쇄형 네트워크다. 다른 말로는 파드 네트워크라고 불린다. 클러스터 네트워크에서 오픈한 포트는 K8s 클러스터를 호스팅하는 컴퓨터에서도 접근할 수 없다. 이 말은 외부에서 접속할 수 없다는 뜻이다. 그렇기 때문에 대화형 파드를 기동해 접속해야 한다. 파드의 클러스터 네트워크의 IP 주소를 확인하고 싶은 경우에는 -o wide 옵션을 추가하면 된다. 여기서 얻은 IP에 curl로 접속을 시도해보면 다음과 같이 타임아웃이 될 뿐이다. K8..
매니페스트란 쿠버네티스의 오브젝트를 생성하기 위한 메타 정보를 YAML이나 JSON으로 기술한 파일이다. 실제 파드를 단독으로 기동하는 매니페스트를 작성하는 경우는 많지 않다. 보통 컨트롤러에 대한 매니페스트를 작성하는데 이때 파드에 대한 정보를 기술하는 부분이 포함된다. 이를 파드 템플릿이라고 하며, 파드의 매니페스트와 같다. 따라서 파드의 매니페스트를 기술하는 방법을 알고 있으면 컨트롤러를 사용할 때 도움이 된다. Nginx 컨테이너를 실행하는 매니페스트를 작성해보자. 주로 YAML파일이 JSON 파일보다 가독성이 좋아 많이 사용한다. 그리고 매니페스트를 작성할 때는 API 래퍼런스를 참고하는 것이 좋다. apiVersion: v1 kind: Pod metadata: name: nginx spen: ..
앞서 디플로이먼트 컨트롤러(Deployment Controller)에 의한 파드(Pod) 실행 예제에서 hello-world 컨테이너는 단발성 형태의 워크로드였다. 이에 적합한 쿠버네티스의 컨트롤러로 잡 컨트롤러(Job Controller)가 있다. kubectl 옵션으로 --restart=OnFailure를 지정하면 잡 컨트롤러의 제어하에 파드가 가동된다. 잡 컨트롤러는 파드가 비정상 종료하면 재시작하며 파드가 정상 종료될 때까지 지정한 횟수만큼 재실행한다. 디플로이먼트 컨트롤러를 만들 때와 마찬가지로 kubectl run 명령어 대신 kubectl create job 명령어를 사용해야 한다. 잡 컨트롤러는 컨테이너의 프로세스 종료 코드 값으로 성공과 실패를 판정하는데 , 그럼 job 2개를 생성해 하..
kubectl run에 옵션을 지정하면 파드를 디플로이먼트 컨트롤러 제어 하에 실행하는 것이 가능하다. 파드가 정지되었을 때 재기동시킬 필요가 있는지에 따라 옵션을 주면 된다. 이때 사용하는 옵션이 --restart=Always다. 반대로 파드만 독립적으로 실행하고 싶을 때는 --restart=Never 옵션을 주면 된다. --restart 옵션을 생략하면 기본값으로 Always로 실행된다. 즉 기본 적으로 디플로이먼트 컨트롤러에 의해 파드가 기동 된다. 디플로이먼트 컨트롤러 제어 하에 실행하는 방법은 아래와 같다. kubectl에 run은 서브 커맨드의 기능이 지나치게 방대해지는 것을 막기 위해 파드 자체를 만들 때만 run을 사용하고 디플로이먼트를 만들 때는 kubectl create deployme..
프로젝트 폴더 내부에 docker-compose.yml 파일을 저장한다. version: '2.2' services: my_web: container_name: my-web # 컨테이너 명 image: aspendigital/codeigniter:latest # 이미지 ports: # 포트 설정 - 80:80 volumes: # 볼륨 설정 - $PWD:/var/www/html docker-compose up 명령어로 다른곳에서도 같은 환경으로 설치할 수 있다. 참고 Docker 자습서 - 8부: Docker Compose 사용 Docker Compose를 설치하고 사용하는 방법을 설명합니다. docs.microsoft.com
이번엔 MacOS 환경에서 쿠버네티스를 설치해보겠다. Docker가 설치 안되신 분들은 Docker 홈페이지에 가서 다운로드 받아야 한다. Docker를 설치 후 로그인까지 한다. Homebrew 사용해서 쿠버네티스를 설치하려고 한다. 설치가 안되어 있으신분들은 Homebrew 홈페이지에 가서 설치법을 보고 설치하면 된다. brew install kubectl 또는 brew install kubernetes-cli를 실행해 kubectl을 설치한다. 설치한 버전이 맞는지 확인한다. kubectl cluster-info로 클러스터의 상태를 확인할 수 있다. The connection to the server was refused - did you specify the right host or port? 와..
윈도우를 사용한다면 전 블로그글을 확인하고 실행 환경을 구축해야한다. 파드 실행 kubectl run 명령어를 입력하고 결과가 표시될 때까지의 흐름은 다음과 같으며 도커 명령어와 비슷하다. kubectl이 쿠버네티스에게 명령을 전달한다. 노드에 이미지가 없으면 원격 리포지터리(Docker Hub)에서 다운로드 한다. 노드의 containerd가 컨테이너를 실행한다. kubectl이 터미널에 메시지를 표시한다. 쿠버네티스의 특징 중 하나는 개인의 PC, 퍼플릭 클라우드, 온프레미스의 모든 환경에서 동인할 kubectl 명령어로 조작할 수 있다는 점이다. 따라서, 미니쿠베를 잘 익혀두면 5,000대 규모의 클러스터(버전 1.11 기준)도 다룰 수 있다. 파드는 쿠버네티스에서 컨테이너를 실행하는 최소 단위이다..
쿠버네티스를 윈도우 환경에서 하나하나 정리하며 설치해보겠다. MacOS 환경에서 설치는 블로그글에서 확인할 수 있다. 아래 블로그 글에서 도커 툴박스를 설치한다. [Docker] 윈도우에서 도커 설치하기 (툴박스 vs 데스크탑) 0. 왜 툴박스를 사용해야 할까? 도커 데스크탑 애플리케이션은 윈도우 professional, enterprise, education 버전에서 사용이 가능하다. 윈도우 홈 버전은 Hyper-V를 지원하지 않아서 도커 툴박스를 사용해야 jinyes-tistory.tistory.com Docker Quickstart Terminal을 실행하면 E_FAIL (0x80004005) 에러가 날 수 있는데 그럴땐 CMD를 관리자로 열어 bcdedit /set hypervisorlauncht..
퍼시스턴스 볼륨 API 구현 예시 컨테이너를 지워도 데이터를 잃지 않기 위해서는 퍼시스턴트 볼륨을 사용해야 한다. 앞에 작성한 환경 변수 API 구현 예시에서 만든 my_daemon을 수정해서 퍼시스턴스 볼륨 API 예시를 구현해보자 외부 저장소를 마운트한 디렉터리에 데이터를 쓰도록 바꾸었다. 다시 이미지를 생성하고 컨테이너를 실행해보자 호스트상에 퍼시스턴트 볼륨으로 마운트할 디렉터리를 만든다. -v 호스트절대경로:컨테이너내경로로 볼륨의 path를 설정한다. 다른 터미널에서 컨테이너를 중지하고 다시 재기동 한다. COUNT가 이어서 출력되는것을 확인할 수 있다. 그럼 아예 컨테이너를 삭제 후 다시 컨테이너를 실행해보겠다. 삭제 후 컨테이너를 다시 생성해 시작해도 COUNT가 이어서 출력되는것을 확인 할 ..
beekei
'Docker & Kubernetes' 카테고리의 글 목록 (2 Page)