반응형

쿠버네티스란?

명칭

쿠버네티스(Kubernetes)는 간단하게 Kube 또는 k8s라고 부르기도 한다.
k8s의 뜻은 kubernetes의 첫 글자인 k와 마지막 글자인 s 사이의 스펠링이 8개인 것을 반영한 이름이다.

정의

쿠버네티스를 정의하려면 컨테이너의 개념을 알아야 한다.
컨테이너

  • 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술

컨테이너를 다루는 도구는 컨테이너 런타임이라고 하는데, 가장 유명한 컨테이너 런타임 어플리케이션은 당연 도커(Docker)라고 할 수 있다.
본론으로 들어와서, 쿠버네티스를 정의하자면 컨테이너 런타임을 통해 컨테이너를 오케스트레이션하는 도구이다.

여기서, 오케스트레이션은 무엇일까?
오케스트 레이션

  • 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

사용 이유

쿠버네티스의 정의는 결국 오케스트레이션이라고 할 수 있는데, 그래서 왜 사용하는지가 궁금할 수 있다. 우리는 멀쩡히 도커를 잘 사용하고 있기 때문이다.

단편적으로 예를 들면, 우리가 멀티 서버를 이용해 컨테이너 기반으로 서비스하려한다. 이때 각 서버의 컨테이너를 관리하기 위해서 도커만을 이용한다면... 각 서버에 접속하여 각 컨테이너의 설정을 해주고 등등 아주 복잡하다.

쿠버네티스를 이용한다면, 서버 클러스터링을 통해 각 서버의 리소스를 관리하여 어느 서버에 컨테이너를 할당할지, 컨테이너의 설정(리소스, 이미지 등)을 마스터 노드에서 관리하는 등의 관리를 쉽게 할 수 있다.

좀 더 어려운 느낌으로 사용 이유를 열거해보자.

  • 서비스 디스커버리와 로드 밸런싱 서비스는 IP주소 또는 DNS를 이용하여 노출시킬 수 있고, 트래픽에 따라 로드 밸런싱이 가능하다.
  • 스토리지 오케스트레이션 로컬 저장소, 공용 클라우드 등과 같이원하는 저장소 시스템을 자동으로 탑재할 수 있다.
  • 자동화된 빈 패킹(bin packing) 각 컨테이너가 필요로하는 리소스(CPU, RAM 등)을 지시하면 노드에 맞추어 핸들링 해준다.
  • 자동화된 복구 실패한 컨테이너를 다시 시작하고, 교체하고, 죽이는 작업을 통해 컨테이너를 자동으로 복구할 수 있다.
  • 시크릿과 구성 관리 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장할 수 있음.

쿠버네티스 용어

마스터: 쿠버네티스 노드를 제어하는 서버
노드: 테스크를 요청대로 수행하는 서버, 마스터도 노드의 일부
파드(Pod): 단일 노드에 배포된 하나 이상의 컨테이너 그룹. 파드에 있는 모든 컨테이너는 IP주소, IPC, 호스트 이름, 기타 리소스를 공유하며 파드는 기본 컨테이너에서 네트워크와 스토리지를 추상화함.
복제 컨트롤러: 클러스터에서 실행되어야하는 동일한 파드 사본의 개수를 제어
서비스: 파드에서 작업 정의를 분리함. SSH, Jupyter notebook등을 서비스로 설정할 수 있음.
Kubelet: 노드에 존재하며, 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인하는 서비스.
kubectl: 쿠버네티스 명령어 ex) # kubectl get pod

반응형

'MLops' 카테고리의 다른 글

쿠버네티스 설치  (0) 2022.10.02
Ubuntu에 Docker 설치  (0) 2022.10.01
반응형

도커가 완전히 망가졌다.

완전 삭제 후 재설치만이 답인 듯  하다. 망가진 이유는 모르겠다. 내가 안했다.

일단 도커 엔진을 삭제하자

sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli
sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce

그 다음 사용자가 만든 도커 관련 데이터를 다 삭제해주자.

sudo rm -rf /var/lib/docker /etc/docker 
sudo rm /etc/apparmor.d/docker 
sudo groupdel docker 
sudo rm -rf /var/run/docker.sock

사실 한번에 도커관련 모든 내용을 지우려면 아래와 같은 명령어를 입력하면 되는데 아무래도 루트부터 파인드해서 삭제하는건 리스크가 있어서 난 시도 안한다.

sudo find / -name "*docker*" -exec `rm -rf` {} +

그리고 도커 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io

도커 설치가 한 줄로 되다니 신기방기스

 

반응형
반응형

문제점:

컨테이너가 실행이 되고 있지 않다! 실행되고 있지 않은 컨테이너에 실행 명령어를 입력 중이다

해결 방법:

docker start [CONTAINER]

start로 실행 후 exec 및 run 명령어를 적용해주면 된다.

반응형
반응형

본 포스트는 도커가 설치되었다는 가정 하에 진행됩니다.

먼저 nvidia cuda image를 pull 해줍니다.

저는 ubuntu 18.04에 cuda 10.1, cudnn 7버전대를 사용해야하므로 아래 명령어를 기입합니다.

docker pull nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04

이후

docker images

위 명령어로 이미지 리스트를 확인하면 아래와 같이 확인이 가능합니다.

이제 컨테이너를 생성해줍니다.

nvidia-docker run -it --name [CONTAINER_NAME] [IMAGE_NAME] /bin/bash

-it는 키보드가 입력 가능하게 해주는 옵션입니다. 

생성하면 바로 컨테이너로 들어가게 되는데 -rm옵션이 있을 때 컨테이너 밖으로 나오면 그 컨테이너는 삭제됩니다. 1회용이지요

아무튼, 컨테이너를 나가고 컨테이너를 지우고 싶을 때 먼저 컨테이너를 종료해줘야합니다. 아래 명령어로 말이죠

docker stop [CONTAINER_NAME]

종료가 stop이면 다시 키는 것은 start죠

docker start [CONTAINER_NAME]

컨테이너를 지우고 싶다면 먼저 stop으로 종료한 상태에서 다음과 같이 입력하면 됩니다.

docker rm [CONTAINER_NAME]

이미지를 삭제하고 싶다면?

docker rmi [IMAGE_NAME]

가동중인 컨테이너를 실행하고 싶다면?

docker exec -it [CONTAINER_NAME] /bin/bash

내 컨테이너를 이미지로 만들고 싶다면?

docker build -t [CONTAINER_NAME] ./

 

반응형
반응형

출처:jybaek.tistory.com/797

도커를 처음 설치하고 아무런 세팅이 없을 경우 기본 루트 경로는 /var/lib/docker입니다.

 

루트 디바이스의 저장공간이 부족할 경우 도커의 루트 경로를 변경하는 방법을 알아보겠습니다.

 

docker info | grep Root
Docker Root Dir:  /var/lib/docker

위와 같이 루트 디렉토리의 경로를 확인합니다.

 

vi /lib/systemd/system/docker.service

위와 같이 입력하여 아래처럼 편집해줍니다.

ExecStart=/usr/bin/dockerd -H unix:// --containerd=/run/containerd/containerd.sock --data-root=/data/docker

물론 /data/docker폴더가 있어야겠죠

 

이후 아래와 같이 daemon을 리로드해줍니다.

systemctl daemon-reload

도커를 재시작합니다.

sudo service docker stop
sudo service docker start

경로를 확인해줍니다.

$ docker info | grep Root
Docker Root Dir: /data/docker

그러면 /data/docker에 폴더들이 생겼을 텐데요 cp, mv를 이용하여 기존 데이터를 변경한 폴더로 옮겨줍니다.

반응형

+ Recent posts