티스토리 뷰
출처: https://wave1994.tistory.com/136 [훈훈훈:티스토리]
Kubernetes 환경의 PostgreSQL 설치하기
# Dockerfile <- 이름 정확하게 기재 하세요 대소문자
FROM java:8
EXPOSE 8080
ARG JAR_FILE=build/libs/rest-exam-0.0.1.jar
ADD ${JAR_FILE} rest-exam.jar
ENTRYPOINT ["java","-jar", "/rest-exam.jar"]
[root@m-k8s home]# docker build -t tommypagy/rest-exam:0.6 .
Sending build context to Docker daemon 1.164GB
Step 1/2 : FROM ubuntu:20.04
---> bf40b7bc7a11
Step 2/2 : RUN apt update && apt install -y python3
---> Using cache
---> ed6a3007afd4
Successfully built ed6a3007afd4
Successfully tagged tommypagy/rest-exam:0.6
Push 하게 되면 docker Site 에 push 된 상황을 확인할수가 있습니다. [root@m-k8s home]# docker push tommypagy/rest-exam:0.6 The push refers to repository [docker.io/tommypagy/rest-exam] 8c261b2ecdee: Mounted from tommypagy/tommypagy-repository 6c3e7df31590: Mounted from tommypagy/tommypagy-repository 0.6: digest: sha256:774983c8593c78d15fa5c2e34f82ee3311353673eedffbbaffd2718f3f478b3c size: 741 |
deployment-postgresql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-server-deployment
labels:
app: postgres-server
spec:
replicas: 1
selector:
matchLabels:
app: postgres-server
template:
metadata:
labels:
app: postgres-server
spec:
containers:
- name: postgresql
image: postgres
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
value: tommypagy
- name: POSTGRES_DB
value: springexam
- name: POSTGRES_PASSWORD
value: password
테스트용으로 작성한 코드이기 때문에 replicas 는 1로 설정하였다.
containers 설정을 살펴보면 container port는 postgresql
디폴트 포트로 잡았고 env 설정은 application.yaml 설정과 동일하게 했다.
#POD 생성 [root@m-k8s postgre]# k create -f deployment-postgresql.yaml deployment.apps/postgres-server-deployment created #POD 조회 [root@m-k8s postgre]# k get po NAME READY STATUS RESTARTS AGE postgres-server-deployment-644567b566-trmg8 0/1 ContainerCreating 0 2s #POD 생성완료 [root@m-k8s postgre]# k get po -w NAME READY STATUS RESTARTS AGE postgres-server-deployment-644567b566-trmg8 1/1 Running 0 5s |
# deployment-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-server-deployment
labels:
app: spring-server
spec:
replicas: 1
selector:
matchLabels:
app: spring-server
template:
metadata:
labels:
app: spring-server
spec:
restartPolicy: Always
containers:
- name: spring
image: tommypagy/rest-exam:0.6
imagePullPolicy: Always
ports:
- containerPort: 8080
#deploy Server 생성 [root@m-k8s postgre]# k create -f deployment-server.yaml deployment.apps/spring-server-deployment created #deploy Server 조회 [root@m-k8s postgre]# k get po NAME READY STATUS RESTARTS AGE spring-server-deployment-54c6c6ccfb-2pmh9 0/1 ContainerCreating 0 2s [root@m-k8s postgre]# #deploy Server 생성완료 [root@m-k8s postgre]# k get po -w NAME READY STATUS RESTARTS AGE spring-server-deployment-54c6c6ccfb-2pmh9 1/1 Running 0 59s |
# service-postgres.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres-server-service
spec:
clusterIP: None
ports:
- port: 8080
targetPort: 5432
protocol: TCP
name: db-port
selector:
app: postgres-server
service-postgresql 파일은 위에서 작성한 deployment-postgresql 에서 설정한 label 을 selector로 설정하였다.
그리고 외부에서 로드 밸런싱을 할 필요가 없고 내부 Cluster IP도 필요하지 않아 headless service로 작성하였다.
포트는 web-server port는 8080 이고 DB port는 5432이기 때문에 위와 같이 작성하였다.
# service-server.yaml
apiVersion: v1
kind: Service
metadata:
name: spring-server-service
spec:
clusterIP: None
ports:
- port: 8080
targetPort: 8080
protocol: TCP
name: server-port
selector:
app: spring-server
서버 파일도 위에서 작성한 postgresql 파일과 거의 동일하게 작성하였다.
application.yaml
spring:
datasource:
url: jdbc:postgresql://postgres-server-service.default.svc.cluster.local:5432/springexam
username: kwanghoon.kim
password: password
driverClassName: org.postgresql.Driver
마지막으로 application.yaml에서 DB 서버에 관한 설정을 하였다.
쿠버네티스에서 파드는 영속적인 객체가 아니기 때문에 재시작 하는 경우가 생기는데 이때 IP가 바뀌게 된다.
이에 대한 해결책은 쿠버네티스에서 제공하는 DNS를 사용하여 URL을 만들었다.
파일이 세팅이 되었다면 이제 아래 명령어로 실행시켜 보자
helm install product-api .
이제 생성된 svc, deployment, pod를 조회해보자
❯ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 none 443/TCP 19m
postgres-server-service ClusterIP None none 8080/TCP 18m
spring-server-service ClusterIP None none 8080/TCP 18m
❯ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
postgres-server-deployment 1/1 1 1 19m
spring-server-deployment 1/1 1 1 19m
❯ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
postgres-server-deployment-6887b5cdcb-r9ff4 1/1 Running 0 19m 10.1.1.50 docker-desktop <none> <none>
spring-server-deployment-5fcc9df984-4svf6 1/1 Running 0 19m 10.1.1.51 docker-desktop <none> <none>
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- startup 에러
- pod 상태
- 설치하기(HP-UX)
- 스토리지 클레스
- 테라폼
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- [오라클 튜닝] instance 튜닝2
- 쿠버네티스
- 앤시블
- 오라클 홈디렉토리 copy 후 startup 에러
- 여러서버 컨트롤
- CVE 취약점 점검
- 커널
- 우분투
- MSA
- 코로나19
- directory copy 후 startup 에러
- 튜닝
- (InstantClient) 설치하기(HP-UX)
- 키알리
- [오라클 튜닝] sql 튜닝
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- K8s
- 5.4.0.1072
- ubuntu
- 오라클
- 트리이스
- 버쳐박스
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- Oracle
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함