[Kubernetes] 리소스 설정 방법에 대해 알아보자!

GoodCoder·2023년 6월 2일
0

쿠버네티스개념

목록 보기
5/6

Intro

여태까지 Kubernetes의 개념 위주로 달려왔다!
이제는 실제 YAML 파일 예시를 보면서 어떻게 구성되는지를 확인해보자!

Main

가장 먼저 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 ~~ 이런 부분들은 다음 포스팅에서 하겠다!
뒤의 포스터를 다 읽고 마지막으로 돌아와서 읽으면 조금 더 이해하기가 편하곘다!

Summary

실제 YAML파일을 작성하면서 리소스를 만들어봤다.
다른 것들과는 다르게 여러가지를 생각하면서 진행해야한다.
Secret이나 Config를 통해서 보안에 신경써야한다.

profile
항상 끊임없이 노력하는 개발자입니다.

0개의 댓글