subicura님의 쿠버네티스 안내서를 따라해보며 쿠버네티스 기본 사용법에 대해 익히고 정리.
쿠버네티스는 설치부터 운영, 여러 고급 기능들을 알아야한다. 하지만 그 전반적인 과정이 어렵고 처음 접하는 사람에게 쉽지 않다. subicura님의 안내서는 가이드를 통해 최소한의 기능을 배우고 동작원리를 이해하는 것에 초점을 맞춰 자연스럽게 기능을 습득할 수 있도록 가이드 한다.
쿠버네티스 클러스터와 kubctl을 설치한다. 대표적인 개발환경으로는 minikube, k3s, docker for desktop, kind가 있으며, 대부분에서 사용할수 있고 간편하면서 무료인 minikube를 추천한다. minikube를 사용할 수 없는 경우 k3s를 추천
개발과 운영환경의 가장 큰 차이점은 개발환경은 단일 노드를 사용하기 때문에 여러 노드에 스케줄링 테스트가 어렵다. 그리고 loadbalancer와 persistent local storage 또한 가상으로 만들어야 하기 때문에 정확한 실습을 위해서는 운영환경에서 진행해야 한다.
쿠버네티스 클러스터를 실행하기 위해 최소한 scheduler,controller, api-server,etcd, kubelet, kube-proxy를 설치하고, 필요에 따라 dns, ingress controller, storage class 등을 설치해야한다. 이러한 설치과정도 중요하지만 하지만 이야기만 들어도 시작하기 전에 힘이 빠진다.
minikube는 쿠버네티스환경을 로컬에서 쉽고 빠르게 테스트 할 수 있게 해주는 도구로 다양한 OS와 가상환경에서 지원한다.🥳
본인의 경우 macos를 사용하여, macos 설치 가이드를 따른다.
brew install minikube
minikube version
# 가상머신 시작
minikube start --driver=hyperkit
# driver 에러가 발생한다면 virtual box 사용
minikube start --driver=virtualbox
# 특정 k8s 버전 실행
minikube start - --kubernetes-version=v1.20.0
hyperkit 이 설치되어 있지 않다고 메세지 후 hyperkit 설치
가상머신 시작
minikube status
minikube stop
minikube delete
minikube ssh
minikube ip
CPU와 메모리를 차지 하기 때문에 minikube 실습이 완료되면 종료한다.
쿠버네티스는 도커 컴포즈에 비해 더 다양한 컴포넌트로 구성되며, service pod, replicaset, deployment등 다양한 용어들이 나온다. 용어들이 익숙하지 않지만 실습을 진행해보면서 직접 익힌다.
kube-guide/index/wordpress-k8s.yml 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.5.3-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
value: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: NodePort
ports:
- port: 80
selector:
app: wordpress
tier: frontend
오타가 있으면 동작하지 않는다. 오타에 주의 필요.
kubectl apply -f wordpress-k8s.yml
kubecrl get all
pod/wordpress-5f59577d4d-xmjnf
와 pod/wordpress-mysql-545d9c6dc-6ppx2
의 동작을 확인한다. STATUS-Running
Running 상태의 경우 service/wordpress
의 포트가 몇번인지 확인 후 minikube ip 명령어로 얻은 주소로 접속
위에서 얻은 주소화 포트를 결합해서 http://192.168.64.2:32692
으로 접속
🙌 첫 쿠버네티스 배포 성공!!
처음으로 쿠버네티스 배포에 성공. 사용 후에는 컴퓨터 자원을 위해 리소스를 제거한다. 다음 글에서는 쿠버네티스 안내서에 따라 기본적인 내용들에 대해 익히도록한다.
kubectl delete -f wordpress-k8s.yml