여태까지 Kubernetes의 개념 위주로 달려왔다!
이제는 실제 YAML 파일 예시를 보면서 어떻게 구성되는지를 확인해보자!
가장 먼저 Service/Pods를 생성, 관리하는 YAML 파일이다.
아래의 자료를 보면서 주석을 하나하나씩 보면 좋을 것 같다.
apiVersion: apps/v1 # Kubernetes api version 보통 대부분은 v1이다.
kind: Deployment # 해당 리소스 종류 : Deployment로 아래에 Replicasets 및 pods를 같이 작성할 것이다.
metadata:
name: back-service # 해당 리소스의 이름
labels: # 리소스 식별에 사용
app: back-service
spec: # 추가사항
replicas: 2 # Replicasets의 개수를 정의하는 곳 : 난 간단하게 2개만 했다.
selector:
matchLabels:
app: back-service # 위의 metadata label하고 맞아야 한다.
template:
metadata:
labels:
app: back-service # metadata label하고 동일하게 사용한다.
spec:
containers: # 드디어 pods..!
- name: back-service # 이름은 나는 리소스 이름으로 통일시켰다.
image: docker.io/[name]/[Repo]:backend298 # Dockerhub에서 가져온다. => 내부 Docker image에서는 못가져옴
ports:
- containerPort: 8000 # 해당 container port
env: # 설정 자료들 => 이 부분에서 아까 본 Secret, Configmap 등으로 가릴 수 있다. 나는 Secret 사용..
- name: DB_HOST # 이 부분들은 backend에서 DB 연결할 때 사용하는 것과 같은 원리이다.
valueFrom: # 내가 원하는 외부의 리소스를 받을게 있다는 의미
secretKeyRef: # 쿠버네티스 내부의 Secret key를 사용하겠다는 의미이다.
namespace: my-namespace
name: db-secret
key: DB_HOST
- name: DB_PORT
valueFrom:
secretKeyRef:
namespace: my-namespace
name: db-secret
key: DB_PORT
- name: DB_NAME
valueFrom:
secretKeyRef:
namespace: my-namespace
name: db-secret
key: DB_NAME
- name: DB_USER
valueFrom:
secretKeyRef:
namespace: my-namespace
name: db-secret
key: DB_USER
- name: DB_Password
valueFrom:
secretKeyRef:
namespace: my-namespace
name: db-secret
key: DB_PASSWORD
imagePullSecrets: # Dockerhub에서 가져올 때 내가 사용할 것이라는걸 알려주는 것
- name: dockerhub
---
apiVersion: v1
kind: Service # 우리가 아까 봤던 엔드포인트를 잡아주는 리소스 종류
metadata:
name: back-service
spec:
type: ClusterIP # 쿠버네티스 내부에서만 접근이 가능하게 만들어 놓는다.
selector:
app: back-service
ports:
- protocol: TCP
port: 8000 # 포트번호 > 만약 JPA라면 JPA 설정에 server.port = 8000과 같이 저장해줘야한다.
ConfigMap이나 Secret의 경우에는 간단하게 다음과 같다.
apiVersion: v1
kind: ConfigMap
metadata:
name: config-back
namespace: default # default는 써줘도 되고 안써줘도 된다.
data:
DB_URL: sadsadasd
DB_USER: asdasdasd
DB_PASS: sadasdasd
실제 Deployment에서 사용하고자 할 때는 다음과 같이 쓰면 된다.
ConfigMap
valueFrom:
configMapKeyRef:
name: [ConfigMap 이름]
key: [ConfigMap 내 key]
SecretKey
valueFrom: # 내가 원하는 외부의 리소스를 받을게 있다는 의미
secretKeyRef: # 쿠버네티스 내부의 Secret key를 사용하겠다는 의미이다.
name: db-secret
key: DB_HOST
아, 참고로 이거 그냥 작성하고 그냥 냅두면 되는게 아니라 당연히 kubectl apply -f abc.yaml처럼 Cluster에 등록해줘야한다.
여기에서 namespace, kubectl apply ~~ 이런 부분들은 다음 포스팅에서 하겠다!
뒤의 포스터를 다 읽고 마지막으로 돌아와서 읽으면 조금 더 이해하기가 편하곘다!
실제 YAML파일을 작성하면서 리소스를 만들어봤다.
다른 것들과는 다르게 여러가지를 생각하면서 진행해야한다.
Secret이나 Config를 통해서 보안에 신경써야한다.