GoLand에서 Kubernetes 사용하기

게시일: 작성자: jessie.cho@jetbrains.com

Docker, Docker Compose 또는 Kubernetes를 사용하여 Go 서비스를 실행하는 방법에 관한 시리즈 중 마지막 글입니다. 여기에서는 Kubernetes 클러스터를 사용할 때 실행 및 디버그하는 방법을 집중적으로 다룰 것입니다.

Kubernetes 클러스터 설치 및 구성 방법은 다루지 않지만 이 작업은 kubeadm, minikube, microk8s와 같은 다양한 도구를 사용하여 수행할 수 있습니다. Windows를 사용하는 경우 Windows용 Docker Desktop내장된Kubernetes 지원이 함께 제공됩니다. Raspberry Pi 4와 같이 ARM 칩 기반 플랫폼을 대신 사용하려는 경우 k3s 등을 사용하여 시작할 수 있습니다.

또한 Kubernetes 플러그인은 IDE에서 번들로 제공되지 않으므로 시작하기 전에 설치해야 합니다. 설치하려면 Settings(설정)/Preferences(환경 설정) | Plugins(플러그인) | Marketplace(마켓플레이스)로 이동하여 Kubernetes을 검색하면 됩니다.

IDE를 통해 Kubernetes에서 서비스 실행

지금까지 이 시리즈 글을 읽으셨다면 모든 코드가 다운로드 및 사용 가능하도록 제공된다는 사실을 알고 계실 겁니다. 마찬가지로 여기에서도 Kubernetes를 사용하기 위한 코드가 제공됩니다. 먼저 Kubernetes 브랜치부터 시작해 보겠습니다.

여기에서는 db.yamlweb.yaml이라는 두 가지 파일을 찾을 수 있습니다. 이 파일은 Kubernetes 클러스터에서 GoLand 애플리케이션을 시작하는 데 필요한 모든 정의를 포함합니다. 또한 이 파일에서는 편의상 Kubernetes가 IDE와 동일한 시스템에서 실행되고 있다고 가정합니다.

db.yaml을 열어봅시다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: db-config
  labels:
    dockerdev: db
data:
  POSTGRES_DB: goland
  POSTGRES_USER: goland
  POSTGRES_PASSWORD: goland
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    dockerdev: db
  name: db
spec:
  serviceName: dockerdev-db
  selector:
    matchLabels:
      dockerdev: db
  template:
    metadata:
      labels:
        dockerdev: db
    spec:
      containers:
        - name: db
          image: postgres:12.2-alpine
          imagePullPolicy: IfNotPresent
          envFrom:
            - configMapRef:
                name: db-config
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: db-init
              mountPath: /docker-entrypoint-initdb.d/init.sql
              subPath: init.sql
      volumes:
        -  name: db-init
           hostPath:
             path: /d/GoLandProjects/dockerdev
---
apiVersion: v1
kind: Service
metadata:
  labels:
    dockerdev: db
  name: dockerdev-db-exported
spec:
  type: NodePort
  ports:
    - name: 5432-tcp
      port: 5432
      targetPort: 5432
      nodePort: 30432
  selector:
    dockerdev: db

참고: 이 예시를 시작하기 전에 호스트에서 init.sql 파일의 위치를 변경해야 합니다. 이는 path: /d/GoLandProjects/dockerdev를 이전에 프로젝트를 복제한 위치 경로로 바꾸면 해결됩니다.

이 작업이 완료되면 파일 상단의 에디터 여백에 있는 녹색 화살표를 사용하여 Kubernetes에 데이터베이스를 배포할 수 있습니다.

데이터베이스를 배포하면 StatefulSet이 생성되고 포드 내에서 데이터베이스가 실행됩니다. 그리고 Services(서비스) 도구 창이 나타나고 리소스를 만드는 데 사용되는 명령어와 해당 명령어의 출력이 표시됩니다.

Kubernetes 클러스터 개요

Kubernetes 클러스터에는 Pods, Deployments, Stateful Sets, Daemon Sets, Jobs, Cron Jobs, Replica Sets, Replication Controllers 등이 실행되는 Workloads 정보가 표시됩니다.

GoLand에서 Kubernetes ReplicaSet 실행하기

또한 서비스인그레스 지점에 관한 네트워크 정보도 클러스터에서 확인할 수 있습니다.

Kubernetes 서비스 및 인그레스 지점

Configuration(구성) 섹션에는 Namespaces, Nodes, Cluster Roles, Roles, Config Maps, Secrets 실행에 관한 정보 등 현재 네임스페이스 또는 클러스터에 대한 모든 구성 정보가 포함됩니다.

Kubernetes 구성 옵션

마지막으로 Storage(스토리지) 섹션에는 현재 구성의 Persistent Volumes, Persistent Volume Claims, Storage Classes가 표시됩니다.

Kubernetes 스토리지 옵션

IDE를 통해 Kubernetes 클러스터에서 Go 애플리케이션 실행

동일한 Kubernetes 클러스터에서 Go 애플리케이션을 실행하여 그 작동 방식을 살펴보겠습니다.

애플리케이션을 실행하려면 먼저 해당 애플리케이션이 포함된 Docker 컨테이너를 빌드해야 합니다. 예시 저장소에는 build Dockerfile이라는 실행 구성이 포함되어 있으며 클러스터 내부에서 컨테이너를 사용하려면 이 실행 구성을 먼저 실행해야 합니다.

이미 짐작하셨겠지만, 그 다음에는 이전에 db.yaml 파일에서 사용했던 녹색 화살표를 이번에는 web.yaml 파일에서 동일하게 사용하여 Kubernetes 내에서 Go 애플리케이션을 실행할 수 있습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    dockerdev: web
  name: web
spec:
  selector:
    matchLabels:
      dockerdev: web
  template:
    metadata:
      labels:
        dockerdev: web
    spec:
      containers:
        - name: dockerdev-web
          image: dockerdev-web:latest
          imagePullPolicy: Never
          env:
            - name: DD_DB_HOST
              value: "dockerdev-db-exported"
          ports:
            - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  labels:
    dockerdev: web
  name: dockerdev-web-exported
spec:
  type: NodePort
  ports:
    - name: 8000-tcp
      port: 8000
      targetPort: 8000
      nodePort: 30800
  selector:
    dockerdev: web

GoLand로 Kubernetes에서 Go 서비스 실행

프로 팁: HTTP 요청 파일 접근 방식을 사용해 IDE의 요청을 실행하여 서비스가 작동 중인지 확인할 수 있습니다.

IDE에서 HTTP 요청 실행

Kubernetes 서비스 디버그

GoLand를 사용하여 Kubernetes 서비스를 디버깅하려면 web.yaml 파일을 약간 변경해야 합니다. 이러한 변경 내용은 저장소의 kubernetes-debug 브랜치에서 확인할 수 있습니다.

변경 내용은 일반 Docker 컨테이너디버그하기 위해 변경한 것과 매우 유사하게 적용해야 합니다.

먼저 Dockerfile을 조정한 다음, Run(실행) | Run…(실행…) | ‘build Dockerfile'(Dockerfile 빌드) 구성을 사용하여 빌드해야 합니다.

그런 다음, Run | Debug…(디버그…) | Kubernetes Service(Kubernetes 서비스)를 사용하면 Go Remote(Go 원격) 디버그 구성이 실행됩니다.

Kubernetes에서 실행되는 Go 서비스 디버그

그러면 디버거가 익숙한 디버그 방식대로 작동할 것입니다.

이것으로 Docker, Docker Compose, Kubernetes을 사용하여 Go 마이크로서비스를 실행 및 디버그하는 방법에 관한 시리즈를 마치겠습니다.

이 글에서는 서비스를 일반적인 방법으로 시작하지 않고 디버그할 수 있도록 Kubernetes 플러그인을 사용해 배포 파일을 편집하는 방법에 관해 설명했습니다.
의견이 있으시면 아래의 댓글 섹션, 이슈 트래커 또는 @GoLandIDE 트윗을 통해 공유해 주세요.

이 게시물은 Florin Pățan이 작성한 Using Kubernetes from GoLand를 번역한 글입니다.