Start a cluster by running :
minikube start
minikube 클러스터 내에서 실행되는 Kubernetes 대시보드에 액세스
minikube dashboard
서버 시작 (이미지 필요)
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
서비스를 NodePort로 노출:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
minikube를 이용한 서비스 열기
minikube service hello-minikube
모든 로컬 클러스터 및 프로필 삭제
minikube delete --all
쿠버네티스 실행중인 서비스, pod, deployment 확인
kubectl get all
yaml형식 yaml작성후
pod apply
kubectl apply -f <pod.yml>
디플로이먼트 apply:
kubectl apply -f <디플로이먼트.yml>
서비스 apply:
kubectl apply -f <서비스파일.yml>
그외 치트시트 : https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/
sebcontents/cozserver:1.0 이미지를 바탕으로 파드를 만들어봅시다.
pod.yaml작성
apiVersion: v1
kind: Pod
metadata:
name: cozserver
spec:
containers:
- name: cozserver
image: sebcontents/cozserver:1.0
ports:
- containerPort: 80
pod 추가
kubectl apply -f pod.yaml
deployment.yaml작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: cozserver
labels:
app: cozserver
spec:
replicas: 2
selector:
matchLabels:
app: cozserver
template:
# 여기서부터 파드 템플릿
metadata:
labels:
app: cozserver
spec:
containers:
- name: cozserver
image: sebcontents/cozserver:1.0
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: cozserver
namespace: default
spec:
selector:
app: cozserver # 배포하려는 파드를 지정 당연히 파드가 실행중이어야 합니다.
type: LoadBalancer
ports:
- name: cozserver
protocol: TCP
port: 80
targetPort: 8080
kubectl apply -f service.yaml
서비스 추가 완료 후 로컬 테스트를 위한 터널 생성
minikube tunnel
이후 http://localhost 에 접속했을때 cozserver에 정상적으로 접속이 된다면 성공
롤링업데이트 방식을 사용 - 디폴트 값이기 때문에 원래의 deployment.yaml에서 이미지 버전 2.0으로 변경 후 deployment-v2.yaml 생성
후 똑같이 v2를 배포하면 자동으로 새로운 버전으로 배포됨
이후 로그확인이 하고 싶으면 아래 명령어로 확인 가능
kubectl rollout history deployment <metadata name>
최신 버전에서 오류가 생겨서 이전 버전으로 롤백 하고 싶을때 사용하는 명령어
kubectl rollout undo deployment <metadata name>
롤백 이후 롤아웃 히스토리를 확인 해보면
이전 REVISION이 마지막 REVISION으로 변경됨
1. 3.0 버전의 CozServer 파드가 탐침기(probe)에 의해 문제가 있음을 스스로 발견하게 하고, 자동으로 롤백 -> readiness probe 사용
spec:
minReadySeconds: 15
replicas: 2
selector:
matchLabels:
app: cozserver
template:
# 여기서부터 파드 템플릿이다
metadata:
labels:
app: cozserver
spec:
containers:
- name: cozserver
image: sebcontents/cozserver:3.0
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 1
periodSeconds: 1
2. service를 ClusterIP로 변경했을때 외부와 연결하는법 -> 인그레스 사용
minikube addons enable ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: default
spec:
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
3. helm으로 패키징