본문 바로가기

인프라/Kubernetes

Kubernetes 디플로이먼트 정의 및 노드 포트 서비스 연동

2023.08.27 - [인프라/Kubernetes] - Kubernetes 실습 및 서비스 구축

 

Kubernetes 실습 및 서비스 구축

예상 k8s 서비스 아키텍쳐 Kubernetes 란? 쿠버네티스는 컨테이너화된 서비스를 쉽고 빠르게 배포,확장,관리하기 자동화 해주는 오픈소스 플랫폼입니다. k8s 사용 이유 쿠퍼네티스는 분산 되어 있는

younyellow.tistory.com

 

package com.example.demo;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {
	@GetMapping("/")
	public ResponseEntity<String> Main() throws Exception {
		try {
			InetAddress inetAddress = InetAddress.getLocalHost();
			String strIpAdress = inetAddress.getHostAddress();
			String html = "1번 서비스 현재 내부 아이피 주소는 <b>" + strIpAdress+"</b> 입니다.";
			return ResponseEntity.status(HttpStatus.OK).body(html);
		} catch (UnknownHostException e) {
			e.printStackTrace();
			return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("아이피 주소를 불러 올 수 없습니다");
		}
			
	}

}

1번 서비스 정의 해두었던 dockerfile로 빌드

2023.08.25 - [인프라/Docker] - k8s 실습을 위한 SpringBoot Dockerfile 작성

 

k8s 실습을 위한 SpringBoot Dockerfile 작성

2023.08.27 - [인프라/Kubernetes] - Kubernetes 실습 및 서비스 구축 k8s 실습을 위해 SpringBoot 프로젝트, dockerfile을 작성 Controller package com.example.demo; import java.net.InetAddress; import java.net.UnknownHostException; import o

younyellow.tistory.com

PS C:\eclipse-workspace\KubernetesDemo> docker image build -t sihyun2/firstservice .
[+] Building 221.3s (11/11) FINISHED                                                                     docker:default
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 181B                                                                               0.0s
 => [internal] load metadata for docker.io/library/openjdk:latest                                                  0.0s
 => [1/6] FROM docker.io/library/openjdk                                                                           0.0s
 => [internal] load build context                                                                                  0.1s
 => => transferring context: 14.49kB                                                                               0.0s
 => CACHED [2/6] RUN microdnf install findutils                                                                    0.0s
 => CACHED [3/6] RUN mkdir /project                                                                                0.0s
 => CACHED [4/6] WORKDIR /project                                                                                  0.0s
 => [5/6] COPY ./ .                                                                                                0.1s
 => [6/6] RUN ./gradlew build                                                                                    219.9s
 => exporting to image                                                                                             1.1s
 => => exporting layers                                                                                            1.1s
 => => writing image sha256:25aab28e2b763ce6a48d945c0d205887df3a4637db35ab3ad62cfea2d9fef792                       0.0s
 => => naming to docker.io/sihyun2/firstservice                                                                    0.0s

dockerhub에 업로드

PS C:\eclipse-workspace\KubernetesDemo> docker push sihyun2/firstservice
Using default tag: latest
The push refers to repository [docker.io/sihyun2/firstservice]
2f532478a5e7: Pushed
6037093335ce: Pushed
5f70bf18a086: Pushed
1c1b3bf25883: Pushed
5d9f424e0267: Pushed
56285d9a7760: Mounted from library/openjdk
077bff59ce57: Mounted from library/openjdk
9cd9df9ffc97: Mounted from library/openjdk
latest: digest: sha256:6972110c9616bacfb39fdfe6a265f68b6b86bda38b53d3145f40cafcb6ca67f5 size: 2005

디폴로이먼트 정의 kind-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web-server1
spec:
  replicas: 4
  selector:
    matchLabels:
      app: my-web-server1
  template:
    metadata:
      name: my-web-server1
      labels:
        app: my-web-server1
    spec:
      containers:
        - name: my-web-server1
          image: sihyun2/firstservice

디플로이먼트 생성

root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl apply -f kind-deployment.yaml

생성 확인

root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl get deployment,pods,replicaset -o wide
NAME                             READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS       IMAGES                 SELECTOR
deployment.apps/my-web-server1   0/4     4            0           2m58s   my-web-server1   sihyun2/firstservice   app=my-web-server1

NAME                                 READY   STATUS              RESTARTS   AGE     IP       NODE                 NOMINATED NODE   READINESS GATES
pod/my-web-server1-578c85d94-8ljsx   0/1     ContainerCreating   0          2m58s   <none>   kubernetes-worker    <none>           <none>
pod/my-web-server1-578c85d94-9jfks   0/1     ContainerCreating   0          2m58s   <none>   kubernetes-worker2   <none>           <none>
pod/my-web-server1-578c85d94-fp9q2   0/1     ContainerCreating   0          2m58s   <none>   kubernetes-worker2   <none>           <none>
pod/my-web-server1-578c85d94-zqwj4   0/1     ContainerCreating   0          2m58s   <none>   kubernetes-worker    <none>           <none>

NAME                                       DESIRED   CURRENT   READY   AGE     CONTAINERS       IMAGES                 SELECTOR
replicaset.apps/my-web-server1-578c85d94   4         4         0       2m58s   my-web-server1   sihyun2/firstservice   app=my-web-server1,pod-template-hash=578c85d94

노드 포트 정의 kind-nodeport.yaml

port = 내부 통신하기 위한 포트

targetPort = 파드 내부 서비스 포트

apiVersion: v1
kind: Service
metadata:
  name: node-port
spec:
  ports:
    - name: web-server-port
      port: 80
      targetPort: 8080
  selector: 
    app: my-web-server1
  type: NodePort

노드 포트 생성

root@DESKTOP-Q4VBHGG:/home/yellownyou# kubectl apply -f kind-nodeport.yaml
service/node-port created

컨트롤 플레인 노드에서 포트 개방

 

정상 작동 하는지 테스트

 

정상 작동 하는 것을 확인할 수 있습니다.