마스터 노드(m-k8s)에서 워크노드(w1,2,3)들이 NGINX 애플리케이션을 배포하도록 명령한다.
파드 : 컨테이너의 집합
하지만, 대부분은 하나의 컨테이너가 하나의 파드로 이루어진 경우가 많다.
supperPutty 접속
nginx 배포
kubectl run nginx --image=nginx
kubectl get pod
kubectl get pod -o wide
curl (pod id)
쿠버네티스 클러스터 안에 마스터노드, 워커 노드들이 있는데 이를 밖에서도 사용할 수 있게 하려면 어떤 문을 통과해야 됨.
1. 해결 방법 1번 - 문을 날려버리기 -> 쿠버네티스에 보안이 취약해짐
2. 해결 방법 2번 - 문 밖에 안전한 구역을 만들어줌. 서비스라고 불리는 서비스영역에 배포한 노드를 연결해주면 노드들이 서비스를 통해서 파드를 찾아감 -> 안전하게 사용 가능
kubectl expose pod nginx --type=NodePort --port=80
kubectl get service
=> NodePort라는 타입으로 nginx가 expose 됐음을 알 수 있음 밖으로 노출된 포트는 32096임을 알 수 있음
kubectl get nodes -o wide
=> 각 노드별로 IP 주소 확인 가능함
현재 문제점 : 파드가 1개 밖에 없어서 파드가 죽으면 그 파드를 받아줄 곳이 없어짐
-> 파드를 여러 개 사용해야 함
파드가 1개가 아닌 여러개에 배포가 되어서 문제가 생겨도 다른 파드들이 받아줄 수 있게 돼야 함. 이것을 Deployment가 도와줌
파드는 1개라면, 디플로이먼트는 파드를 여러 개 가지고 있는 단위임
쿠버네티스 1.8 버전으로는 kubectl run으로 pod는 배포할 수 있지만, deploy는 배포하지 못함
그러므로 deployment를 배포하려면 kubectl create나 kubectl apply를 사용해야 한다.
kubectl create deployment deploy-nginx --image=nginx
kubectl get pods
-> 배포 완료 됨을 알 수 있음
kubectl get pods -o wide
-> IP가 172.16.103.129 임을 알 수 있음
curl 172.16.103.129
-> 성공
ReplicaSet이란 것의 도움을 받아야 함.
ReplicaSet의 디폴트값이 1이고 이것을 원하는 개수만큼 바꿔주면 파드가 늘어난다.
kubectl scale deployment deploy-nginx --replicas=3
kubectl get pods
-> 3개로 파드가 늘어났음을 알 수 있음
kubectl expose deployment deploy-nginx --type=NodePort --port=80
kubectl get services
-> 노출한 deployment의 포트번호가 30723임을 알 수 있음
=> 사용자에게 IP주소를 알려주면 보완상 좋지 않음. 즉, 노드포트외에 다른 방법을 사용해야 함
MetalLB를 이용해서 로드밸런서로 타입을 선언할 수 있도록 한다.
그리고, nginx는 구별이 힘들기 때문에 강의해서 제공하는 chk-hn을 사용할 것임.
kubectl apply -f ./metallb.yaml
kubectl create deployment chk-hn --image=sysnet4admin/chk-hn
kubectl scale deployment chk-hn --replicas=3
kubectl get pods
kubectl expose deployment chk-hn --type=LoadBalancer --port=80
kubectl get services
=> 서비스가 잘 생성되었고, external-ip가 입력이 되어있음. 따라서, 노드포트 알려줄 필요없이 해당 ip를 알려주면 접속 가능함
kubectl delete service chk-hn
kubectl delete service deploy-nginx
kubectl delete service nginx
kubectl get service
kubectl delete deployment chk-hn
kubectl delete deployment deploy-nginx
kubectl delete pod nginx
kubectl get pods
kubectl delete -f ./metallb.yaml