2023.08.27 - [인프라/Kubernetes] - Kubernetes 실습 및 서비스 구축
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 작성
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
컨트롤 플레인 노드에서 포트 개방
정상 작동 하는지 테스트
정상 작동 하는 것을 확인할 수 있습니다.
'인프라 > Kubernetes' 카테고리의 다른 글
Jenkins를 통한 Kubernetes rolling update (0) | 2023.09.03 |
---|---|
Kubernetes Pods Auto Scalling (0) | 2023.09.03 |
Kubernetes 퍼시스턴트 볼륨 (0) | 2023.08.31 |
Kind(Kubernetes in Docker)를 통한 kubernetes 실습 환경 구축 (0) | 2023.08.27 |
Kubernetes 실습 및 서비스 구축 (0) | 2023.08.27 |