devOps

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

v.v 2023. 3. 4. 15:00

쿠버네티스에 애플리케이션을 배포한다는 의미는 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로 배포하는 것이 적합하다.