[새싹] 현대IT&E 240103 기록 - Docker / Kubernetes / Minikube

최정윤·2024년 1월 3일
0

새싹

목록 보기
46/67

Minikube 실습하기

Minikube 환경 구성하기

k8s: minikube 클러스터 만들기

minikube 시작 및 대시보드 실행

minikube start
minikube dashboard

디플로이먼트 만들기

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4

kubectl get deployments

kubectl get pods

kubectl get events

kubectl config view

서비스 만들기

  • 파드는 기본적으로 쿠버네티스 클러스터 내부의 ip 주소로만 접근 가능.
  • 외부에서 파드에 접근하려면 서비스로 노출해야 한다.
kubectl expose deployment hello-node --type=LoadBalancer --port=8080

kubectl get services

minikube tunnel

‼️ 오류 발생

해결1: 네트워크 변경

minikube start --driver=qemu --network=socket_vmnet
minikube service hello-node

http://10.102.34.64:8080


03. kubectl 명령어로 익히는 쿠버네티스의 주요 오브젝트

  • kubectl의 주요 명령어와 쿠버네티스의 주요 오브젝트 (파드, 디플로이먼트, 네임스페이스 등)을 알아본다.
  • run, create: 파드와 디플로이먼트 생성
  • get, exec: 생성된 파드 현황 조회 및 파드 내 bash 스크립트 실행(파드 접속)
  • scale, delete: 파드의 수량 증가/감소 및 오브젝트 삭제
  • create namespace: 네임스페이스 생성
  • 파드, 디플로이먼트, 네임스페이스는 모두 쿠버네티스에서 사용하는 오브젝트이다.
  • 쿠버네티스 오브젝트란 쿠버네티스 API서버로 생성하는 영속성을 가지는 모든 실체를 말한다.
  • 애플리케이션을 실행하고 애플리케이션에 필요한 추가 리소스를 지정하고 고가용성 관련 설정을 하는 등 일련의 모든 쿠버네티스 작업은 다양한 오브젝트와 해당 오브젝트 옵션의 조합으로 실행한다.
  • 쿠버네티스 오브젝트의 정확한 개념은 쉽게 이해하기 어렵지만, 개념을 완전히 이해하지 못해도 관련 작업을 실행하는 데 큰 문제가 없다.
  • 쿠버네티스의 모든 오브젝트는 API 서버로 생성한다.
  • 사용자가 쿠버네티스 명령어를 실행하면 쿠버네티스는 해당 명령어의 API를 호출해서 오브젝트를 실행하는 방식으로 동작한다.
  • 복잡한 옵션의 오브젝트 API 호출이 필요한 경우에는 명령어가 아니라 YAML 파일을 사용한다.

3.1 NGINX 파드실행과 배시 실행

  • 파드는 쿠버네티스 환경에서 컨테이너 애플리케이션을 실행하는 기본 단위이다.
  • 일반적으로 단일컨테이너만 실행하지만 2개 이상의 컨테이너도 하나의 파드 안에서 실행 가능하다.
  • IT 업계에서 흔히 사용하는 파드라는 용어는 컴퓨팅, 네트워크, 스토리지를 모듈 형태로 묶어서 시스템 확장 시 사용하는 기본 단위를 의미한다.
  • 파드는 다른 파드와 구분되는 고유한 네트워크와 스토리지를 가진다.
  • 쿠버네티스에서 컨테이너 형태의 애플리케이션을 실행하는 명령어는 kubectl run이다.
  • 쿠버네티스의 장점 중 하나는 개별 명령어의 도움말이 직관적이고 이해하기 쉽다는 것이다.
  • --help 옵션으로 명령어의 전체적인 구조를 이해하면 굳이 명령어의 모든 옵션을 외우지 않아도 어렵지 않게 사용할 수 있다.

3.2 디플로이먼트의 파드 개수 변경과 삭제

  • 파드의 개수를 변경하고 삭제하는 작업을 한다.
  • 파드의 개수를 변경하려면 쿠버네티스 오브젝트 타입을 파드가 아닌 디플로이먼트로 실행한다.
  • 디플로이먼트는 파드가 배포되는 방법을 정의하는 오브젝트로서 파드의 개수, 이비지 종류, 배포 방법 등을 정의한다.
  • 디플로이먼트는 파드처럼 kubectl run이 아닌 kubectl create deplyement 명령어를 사용한다.
  • dep까지 입력하고 탭 키를 누르면 명령어가 자동 완성된다.
  • 아파치 웹서버 이미지를 사용하는 디플로이먼트를 생성한다.

3.3 네임스페이스 생성

  • 쿠버네티스 오브젝트는 create 명령어로 생성할 수 있다.
  • 대부분의 오브젝트는 주로 YAML 파일을 이용해서 생성하지만 간단한 오브젝트는 kubectl 명령으로도 생성할 수 있다.
  • 디플로이먼트, 시크릿, 네임스페이스 등이 있다.
  • 네임스페이스는 클러스터를 구분하는 가상 클러스터 단위입니다.
  • 같은 네임스페이스 내에서 같은 이름의 오브젝트를 만들지 못하지만 네임스페이스가 다르면 같은 이름의 오브젝트를 생성할 수 있다.

정리

  • 쿠버네티스 환경에서 사용하는 주요 명령어를 살펴봤다. 파드 생성은 kubectl run이나 Kubectl create 명령어를 사용한다. 파드는 쿠버네티스 애플리케이션의 기본 요소로서 각 애플리케이션별로 확장 시 사용하는 기본 단위이다. 개별 파드는 각각 고유한 네트워크 IP 주소와 데이터 볼륨을 가진다.
  • 생성된 파드의 목록은 get 명령어로 조회하며, 개별 파드는 bash를 실행해서 접속할 수 있다. 파드 개수는 scale 명령어로 증가/감소가 가능하며, delete 명령어로 오브젝트를 삭제할 수 있다.
  • create 명령어로 네임스페이스, 시크릿, 디플로이먼트 등의 비교적 간단한 오브젝트를 생성할 수 있다. 네임스페이스는 클러스터 내 오브젝트를 구분하는 단위로 사용하며, 같은 네임스페이스에서는 동일한 이름을 가진 리소스를 생성할 수 없다. kube-ns 도구를 사용하면 좀 더 편리하게 네임스페이스를 변경할 수 있다.

4. YAML 파일을 이용한 쿠버네티스 오브젝트 관리

  • 복잡한 옵션을 사용해야할 때가 많은데 이를 명령어에 추가하기는 쉽지 않다.
  • 복잡한 옵션은 코드로 구현하는 편이 가독성이 높고 재사용도 용이하다.
  • 다음은 특정 노드에 파드가 실행되지 않고 여러 노드에 파드를 분산해서 배치하는 예제이다.
  • 복잡한 설정을 명령어로 구현하면 명령어가 길어져서 가독성이 떨어지지만 코드로 구현하면 훨씬 보기가 낫다.
  • 이와 비슷하게 복잡한 옵션을 사용해야 하는 쿠버네티스 오브젝트가 많다.
  • 파드를 연결하는 방식을 정의하는 서비스, 개별 애플리케이션의 환경변수 설정을 정의하는 컨피그맵, 자원을 많이 사용해서 동일한 노드를 사용하는 다른 파드에 영향을 끼치지 않도록 하는 리소스 리미트/리퀘스트 설정 등이 대표적이다.
  • 오브젝트는 대부분 코드를 사용해서 구현한다.
  • 사실상 쿠버네티스 작업을 한다는 것은 이처럼 각 기능을 구현하는 코드를 찾아서 작성하는 것을 의미한다.
  • 쿠버네티스 코드를 작성하는 데는 주로 YAML파일을 사용한다.
  • 모든 쿠버네티스 리소스와 해당 옵션은 YAML 파일로 구현할 수 있다.
  • 명령어에 익숙한 시스템 운영자는 코드와 YAML파일에 익숙하지 않을 수 있지만 사용하면 명령어보다 YAML 파일이 더 편리하다는 사실을 알게 된다.
  • 쿠버네티스 공식 홈페이지에서 원하는 오브젝트 템플릿 파일을 쉽게 찾을 수 있고, 자주 사용하는 템플릿 파일은 네이밍 규칙을 정의해서 잘 저장해 두면 로컬 환경에서 다시 찾기도 어렵지 않다.
  • 쿠버네티스 오브젝트와 옵션이 코드 형태로 구현되어 반복 사용하기 아주 쉽다.

[서브노트]

  • Kubernetes Concepts
  • Kubernetes Components
  • Proxy Server
  • kubeconfig 파일을 로컬 호스트로 복사하기
  • 1번 노드에 접속
$ sudo bash
  • kubeconfig 파일을 1번 노드의 일반 계정으로 복사
# cp /root/.kube/config /home/iceman4u/
  • 소유권 변경
# chown iceman4u:iceman4u /home/iceman4u/config
  • 로컬 호스트의 터미널로 귀환
# exit
$ exit
  • 1번 노드의 config 파일을 로컬 호스트에 복사
$ scp iceman4u@k8s-01:~/config
  • kubeconfig 용 디렉토리를 로컬 호스트에 만들고 kubeconfig 파일을 복사
$ mkdir ~/.kube
$ cp ~/config ~/.kube/
  • 로컬 호스트의 /etc/hosts 파일에 아래 내용을 추가
    192.168.56.101 k8s-01
    192.168.56.102 k8s-02
    192.168.56.103 k8s-03

  • kubeconfig 파일 수정
    $ vi ~/.kube/config
    server:127.0.0.1:6443 ⇒ server:k8s-01:6443

02. 효율적인 쿠버네티스 클러스터 관리를 위한 kubectl CLI 환경 최적화

  • ubuntu는 bash completion이 기본으로 설치되어 있음
  • kubectl 자동 완성 활성화로 진행하면 됩니다.
  • HEREDOC

Ch. 03 kubectl 명령어로 익히는 쿠버네티스의 주요 오브젝트

  • k8s 오브젝트 개요

Ch. 04 YAML 파일을 이용한 쿠버네티스 오브젝트 관리

04.01 kube neat 플러그인 설치

04.02 YAML 파일을 이용한 파드 배포

  • 쿠버네티스 서비스란

Ch. 05 쿠버네티스 트러블슈팅의 기본 프로세스

05.01 기본 에러 조치 프로세스의 이해

ApplyGetDescribeLogsGet Event
지이
  • kubectl create vs. apply
profile
개발 기록장

0개의 댓글