쿠버네티스에 애플리케이션을 배포한다는 의미는 pod를 배포한다는 의미이다.
pod란? 쿠버네티스의 가장 작은 obj이며 기본이 되는 배포 단위이다.
pod 배포 및 접속
1. pod 생성
[root@m-k8s ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 7m56s
2. curl ip 입력 시 배포 완료 확인
[root@m-k8s ~]# curl 172.16.221.130
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
3. 외부환경에서 접속하기
[root@m-k8s ~]# kubectl expose pod nginx --type=NodePort --port=80 //기존에 배포한 pod를 노출
service/nginx exposed
[root@m-k8s ~]# kubectl get service //노출된 pod 80:31379포트 확인
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 44h
nginx NodePort 10.100.197.58 <none> 80:31379/TCP 25s
[root@m-k8s ~]# kubectl get nodes -o wide //ip 확인
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP O S-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
m-k8s Ready control-plane 44h v1.25.0 192.168.1.10 <none> C entOS Linux 7 (Core) 3.10.0-1127.19.1.el7.x86_64 containerd://1.6.7
w1-k8s Ready <none> 44h v1.25.0 192.168.1.101 <none> C entOS Linux 7 (Core) 3.10.0-1127.19.1.el7.x86_64 containerd://1.6.7
w2-k8s Ready <none> 44h v1.25.0 192.168.1.102 <none> C entOS Linux 7 (Core) 3.10.0-1127.19.1.el7.x86_64 containerd://1.6.7
w3-k8s Ready <none> 44h v1.25.0 192.168.1.103 <none> C entOS Linux 7 (Core) 3.10.0-1127.19.1.el7.x86_64 containerd://1.6.7
4. 확인한 주소를 브라우저 입력 시 배포한 웹 페이지 확인 가능
Deployment NodePort로 배포 및 접속
1.Deployment 란
파드가 죽으면 서버도 죽을 수 있다. deployment를 사용하여 파드를 여러 개로 늘려야 한다,
2. Deployment 생성
[root@m-k8s ~]# kubectl create deployment deploy-nginx --image=nginx
deployment.apps/deploy-nginx created
[root@m-k8s ~]# kubectl scale deployment deploy-nginx --replicas=3 //pod의 스케일을 3으로 늘려줌
deployment.apps/deploy-nginx scaled
pod의 수가 늘어난 것을 확인할 수 있다
파드를 원하는 만큼 쉽게 늘리고 쉽게 줄이는 것도 가능하여 관리가 용이하다.
3. Deployment 서비스 노출
nodePort를 사용하여
[root@m-k8s ~]# kubectl expose deployment deploy-nginx --type=NodePort --port=80
service/deploy-nginx exposed
[root@m-k8s ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
deploy-nginx NodePort 10.97.104.179 <none> 80:32090/TCP 49s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45h
nginx NodePort 10.100.197.58 <none> 80:31379/TCP 41m
확인한 port로 브라우저 접속 시
테스트 환경에서는 nodePort로 노출하는 것이 부담이 없지만 운영 환경에서는 보안의 문제 때문에
LoadBalancer로 배포하는 것이 적합하다.
댓글