[k8s] 쿠버네티스 튜토리얼 따라해보기
minikube 설치 확인
$ minikube version
미니큐브가 설치되었으니 시작해보자
$ minikube start
설치되어있는 kubectl 버전을 확인
$ kubectl version
클러스터 마스터 정보 확인 및 노드 정보 확인
$ kubectl cluster-info
$ kubectl get nodes
디플로이먼트를 생성할 때, 애플리케이션에 대한 컨테이너 이미지와 구동시키고자 하는 복제 수를 지정해야한다.
kubectl run을 이용하여 디플로이먼트 생성하기 (도커허브의 이미지를 지정해주고, 포트 파라미터를 전달했다)
$ kubectl run kubernetes-bootcamp —image=gcr.io/google-samples/kubernetes-bootcamp:v1 —port=8080
생성된 디플로이먼트를 확인해보자 (1개의 싱글 인스턴스가 노드의 도커 컨테이너에서 돌고있다)
$ kubectl get deployments
프록시를 만듬 (프록시를 통해 앱을 노출시킬 수 있음)
$ kubectl proxy
Pod이름을 가져오기
$ export POD_NAME=$(kubectl get pods -o go-template –template ‘{{range .items}}{{.metadata.name}}{{“\n”}}{{end}}’)
$ echo Name of the Pod: $POD_NAME
$Pod이름으로 애플리케이션의 API에 접근해보기
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
pods정보 가져오기
$ kubectl get pods
ip, port를 포함한 파드의 상세 정보를 가져오기
$ kubectl describe pods
pod의 STDOUT 로그 확인해보기
$ kubectl logs $POD_NAME
exec커맨드를 통해 파드안에 커맨드를 날릴 수 있다.
$ kubectl exec $POD_NAME env
pod컨테이너에 bash세션 시작하기
$ kubectl exec -ti $POD_NAME bash
정말 안에 있는지 확인하기 위해 server.js파일 보고,, 로컬호스트에 curl도 날려보자
$ cat server.js
$ curl localhost:8080
$ exit
NodePort를 파라미터로 주고 expose해서 외부로 새로운 서비스를 노출하기(30000-32767 사이에서 자동생성)
$ kubectl expose deployment/kubernetes-bootcamp –type=”NodePort” –port 8080
service/kubernetes-bootcamp exposed
kubernetes-bootcamp의 상세 속성을 보자
$ kubectl describe services/kubernetes-bootcamp
NODE_PORT 환경변수 설정
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}’)
$ echo NODE_PORT=$NODE_PORT
노출된 미니포트IP의 NODE_PORT에 접근해보자
$ curl $(minikube ip):$NODE_PORT
kubernetes-bootcamp란 이름으로 get pods
$ kubectl get pods -l run=kubernetes-bootcamp
kubernetes-bootcamp란 이름으로 get services
$ kubectl get services -l run=kubernetes-bootcamp
POD_NAME 환경변수 생성
$ export POD_NAME=$(kubectl get pods -o go-template –template ‘{{range .items}}{{.metadata.name}}{{“\n”}}{{end}}’)
$ echo Name of the Pod: $POD_NAME
POD_NAME에 app=v1이라는 라벨을 붙여주자
$ kubectl label pod $POD_NAME app=v1
다시 정보를 출력해보면 Labels에 app=v1이 추가된걸 확인할 수 있다.
$ kubectl describe pods $POD_NAME
app=v1라벨이 달린 pods가져오기
$ kubectl get pods -l app=v1
run=kubernetes-bootcamp 라벨이 붙은 서비스를 삭제해보자
$ kubectl delete service -l run=kubernetes-bootcamp
잘 날라갔다.
$ kubectl get services
그래서 curl테스트도 실패한다.
$ curl $(minikube ip):$NODE_PORT
그래도 팟 내부에서 실행하도록 curl 테스트해보면 살아있는 걸 볼 수 있다.
$ kubectl exec -ti $POD_NAME curl localhost:8080
kubectl scale을 이용하여 replicas를 4개로 설정해보자
$ kubectl scale deployments/kubernetes-bootcamp –replicas=4
4개의 인스턴스가 있음을 확인할 수 있다.
$ kubectl get deployments
각각 풀어서 보기
$ kubectl get pods -o wide
엔드포인트 확인해본다
$ kubectl describe services/kubernetes-bootcamp
NODE_PORT 환경변수 설정
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}’)
$ echo NODE_PORT=$NODE_PORT
pod에 curl테스트를 날려보면 매번 다른 pod에 요청이 가는걸 확인할 수 있다. (로드밸런싱)
$ curl $(minikube ip):$NODE_PORT
스케일다운 처리하기
$ kubectl scale deployments/kubernetes-bootcamp –replicas=2
2개로 잘 줄었나?
$ kubectl get deployments
$ kubectl get pods -o wide
이미지를 새버전으로 업데이트해보자
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
Describe
$ kubectl describe services/kubernetes-bootcamp
Export NODE_PORT
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}’)
$ echo NODE_PORT=$NODE_PORT
curl날려보면 모두 v2 pods에 요청이 감을 확인할 수 있다.
$ curl $(minikube ip):$NODE_PORT
rollout status하면,,, 이미지는 v2로 바뀌었다.
$ kubectl rollout status deployments/kubernetes-bootcamp
$ kubectl get pods
$ kubectl describe pods
롤백해보기 (이미지를 v10으로 변경)
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
정보를 가져와보니 이미지가 v10으로 안바뀌어있음
$ kubectl get deployments
$ kubectl get pods
$ kubectl describe pods
rollout undo로 롤백합시다.
$ kubectl rollout undo deployments/kubernetes-bootcamp
정상임을 재확인
$ kubectl get pods
$ kubectl describe pods
최근 댓글