[NHN Cloud] NHN Kubernetes Service(NKS) 를 이용한 커뮤니티 블로그 구축 사례

[DataUs] 커뮤니티 블로그 구축 사례 feat. NHN Cloud(NKS)

2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education

NHN Cloud 사용자 가이드 : https://doc.skill.or.kr/nhn-cloud-user-guide

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

1. 먼저 알아 두기

1.1 Kubernetes 란 무엇인가?

쿠버네티스(Kubernetes, 쿠베르네테스, "K8s")는 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템으로, 오픈 소스 기반입니다. 원래 구글에 의해 설계되었고 현재 리눅스 재단에 의해 관리되고 있습니다. 목적은 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 플랫폼을 제공하기 위함입니. 도커를 포함하여 일련의 컨테이너 도구들과 함께 동작합니다.

1.2 NHN Kubernetes Service(NKS) 란?

해당 서비스가 궁금하신 분들은 NHN Cloud 에 방문 하시기 바랍니다.

NHN Kubernetes Service(NKS)는 컨테이너 오케스트레이션의 사실상 표준(de-facto standard)이 되어가고 있는 Kubernetes를 쉽게 운영할 수 있도록 도와주는 서비스입니다. NHN Kubernetes Service(NKS)로 NHN Cloud에 최적화된 Kubernetes 클러스터를 쉽게 만들어 사용할 수 있습니다.

NHN Cloud 클라우드에서 Kubernetes를 올바르고 안전하게 구동할 수 있게 Kubernetes 클러스터를 생성하고 관리할 수 있는 서비스입니다. 사용자는 웹 콘솔을 이용해 NHN Cloud에 꼭 맞는 Kubernetes 클러스터를 만들고 관리할 수 있습니다. 안전하고 효율적으로 운영할 수 있게 마스터는 NHN Cloud에서 관리하고, 사용자는 노드와 서비스, Pod(파드) 등을 관리합니다.

NHN Kubernetes Service(NKS)의 주요 기능은 다음과 같습니다.

  • NHN Cloud에 꼭맞는 Kubernetes 클러스터 생성과 관리

    • NHN Cloud의 기반 서비스와 연동

    • 로드 밸런서를 이용한 서비스 공개

    • 블록 스토리지와 연동한 퍼시스턴트 볼륨(Persistent Volume, PV) 지원

  • 고가용성을 보장하는 마스터 관리

  • 웹 콘솔을 이용한 쉬운 조작

    • 클러스터 생성, 삭제, 조회

    • 노드 그룹 생성, 삭제, 조회

    • kubectl 설정 지원

2. NHN Kubernetes Service(NKS) 를 이용하여 커뮤니티 블로그를 구축 설계도

이 글은 이전에 작성해 놓은 글인데 사용하기 쉽게 다시 작성 하게 되었습니다.

원본 글은 "DockerFile 을 이용하여 나만의 Docker Image 만들기" 입니다.

2.1 구축 환경

  • 빠른 개발을위해 최소한의 시스템으로 구성.[NHN Kubernetes Service(NKS) 사용]

  • Manager Server 를 통해 NHN Kubernetes Service System 에 접속

  • Kubernetes Yaml 파일로 L4/WEB/WAS/DB 구성

  • Kubernetes Yaml 파일에서 Pod Image 는 Docker Hub 에 구성한 업로드 Image 사용

2.2 아키텍처 물리 설계 구성도

대규모 3-Tier 구성 : 로드 발란스를 이용하여 3-Tier 구성을 확장하는 구성 방식. 웹 시스템의 사용자가 많은 엔터프라이즈 어플리케이션일 경우 대부분 대규모 3-Tier 구성을 이용하고 있다.

2.3 Infra Instance 구성 방안

TYPEManager ServerNKS Server

Instance

u2.c1m1

m2.c4m8

Base OS

Ubuntu Server 20.04 LTS

Ubuntu Server 18.04.6 LTS - Container (2022.01.20)

Block Storage Type

HDD 20GB

SSD 1000GB

IP 설정

Floating IP Public IP

Public IP

기타 사항

관리 Port 외부 접속 허용

Kubernetes 버전 : v1.22.3

노드 수 : 3 오토 스케일러 : 사용 안 함

2.4 Network 구성 방안

ServerFloating IPPublic IP

Manager Server

외부에서 접근이 가능하도 설정

NKS Server 와 접근 가능하 도록 설정

NKS Server

-

NKS System 과 접근 가능하도록 설정

POD 구성

Yaml Code 에 Loadbanacer 설정

내부 Pod 만 연결 설정

NHN Cloud 에서 Network 설정은 Security Groups 에서 알아 볼 수 있습니다.

2.5 Kubernetes Pod 구성 방안

Service 종류 종류

Service Type

Floating IP(Loadbanacer)

WEB/WAS Service

Docker Hub Image : bchwang/tomcat_mariadb:nginxtomcat Base Image : ubuntu:20.04 nignx : 1.18.0 Apache Tomcat : 9.0.45 openjdk : 1.8.0.292 Nodejs : v14.17.1

Service Port : 80, 8080

DB Service

Docker Hub Image: bchwang/tomcat_mariadb:mariadb Base Image : mariadb:10.4.18 Mysql root Passwd : root Mysql Database : deverse Home Directory : /home/dev Service Port : 3306

3. NHN Cloud Console 에서 만들어 보자

3.1 NHN Cloud Console 접속 하기

NHN Cloud 에 방문 하기 - 바로가기 -

3.1 NHN Cloud Instance 생성

먼저 Manager Server 를 만들어 보자

NHN Cloud > Console > Compute > instance > 인스턴스 생성

"그림. Instance 생성 -2" 에서 인스턴스 생성 시 이미지, 인스턴스 정보를 입력 하여야 한다.

또한 u2 계열의 인스턴트 타입은 문제가 발생 되었을 경우 손해배상 대상에서 제외된다는 것을 알아두셔야 합니다.

자세한 사항은 NHN Cloud 를 방문 하시기 바랍니다. - 바로가기 -

"그림. Instance 생성 -3" 에서 보안 그룹(Security Groups) 에서 접근 통제 설정을 한다.

자세한 사항은 Security Groups 를 참고하시기 바랍니다. - 바로가기 -

"그림. Instance 생성 -4" 에서 추가 블록 스토리지, 예약 스크립트 설정을 할 수 있다.

"그림. Instance 생성 -4" 에서 인스턴스의 생성 정보를 확인 하고 인스턴스 생성을 통해 만들 수 있습니다.

인스턴스를 생성하는 순간부터 과금이 시작됨을 알아 두시기 바랍니다.

3.2 NHN Kubernetes Service(NKS) 생성

NHN Kubernetes Service(NKS) 를 생성 해 보자.

NHN Cloud > Console > Container > NHN Kubernetes Service(NKS) > 클러스터 생성

"그림. NHN Kubernetes Service(NKS) 생성 -2" 에서 클러스터 이름, 기본 노드 그룹 등 설정을하여야 합니다.

  • 클러스터 이름 : test-kubernetes

  • Kubernetes 버전 : v1.22.3

  • 기본 노드 그룹 : Ubuntu Server 18.04.6 LTS - Container (2022.01.20)

  • 인스턴스 타입 : m2.c4m8

  • 노드 수 : 1 이상 (최대 10)

  • 블록 스토리지 : SSD 1000GB

"그림. NHN Kubernetes Service(NKS) 생성 -3" 에서 오토 스케일러, 예약 스크립트 등의 설정이 있습니다.

  • 사용 : 오토 스케일러에 대한 사용 여부를 선택

  • 최소 노드 수 : 1 ~ X (기본 노드 수에 따라 변경)

  • 최대 노드 수 : 3 ~ 10

  • 감축 : 오토 스케일러에 대한 감축 사용 여부를 선택

  • 리소스 사용량 임계치(%) : 시스템에 따른 설정이 필요(Default : 50)

  • 임계 영역 유지 시간(분) : 시스템에 따른 설정이 필요(Default : 10)

  • 증설 후 감축 지연 시간(분) : 시스템에 따른 설정이 필요(Default : 10)

"그림. NHN Kubernetes Service 생성 -4" 에서 클러스터의 생성 정보를 확인 하고 클러스터 생성을 통해 만들 수 있습니다.

클러스터 를 생성하는 순간부터 과금이 시작됨을 알아 두시기 바랍니다.

  • 클러스터는 최대 3개까지 생성할 수 있습니다.

클러스터 생성 후 접속 방법은 "[NHN Cloud] NHN Kubernetes Service(NKS) 활용법" 에서 찾아 보시기 바랍다.

4. Kubernetes Yaml 만들기

4.1 NameSpace Yaml

NameSpace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: project

4.2 MariaDB Yaml

MariaDB.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-mariadb
  labels:
    app: mariadb
  namespace: project
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mariadb
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      hostname: mariadb
      containers:
      - name: mariadb
        image: bchwang/tomcat_mariadb:mariadb
        ports:
        - containerPort: 3306
          name: mariadb

4.3 Mariadb Service Yaml

MariaDB-Service.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat-mariadb
  labels:
    app: mariadb
  namespace: project
spec:
  clusterIP: None
  ports:
  - port: 3306
  selector:
    app: mariadb

4.4 Nginx & Tomcat Service Yaml

Nginx-Tomcat-Service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-tomcat
  labels:
    app: nginx-tomcat
  namespace: project
  ## 오브젝트 선언형 관리
  annotations
    ## Floating ip 유지 설정
    loadbalancer.openstack.org/keep-floatingip: "true"
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 30000
  selector:
    app: nginx-tomcat
  ## NodePort 가 아니라 LoadBalancer 로 설정 해 주어야 함.
  type: LoadBalancer
  ## Floating ip 를 지정 하여 Loadbalancer ip 로 설정.
  loadBalancerIP: 133.186.216.107

4.5 Nginx & Tomcat Yaml

아래의 내용 중 hostAliases 의 ip 정보가 mariadb 의 IP 정보를 입력 하여야 함.

MariaDB 를 실행 한 후에 kuberctl get pod -n project 로 나온 IP 값을 입력 하면 됨.

Nginx-Tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-tomcat
  labels:
    app: nginx-tomcat
  namespace: project
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx-tomcat
  template:
    metadata:
      labels:
        app: nginx-tomcat
      name: nginx-tomcat
    spec:
      hostname: nginx-tomcat
      hostAliases:
      - ip: "10.100.4.9" ### mariadb hosts 지정
        hostnames:
        - "mariadb"
      containers:
      - name: nginx-tomcat
        image: bchwang/tomcat_mariadb:nginx_tomcat
        ports:
        - containerPort: 80
          name: nginx-tomcat

5. NHN Kubernetes Service(NKS) 를 이용하여 커뮤니티 블로그 실행

5.1 NHN Kubernetes Service(NKS) 실행 하기

NHN Cloud Manager Server 접속
### mariadb 및 서비스 실행   
$ kubectl apply -f 1.kubernetes_mariadb+service.yaml

### Mariadb Pod 실행 및 IP 정보 확인     
$ kubectl get pod -n project -o wide
NAME                                        READY     STATUS    RESTARTS   AGE          IP            NODE       NOMINATED NODE   READINESS GATES
mariadb-service-59868b7dd6-xb8tq            1/1       Running   0          1m           10.100.4.9    kubernetes   <none>           <none>

### ip 입력 후 nginx & tomcat 실행    
kubectl apply -f 2.kubernetes_nginx+tomcat.yaml

### Pod 실행 및 IP 정보 확인     
$ kubectl get pod -n project -o wide
NAME                                        READY     STATUS    RESTARTS   AGE          IP            NODE       NOMINATED NODE   READINESS GATES
mariadb-service-59868b7dd6-xb8tq            1/1       Running   0          1m           10.100.4.9    kubernetes   <none>           <none>
nginx_tomcat-service-59868b7dd6-xb8tq       1/1       Running   0          1m           10.100.4.10   kubernetes   <none>           <none>

### Service 정보 확인     
$ kubectl get service -n project -o wide
NAMESPACE              NAME                            TYPE         CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE     SELECTOR
nginx_tomcat           nginx_tomcat                    LoadBalancer 133.186.216.107 <none>        80/TCP                   8m4s    app=nginx_tomcat
mariadb                mariadb                         ClusterIP    <none>          <none>        3306/TCP                 18m4s   app=mariadb 

아래의 yaml 파일을 정리 하여 첨부 하였습니다.

5.2 크롬 접속 화면

6. 문의하기

Docker or NHN Kubernetes Service 가 궁금하신 분들은 아래의 메일로 보내주시기 바랍니다.

  • E-Mail : hwang79xx@msn.com

2022년 NHN Cloud 무료 교육일정: https://doc.skill.or.kr/2022-NHN-Cloud-Education

NHN Cloud 사용자 가이드 : https://doc.skill.or.kr/nhn-cloud-user-guide

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

Last updated