Introduce
클라우드 웨이브 활동을 할 때는 eks 클러스터에 내 서비스를 띄워서 테스트 했지만 비용 이슈로 인해 kind 클러스터로 돌아와서 복습과 그 때는 해결하지 못했던 문제들을 해결해보고자 합니다.
kind 클러스터는 예전에 구축했으니 클러스터에 바로 서비스를 띄워서 잘 작동하는지 확인해보겠습니다
1. ConfigMap, Secret 띄우기
- 쿠버네티스에서 사용하는 파라미터와 환경변수를 관리하기 위해 ConfigMap과 Secret을 사용했습니다.
- Secret은 패스워드 및 인증서 와 같은 중요정보 보관용으로 사용(BASE 64 인코딩)
- configMap에 immutable:true를 해주면 성능 향상(감시하지 않는다.)
//data 부분에 configMap으로 관리할 변수 추가
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-configmap
data:
DB_DRIVER: 'com.mysql.cj.jdbc.Driver'
//secret은 data value 부분에 base64 인코딩을 한 뒤 값을 넣어줘야 합니다.
apiVersion: v1
kind: Secret
metadata:
name: spring-secret
type: Opaque
data:
DB_URL:
생성 됐는지 확인하기
2. deployment 띄우기
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-was
labels:
app: spring-was
spec:
selector:
matchLabels:
app: spring-was
template:
metadata:
labels:
app: spring-was
spec:
containers:
- name: spring-container
image: hyoungjoon/olivesafety
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
env:
- name: DB_URL
valueFrom:
secretKeyRef:
name: spring-secret
key: DB_URL
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: spring-secret
key: DB_PASSWORD
- name: JWT_TOKEN_SECRET
valueFrom:
secretKeyRef:
name: spring-secret
key: JWT_TOKEN_SECRET
- name: REDIS_HOST
valueFrom:
secretKeyRef:
name: spring-secret
key: REDIS_HOST
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: spring-secret
key: REDIS_PASSWORD
- name: REDIS_PORT
valueFrom:
secretKeyRef:
name: spring-secret
key: REDIS_PORT
- name: DB_USERNAME
valueFrom:
configMapKeyRef:
name: spring-configmap
key: DB_USERNAME
- name: DB_DRIVER
valueFrom:
configMapKeyRef:
name: spring-configmap
key: DB_DRIVER
3. service 띄우기
apiVersion: v1
kind: Service
metadata:
name: spring-service
spec:
selector:
app: spring-was
ports:
- port: 8080
targetPort: 8080
생성 됐는지 확인하기
4. nginx-ingress 설치
- 로컬에서 ingress를 사용하기 위해서 설치
- ingress를 사용하는 이유는 내부에 있는 서비스를 접속하기 위해서 외부 요청을 받아서 내부로 전달하는 역할을 합니다.
- 네트워크 7계층 레벨로 처리 해서 path 라우팅과 ssl 적용 가능
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
//ingress-nginx ns 생김
$ kubectl get ns
$ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
ingress 띄우기
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: spring-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: spring-service
port:
number: 8080
ingress까지 떴는지 확인하기
5. pod에 있는 api 서버에 요청을 보낼 수 있는 것을 확인할 수 있습니다.
)
다음 작업
로컬에서 모두 띄우는 것은 불가능할 것 같아서 jenkins로 ci/cd를 먼저 구축해보겠습니다.
'Ops' 카테고리의 다른 글
Jenkins로 ci/cd 파이프라인 구축하기(2) (0) | 2024.12.04 |
---|---|
Jenkins로 ci/cd 파이프라인 구축하기(1) (0) | 2024.12.04 |
kind 이용해서 k8s 다뤄보기 (0) | 2024.12.04 |
컨테이너 환경 로그 수집해보기 (0) | 2024.12.04 |
Github Action을 이용한 CI/CD 파이프라인 구축 (0) | 2024.12.04 |