[kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1) :: . . . (tistory.com)

 

[kubernetes, ncp] 쿠버네티스 최초 설치 및 기본 설정 (1)

새로운 서비스에 쿠버네티스를 도입하기 위해 스터디중 쿠버네티스 최초 설치 및 환경설정 (마스터-워커노드 연결)을 진행한다. (개발 환경은 naver cloud platform에서 진행하고 마스터노드1, 워커노

yong0810.tistory.com

 

(해당 내용은 NCP classic 환경 관련입니다)

 

프로젝트 구조를 크게 

dev, ops namespace 로 구성하고, 각 namespace 안에 api 서비스 및 애플리케이션(파드)이 동작하게 만들 예정이다.

api 애플리케이션은 서비스를 통해 워커노드 1, 2 에서 동작한다.

이후 nginx-ingress-controller를 통해 외부와 연결할 수 있도록 한다.

 

이번에는 namespace, deployment, service 설정을 하고 pod가 동작하는 것까지 확인한다.


1. namespace 설정

namespace란 쿠버네티스 내에서 논리적인 분리 단위이다. (Cloud VPC 같은 개념이라고 생각하면 편할 듯 하다)

운영 환경별로 namespace를 생성하여 (dev, stg, prd) 관리한다.

또한, 기본 메모리 요청량 및 기본 메모리 상한을 설정할 수도 있다.

(원래는 운영 환경별로 따로 cluster를 구성하는게 맞는 방법같지만, 비용적인 측면을 생각해 한 cluster에 여러개의 namespace를 구성해 동작하도록 한다)

 

dev-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
        name: dev-namespace
kubectl apply -f dev-namespace.yaml

 

 

2. deployment 설정

deployment는 replicaset을 통해 애플리케이션을 배포하고 업데이트, 관리하기 위한 상위 리소스이다.

deployment를 생성하면 replicaset이 생성되고, 이 replicaset에 의해 파드가 생성되고 관리된다.

 

dev-api-deployment.yaml

metadata - namespace와 spec - template - metadata - labels를 통해 namespace와 어떤 노드에 생성할 것인지를 설정

(해당 label은 node에 추가해줘야 한다)

(명령어는 kubectl label nodes <노드명> <label명>)

apiVersion: apps/v1
kind: Deployment
metadata:
        name: dev-api-deployment
        namespace: dev-namespace
        labels:
                app: dev-api-deployment
spec:
        replicas: 2
        selector:
                matchLabels:
                        env: dev-node
        template:
                metadata:
                        labels:
                                env: dev-node
                                app: dev-api-pod
                spec:
                        containers:
                             -  name: <도커 이미지 명>
                                image: <도커 이미지> 
                                imagePullPolicy: Always
                        imagePullSecrets: # 외부 저장소에서 이미지를 pull하는 경우
                             -  name: docker-registry-login
kubectl apply -f dev-api-deployment.yaml

deployment가 생성되고 해당 deployment에서 replicaset, pod를 생성한 것을 볼 수 있다.

조금 더 자세히 보면

각 노드에 잘 할당됐다

 

 

 

3. Service 설정

서비스는 파드에서 실행중인 애플리케이션을 외부로 노출하는 방법이다.

 

Service의 타입에는

  • ClusterIP: 클러스터 내부에서만 접근
  • NodePort: 포트 번호를 통해 외부 접근
  • Load Balancer: 외부 LB 연결
  • ExternalName: kube-dns로 DNS 이용

이 있다.

 

앞으로 Nginx-Ingress-Controller를 사용해 이 Controller가 도메인에 따라 지금 생성한 Service로 연결하여

Service가 각 파드가 생성되어 있는 노드로 request를 보내는 식으로 구성할 것이다.

 

dev-api-service.yaml

deployment와 마찬가지로 어떤 namespace에 적용할 것인지를 작성한다

apiVersion: v1
kind: Service
metadata:
        name: dev-api-service
        namespace: dev-namespace
spec:
        ports:
            - port: 9001
              targetPort: 8080
        selector:
                env: dev-node
kubectl apply -f dev-api-service.yaml

 

끝!

 

다음으로 nginx-ingress-controller를 설정하고, 서버 공인IP와 포트를 통해 해당 서비스에 접근한다.

[kubernetes, ncp] 쿠버네티스 nginx ingress controller 설정 및 배포 (3) :: . . . (tistory.com)

 

[kubernetes, ncp] 쿠버네티스 nginx ingress controller 설정 및 배포 (3)

(마지막) 외부와 연결해 이전에 생성했던 service에 접근할 수 있도록 하는 nginx ingress controller 를 생성하고 테스트까지 진행한다! 실제로 Host를 설정해서 환경별로 나누는 부분까지는 하지 않고, Pa

yong0810.tistory.com

 

+ Recent posts