[Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA]Part1. Docker 기초 (Ch01.개요 및 실습준비~)

차보경·2023년 3월 22일
0

Kubernates_And_Docker

목록 보기
1/1

해당 내용은 패스트캠프 Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA를 정리한 내용입니다:)

도커란?

컨테이너 기술의 발전

  • 어떻게 서비스를 효율적으로 운영할 것인가?
  • 비용효율성
  • 컴퓨팅 자원을 최대한 잘 쓸 수 있을까?
    • 각 app가 필요로하는 Library가 동일할 때, 버전이 다를 경우가 있음. 이때 충돌이 일어나면서 문제. 한 서버안에 여러 서비스를 격리시키면서 컴퓨팅 자원을 효율적으로 쓸 것인가를 고민하면서 나온게 "가상화 기술"
  • 가상머신을 이용한 가상화
    하드웨어 위에 OP, 그 위에 Hypervisor를 사용함. 각 가상머신에 올라가는 OS인 Guest OS의 자원들을 에뮬레이팅을 통해 구동함.
    • 다른 가상 머신과 격리된 환경 가능.
    • 1VM 안에 1APP이면, VM안에 격리된 환경이니 의존성 없이 가능
    • HW자원을 에뮬레이션하니 성능 효율성 하락.
    • 자원 오버헤드 상승(가상머신 띄우기위한 메모리 사용)
  • 그리고 나온게 컨테이너 가상화
    • 도커 : 컨테이너 엔진 중 1
      HW위에 Host OS, 그 위에 도커 설치
      Contatinor = process. 격리기술이 들어감. Chroot를 이용한 격리, 메인프로세스 등
      -> 성능 효율성 증가. 자원효율성도 에뮬레이션을 하지 않으니 증가. filesystem에서도 의존성 X
  • 쿠버네티스는?
    • 컨테이너 오케스트래이션 시스템(유일하거나 처음 시작X. 사실상 표준적인 시스템)
    • 여러 서버로 연결된 클러스터에서 관리하는 SW

Docker 설치

WSL 및 Window Desktop은 충돌 문제로 추천하고 있지 않기에, 이후 minikube를 위해서 AWS t3.small로 도전해보기로 한다..!(내돈..!)
무튼... EC2를 열어주고 보안설정 후 EC2에 연결해 Docker를 설치해보자.

#!/usr/bin/env bash
## INFO: https://docs.docker.com/engine/install/ubuntu/

set -euf -o pipefail

DOCKER_USER=ubuntu

# Install dependencies 
sudo apt-get update && sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  
# Add Docker’s official GPG key
sudo mkdir -m 0755 -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set up the stable repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker CE
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# Use Docker without root
sudo usermod -aG docker $DOCKER_USER
  
  • DOCKER_USER=ubuntu : 현 ubuntu 유저를 도커 유저로 설정
  • Install dependencies : 패키지 목록 업데이트, 의존성 패키지 설치
  • Add Docker’s official GPG key : 도커 GPG 키 허용 설정
  • Set up the stable repository : 도커 repo 등록
  • Install Docker CE : 도커에 공식 패키지 목록 갱신 및 설치
  • Use Docker without root : 도커 명령어 권한 부여

sh 파일 생성

cat > install-docker.sh 후 상기 내용을 붙여넣기하고 Ctrl + D로 종료한다

  • 실행 권한을 주기 위해 chmod u+x install-docker.sh 입력
    • chmod : 파일이나 디렉터리의 권한을 수정할 수 있는 명령어
    • u+x : 소유자에게 파일의 실행 권한 부여 (+x: 모든 사용자)

      x가 들어가서 실행 권한이 부여되어 있는 것이 확인됩니다.
  • 권한 부여 내용 Tip참고 블로그

sh 파일 실행으로 docker install

  • ./install-docker.sh로 sh파일을 실행해줍니다.
  • 혹시나 E: Unable to locate package 문제가 뜬다면 sudo apt update 루트계정으로 진행해버리기!
  • ubuntu user가 docker 그룹에 안들어간다면 sudo gpasswd -a ubuntu docker사용하기
  • id 및 docker 설치 확인

docker compose 설치

#!/usr/bin/env bash
## INFO: https://docs.docker.com/compose/install/

set -euf -o pipefail

DOCKER_COMPOSE_VERSION=v2.1.1 # 버전 지정가능

# Download and install
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

  • curl을 통해 바이너리 파일 받아오고, 이후 path 경로에 받아진 것을 확인할 수 있음

kubectl와 kustomize 설치

kubectl이란?

  • kubectl은 쿠버네티스의 API 서버와 통신하여 사용자 명령을 전달할 수 있는 CLI 도구
  • 쿠버네티스는 클러스터 시스템임. master node & worker node가 존재하고, master node상에는 API서버가 존재 -> API를 통해 쿠버네티스 클러스터와 명령어를 주고받을 수 있다.
  • kubectl를 통해 API서버에 인증하고 API서버에 여러 쿠버 명령어를 전달할 수 있다!
  • 설치 링크
  • 이번에도 .sh 파일을 만들어 진행해보자
set -euf -o pipefail

# Install dependencies
sudo apt-get update && sudo apt-get install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

# Add kubectl's official GPG key
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg

# Set up the repository
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# Install kubectl
sudo apt-get update && sudo apt-get install -y kubectl
  • kubectl version을 통해 설치가 됐는지 확인이 가능하다.

kustomize 소개

  • kustomize는 쿠버네티스의 매니페스트 파일을 좀 더 효율적으로 관리할 수 있도록 도와주는 도구
  • 쿠버네티스 클러스터는 컨테이너 기반의 오케스트라를 효율적으로 운영할 수 있도록 도와주는 오케스트레이션 시스템.
  • 올라가는 app 정보를 쿠버네티스 매니페스트 파일형태로 관리함. 이런 쿠버네티스의 매니페스트 파일을 관리하는걸 kubectl로 할 수 있는데, kubectl로하면 app 수가 많아지면서 불편해짐.
  • 그걸 관리하기 위해 kustomize, Helm이 대표적임!
  • kustomize이 유명해져서 kubectl에 포함됐음. (Helm은 chart기반으로 관리)
  • app을 staging, prod 환경별로 배포하고 싶을 때, 각 환경별로 설정값을 다르게 커스터마이징해서 배포함. 이 커스터마이징을 도와주는게 kustomize!
#!/usr/bin/env bash
set -euf -o pipefail

KUSTOMIZE_VERSION=v4.4.1

# Download kustomize binary
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/kustomize/${KUSTOMIZE_VERSION}/hack/install_kustomize.sh"  | bash

# Install to /usr/local/bin
sudo install -o root -g root -m 0755 kustomize /usr/local/bin/kustomize
  • 패키지 매니저가 아닌, 바이너리를 직접 받아 설치하는 형식.
  • curl로 install shell script를 실행하는 형식!
  • 파일을 실행결로로 옮겨 설치함

minikube!

  • 가상환경을 사용하여 쿠버네티스 클러스터를 구현
    드라이버(driver)를 선택하여 원하는 가상환경(docker, podman, virtualbox, parallels, vmware, hyperkit 등)에서 구성 가능
    실제 운영환경에선 쓰기 어렵지만 쿠버네티스 학습환경으로 활용하기 좋음

  • 작은 쿠버네티스.

  • 쿠버네티스는 오케스트레이션 시스템으로 컨테이너를 클러스터레벨에서 효율적으로 관리하기 위한 시스템

  • 클러스터 : 집합. -> 여러 머신을 관리하는 시스템

  • 운영환경을 맞추려면 여러 머신위에 쿠버네티스를 구성하게됨.

  • 학습할 때 여러 머신을 사용하기 어려우니까 손쉽게 할 수 있도록 쿠버 솔루션을 제공하는 것이 minikube!

  • 공식 홈페이지- 설치

  • 최소사항 확인! -> 이것때문에 t3.small로 갔다귱

#!/usr/bin/env bash
## INFO: https://minikube.sigs.k8s.io/docs/start/

set -euf -o pipefail

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

minikube 이용방법

쿠버 클러스터 구성하기

  • minikube --driver docker로 드라이버를 도커로 설정해 설치해줌

    설치되어 있는 docker, ubuntu, kubernates가 어떤 버전인지, 메모리를 얼마만큼 소비할지 알려준당
  • 보면 아직 쿠버네티스 클러스터와 설정이 되어 있지 않아 설정을 진행해준다.
  • kubectl에 클러스터 정보를 확인하면, host, port, CoreDNS가 어디서 실행되고 있는지 볼 수 있다.

테라폼으로 한번에 환경 구성하기!

  • 테라폼은 인프라스트럭처 리소스를 선언할 수 있는 도구로, 테라폼에서는 이를 프로바이더(Providers)라 부른다고한다.

Terraform 설치

  • 공식 홈페이지를 참고해서 테라폼을 설치한다
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

terraform -v로 설치 확인하고, 테라폼 데이터를 git clone해서 받아준다

해당 파일을 보면, networkk, ec2-instance로 나눠져 있는 것을 볼 수 있다.
여기서 network는 network 테라폼 인스턴스를 의미하고, ec2-instance는 ec2-instance는 테라폼 인스턴스를 의미한다.

  • 먼저 네트워크에 들어가서 구성하고 ec2 인스턴스를 구성하면 된다.

네트워크 구성하기

  • 먼저 aws의 엑세스키, 시크릿키를 생성해줘야한다. IAM에 terraform으로 유저를 하나 생성해주고 AdministratorAccess를 정책으로 직접 연결해준다.
  • 그리고 보안자격증명으로 들어가서 엑세스키를 만들어주면 각각의 키가 생성된다. 이거 .csv파일 꼭 저장해놓기!
  • 그리고 터미널에서 aws cli 설치 후 aws configure에서 설정해주면 된다. 해당 내용은 블로그 참조
  • terraform init으로 먼저 테라폼 워크스페이스 초기화 해준다.

테라폼은 서브넷, vpc를 다 개인화로 맞춰줘야하기때문에.,,.. DevOps를 꿈꾸는게 아니라면 시간 여유가 있을 때 하는 것이 좋을 것 같다....... gg.....

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글