본문 바로가기
devOps

쿠버네티스) 테스트 환경에서 해보는 간단한 쿠버네티스 배포

by v.v 2023. 3. 4.

쿠버네티스에 애플리케이션을 배포한다는 의미는 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를 사용하여 파드를 여러 개로 늘려야 한다,

pod의 집합

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로 배포하는 것이 적합하다.

 

 

 

댓글