본문 바로가기
반응형

DevOps128

[Kubernetes] : 쿠버네티스에 대한 간단한 설명 모든 리소스는 오브젝트 형태로 관리된다. 쿠버네티스는 리소스를 오브젝트라고 불리는 형태로 관리한다. 오브젝트는 간단히 추상화된 집합 정도로 생각하면 된다. 쿠버네티스의 오브젝트 개념은 생각보다 넓고 세밀한 단위로 사용한다. kubectl api-resources 쿠버네티스에서 사용할 수 있는 오브젝트 종류를 확인하는 명령어이다. 이 오브젝트들을 전부 다 다루지도 않고 전부 다 외울 필요도 없다. 또, 쿠버네티스 공식 문서에서 대부분의 리소스 오브젝트 사용법이 적혀있다. kubectl explatin pod 특정 오브젝트의 설명을 확인할 수 있는 명령어이다. pod 오브젝트를 확인해 본다. 쿠버네티스는 명령어보다 YAML 파일을 더 많이 사용한다. 쿠버네티스에서는 kubectl 명령어로 쿠버네티스를 사용할.. 2022. 3. 15.
[Kubernetes] : kops로 AWS에서 쿠버네티스 설치 kops는 클라우드 플랫폼에서 쉽게 쿠버네티스를 설치할 수 있게 도와주는 도구이다. kubeadm은 쿠버네티스를 설치할 서버 인프라를 직접 마련해야 하지만 kops는 서버 인스턴스와 네트워크 리소스 등을클라우드에서 자동으로 생성해 쿠버네티스를 설치한다. kops는 AWS, GCP 등 클라우드 플랫폼에서 설치를 지원하고 있다. wget -O kops chmod +x ./kops sudo mv ./kops /usr/local/bin/ wget -O kubectl \\ chmod +x kubectl sudo mv kubectl /usr/local/bin/ kopos 및 kubectl 실행 바이너르를 내려받는다. AWS 사용자를 생성하고 정책 연결 및 AWS CLI를 설정한다. 번거로워서 책에서는 따로 🔗링크를.. 2022. 3. 14.
[Kubernetes] : 리눅스 서버에서 도커 엔진만으로 minikube 설치하기 리눅스 서버에서 가상 머신 없이 도커 엔진만으로 minikube 설치 curl -Lo minikube \\ && \\ chmod +x minikube && \\ sudo mv minikube /usr/local/bin/ curl -Lo kubectl \\ && \\ chmod +x kubectl && \\ sudo mv kubectl /usr/local/bin/ minikube와 kubectl을 내려받는다. minikube start --vm-driver=none kubectl version --short 설치를 확인한다. minikube delete Minikube를 삭제할 수 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 13.
[Kubernetes] : 쿠버네티스 버전 선택 및 설치 쿠버네티스 버전 선택 및 설치 쿠버네티스의 어떤 버전을 설치해도 핵심 개념은 같아 딱히 문제는 없지만 워낙 기능이 빠르게 업데이트 되고 있어서 버전 차이로 사용법이나 기능이 달라질 수 있기 때문에 운영을 생각하고 있다면 버전을 신중하게 선택해야 한다. 하지만, 지금 배울 때에는 버전을 크게 신경 쓸 필요는 없다. 책에서는 1.18버전으로 안내하고 있다. 설치에는 Minikube를 사용해 본다. Minikube는 로컬에서 가상 머신이나 도커 엔진을 통해 쿠버네티스를 사용할 수 있는 환경을 제공한다. 하지만 실제 운영 환경에서 적용이 힘들기도 하고 몇몇 기능은 사용할 수 없기 때문에 가능하면 여러 대의 서버로 쿠버네티스 클러스터를 구성하는 게 좋다고 한다. apt-get install virtualbox 버.. 2022. 3. 13.
[kubernetes] : 쿠버네티스 설치 환경의 종류 쿠버네티스 설치 환경의 종류 리눅서 서버와 같은 환경에서 쿠버네티스를 설치해야 한다. 도커와 달리 쿠버네티스는 사용 환경과 목적에 따라 수비게 설치할 수 있다. 하지만, 도커 엔진과 달리 쿠버네티스는 사용 환경과 목적에 따라 설치 방법이 다양하고 복잡하다. 개발 용도로 로컬에서 사용하면 간단한데, 운영 단계에서 쿠버네티스 클러스터를 구축하려면 AWS, GKE 등 클라우드 환경에서 수십 개의 서버에 동시에 쿠버네티스를 설치해야 할 수도 있다. 개발 용도의 쿠버네티스 설치 : Minikube, Docker Desktop for Mac/Windows에 내장된 쿠버네티스 서비스 테스트 혹은 운영 용도의 쿠버네티스 설치 : kops, kubespray, kubeadm, EKS나 GKE 등의 매니지드(Managed.. 2022. 3. 12.
[Docker] : 도커와 컨테이너 생태계 [Docker] : 도커와 컨테이너 생태계 컨테이너가 내부적으로 어떻게 구성되어 있는지, 생태계가 어떤 방향으로 나아가고 있는지 이해가 필요하다. 도커 핵심 프로세스라고 하면 dockerd(도커 데몬)을 떠올리기 마련이지만 사실 도커 데몬은 컨테이너가 아니다. 실제로 컨테이너 프로세스라고 부를 것은 runC이다. 컨테이너에 1대1로 매칭되는 런타임 역할을 runC가 담당한다. 그리고 여러 개의 runC 컨테이너 프로세스 및 이미지를 관리하는 주체가 바로 containerd(컨테이너-디)이다. 우리가 알고 있는 도커 엔진(dockerd 프로세스)은 contanerd와 통신을 통해 runC를 사용하게 한다. ps aux | grep contalnerd 도커가 실행중인 호스트에서도 바로 확인이 가능하다. 컨테.. 2022. 3. 12.
[Docker] : 도커 스택 사용하기 networks: {} services: mysql: comand: mysqld image: alicek106/composetest:mysql web: command: apachectl -DFOREGROUND image: alicek106/composetest:web links: - mysql: db ports: - 80:80 version: '3.0' volumes: {} docker-compose.yml 파일을 작성한다. 이제 이 파일을 가지고 스택으로 변환한다. docker stack deploy 명령어에 YAML 파일을 지정하고 마지막에 스택 이름을 입력한다. docker stack deploy -c docker-compose.yml mystack docker-compose.yml 파일에서 mys.. 2022. 3. 12.
[Docker] : 도커 스웜 모드와 함께 사용하기 stack이 도커 엔진 1.13버전에 추가됐다. 스택은 YAML 파일에서 생성된 컨테이너의 묶음으로 YAML로 스택을 생성하면 YAML에 정의된 서비스가 스웜 모드의 클러스터에서 일괄적으로 생성된다. 스택은 도커 컴포즈 명령인 docker-compose가 아닌 docker stack로 제어해야 한다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 10.
[Docker] : 도커 컴포즈 네트워크 YAML 파일에 네트워크 항목을 정의하지 않으면 도커 컴포즈는 프로젝트별로 브리지 타입의 네트워크를 생성한다. docker-compose up 명령어뿐 아니라 docker-compose scale 명령어로 생성되는 컨테이너 전부가 이 브리지 타입의 네트워크를 사용한다. —net-alias가 서비스의 이름을 갖도록 자동으로 설정된다. 때문에 이 네트워크에 속한 컨테이너는 서비스의 이름으로 서비스 내의 컨테이너에 접근할 수 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 10.
[Docker] : YAML 파일 작성(2) 볼륨 정의 driver는 볼륨을 생성할 때 사용될 드라이버를 설정한다. external은 YAML 파일에서 volume, volumes-form 옵션을 사용하면 프로젝트마다 볼륨을 생성한다. YAML 파일 검증하기 오타 및 파일 포맷에 대한 검사를 원하면 docker=compose config 명령어를 사용한다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 9.
[Docker] : YAML 파일 작성(1) YAML 파일 작성 도커 컴포즈를 실 사용하기 위해 더 많은 옵션과 명령어를 공부해야 하고 YAML 파일 작성에도 익숙해야 한다. 기존에 사용하던 run 명령어를 YAML 파일로 변환해 사용하는 게 도커 컴포즈의 사용법이다. YAML 파일은 버전, 서비스, 볼름, 네트워크 이렇게 총 4개의 정의 항목으로 구성된다. 가장 많이 사용하는 건 서비스 정의이고 볼륨과 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용된다. 항목의 하위 항목을 정의하기 위해 2개의 공북으로 들여쓰기해서 상위 항목과 구분한다. 버전 정의 버전은 YAML 맨 윗 부분에 정의한다. version: '3.0' 서비스 정의 서비스는 컨테이너로 구현된다. 하나의 프로젝트로서 도커 컴포즈에 의해 관리된다. services: my_co.. 2022. 3. 8.
[Docker] : 도커 컴포즈의 프로젝트, 서비스, 컨테이너 도커 컴포즈의 프로젝트, 서비스, 컨테이너 도커 컴포즈는 컨테이너를 프로젝트 및 서비스 단위로 구분하기 떄문에 컨테이너의 이름은 일반적으로 프로젝트이름_서비스이름_서비스내에서컨테이너의번호로 구성되어 있다. 하나의 프로젝트는 여러 개의 서비스로 구성된다. 여러 서비스는 다시 여러 컨테이너로 구성된다. 스웜 모드에서의 서비스와 마찬가지로 하나의 서비스에는 여러 컨테이너가 존재할 수 있도록 컨테이너의 번호를 붙여 서비스 내의 컨테이너를 구분한다. docker-compose scale mysql=2 docker-compose ps 컨테이너 목록을 확인해 보면 서비스의 컨테이너가 늘어난 것을 확인할 수 있다. 컨테이너 수를 늘이고 줄여서 일정하게 유지할 수 있다. docker-compose down 명령어로 프로.. 2022. 3. 8.
[Docker] : docker-compose.yml 작성과 활용하기 docker-compose.yml 작성과 활용 docker run -d --name mysql \\ alicek106/composetest:mysql \\ mysqld docker run -d -p 80:80 \\ --link mysql:db --name web \\ alicek106/composetest:web \\ apachectl -DFOREGROUND run 명령어를 docker-compose.yml 파일로 변환해 컨테이너를 생성하고 실행한다. version : '3.0' services: web: image: alicek106/composetest:web ports: - "80:80" links: - mysql:db command: apachectl -DFOREGROUND mysql: image.. 2022. 3. 7.
[Docker] : 도커 컴포즈 설치하기 도커 컴포즈 설치 curl -L /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose 도커 컴포즈는 깃 허브 저장소에서 내려 받을 수 있다. docker-compose -v 도커 컴포즈 정상 설치를 확인하기 위해 버전을 확인해 준다. 2022. 3. 7.
[Docker] : 도커 컴포즈를 사용하는 이유 도커 컴포즈를 사용하는 이유 여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 테스트하려면 각 컨테이너를 하나씩 생성해야 한다. docker run --name mysql -d alicelk106/composetest:mysql mysqld docker run -d -p 80:80 \\ --link mysql:db --name web \\ alicek106/composetest:web apachectl -DFOREGROUND 아파치 웹 서버 컨테이너와 mysql 컨테이너를 생성한다. 여러 컨테이너로 구성된 애플리케이션을 구축하기 위해 run 명령어를 여러번 사용해야 하지만 테스트 하기가 번거롭다. 이를위해 도커 컴포즈(Docker Compose)는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러.. 2022. 3. 7.
[Docker] : service 제약 설정 docker service create 명령에 —constraint 옵션을 추가해 서비스의 컨테이너가 할당될 노드의 종류를 선택할 수 있다. 다른 방법으로는 노드의 ID나 호스트 이름, 도커 데몬의 라벨로 제약 조건을 설정할 수도 있다. node.labels 제약조건 docker service create --name label_teat \\ --constraint 'node.labels.storage == ssd' \\ --replicas=5 \\ ubuntu:14.04 \\ ping docker.com docker node update 명령어로 설정해 줄 수 있다. 여러 노드에 라벨이 설정되어 있으면 매니저 노드의 스케줄러는 해당 노드들을 대상으로 컨테이너를 할당하는 스케쥴링을 진행한다. 만약 제한 .. 2022. 3. 7.
[Docker] : 노드 라벨 추가하기 노드에 라벨을 추가는 노드 분류와 비슷하다. 라벨은 키-값 형태를 가지고 있고 특정 노드에 라벨을 추가하면 서비스를 할당할 때 컨테이너를 생성할 노드의 그룹을 선택하는 게 가능하다. docker node update \\ --label-add storage=ssd \\ swarm-worker1 swarm-worker1 노드 라벨을 storage=ssd로 설정해 storage라는 키에 ssd라는 값을 설정해 준다. docker node inspect --pretty swarm-worker1 docker node inspect 명령으로 확인할 수 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 7.
[Docker] : 노드 AVAILABILITY변경하기 노드 AVAILABILITY변경하기 docker node ls 구축한 스웜 클러스터의 노드를 확인한다. 모든 노드의 STATUS 항목이 Ready, AVAILABILITY항목이 Active인 것을 알 수 있다. Active Active 상태는 새로운 노드가 스웜 클러스터에 추가되면 기본적으로 설정되는 상태로서, 노드가 서비스의 컨테이너를 할당받을 수 있음을 의미한다. docker node update \\ --availability active \\ swarm-worker1 Active 상태가 아닌 노드를 Acitve 상태로 변경한다. Drain 스웜 매니저의 스케줄러는 컨테이너를 해당 노드에 할당하지 않는다. 보통 매니저 노드에 설정하는 상태지만 노드에 문제가 생겨 일시적으로 사용하지 않는 상태로 설정.. 2022. 3. 7.
[Docker] : 스웜 모드에서 볼륨의 한계점 서비스를 할당받을 수 있는 모든 노드가 볼륨 데이터를 가지고 있어야 해서 스웜 클러스터에서 볼륨을 사용하기 어렵다. 스웜 모드에서는 도커 볼륨이나 호스트와의 볼륨 사용이 적합하지 않은 기능일 수도 있다. 해결하기 위해 어느 노드에서도 접근 가능한 퍼시스턴트 스토리지(Persistent Storage)를 사용하는 것이다. 퍼시스턴트 스토리지는 호스트와 컨테이너와 별개로 외부에 존재해 네트워크로 마운트 할 수 있는 스토리지이다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 6.
[Docker] : bind 타입의 볼륨 생성 bind 타입의 볼륨 생성 바인드 타입은 호스트와 디렉터리를 공유할 때 사용된다. 공유 될 호스트의 디렉터리를 설정해야 하므로 source 옵션을 반드시 명시해야 한다. docker service create --name ubuntu \\ --mount type=bind, source=/root/host, target=/root/container \\ ubuntu:14.04 \\ ping docker.com 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 6.
[Docker] : volume 타입의 볼륨 생성 volume 타입의 볼륨 생성 스웜 모드에서 도커 볼륨을 사용하는 서비스를 생성하기 위해 —mount 옵션의 type 값에 volume를 지정해 줘야한다. docker service create --name ubuntu \\ --mount type=volume, source=myvol, target=/root \\ ubuntu:14.04 \\ ping docker.com type에 volume를 적어준다. source는 사용할 볼륨, target은 컨테이너 내부에 마운트 될 디렉터리의 위치이다. docker service create --name ubuntu \\ --mount type=volume, target=/root \\ ubuntu:14.04 \\ ping docker.com source 옵션을.. 2022. 3. 6.
반응형