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 파일이 더 편리하다는 사실을 알게 된다.
- 쿠버네티스 공식 홈페이지에서 원하는 오브젝트 템플릿 파일을 쉽게 찾을 수 있고, 자주 사용하는 템플릿 파일은 네이밍 규칙을 정의해서 잘 저장해 두면 로컬 환경에서 다시 찾기도 어렵지 않다.
- 쿠버네티스 오브젝트와 옵션이 코드 형태로 구현되어 반복 사용하기 아주 쉽다.
[서브노트]
- kubeconfig 파일을 로컬 호스트로 복사하기
$ 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/
02. 효율적인 쿠버네티스 클러스터 관리를 위한 kubectl CLI 환경 최적화
- ubuntu는 bash completion이 기본으로 설치되어 있음
- kubectl 자동 완성 활성화로 진행하면 됩니다.
Ch. 03 kubectl 명령어로 익히는 쿠버네티스의 주요 오브젝트
Ch. 04 YAML 파일을 이용한 쿠버네티스 오브젝트 관리
04.01 kube neat 플러그인 설치
04.02 YAML 파일을 이용한 파드 배포
Ch. 05 쿠버네티스 트러블슈팅의 기본 프로세스
05.01 기본 에러 조치 프로세스의 이해
Apply | Get | Describe | Logs | Get Event | |
---|
아 | 기 | 다 | 람 | 지이 | |