GoLand에서 Kubernetes 사용하기
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.yaml과 web.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 정보가 표시됩니다.
또한 서비스 및 인그레스 지점에 관한 네트워크 정보도 클러스터에서 확인할 수 있습니다.
Configuration(구성) 섹션에는 Namespaces, Nodes, Cluster Roles, Roles, Config Maps, Secrets 실행에 관한 정보 등 현재 네임스페이스 또는 클러스터에 대한 모든 구성 정보가 포함됩니다.
마지막으로 Storage(스토리지) 섹션에는 현재 구성의 Persistent Volumes, Persistent Volume Claims, Storage Classes가 표시됩니다.
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
프로 팁: HTTP 요청 파일 접근 방식을 사용해 IDE의 요청을 실행하여 서비스가 작동 중인지 확인할 수 있습니다.
Kubernetes 서비스 디버그
GoLand를 사용하여 Kubernetes 서비스를 디버깅하려면 web.yaml 파일을 약간 변경해야 합니다. 이러한 변경 내용은 저장소의 kubernetes-debug 브랜치에서 확인할 수 있습니다.
변경 내용은 일반 Docker 컨테이너를 디버그하기 위해 변경한 것과 매우 유사하게 적용해야 합니다.
먼저 Dockerfile을 조정한 다음, Run(실행) | Run…(실행…) | ‘build Dockerfile'(Dockerfile 빌드) 구성을 사용하여 빌드해야 합니다.
그런 다음, Run | Debug…(디버그…) | Kubernetes Service(Kubernetes 서비스)를 사용하면 Go Remote(Go 원격) 디버그 구성이 실행됩니다.
그러면 디버거가 익숙한 디버그 방식대로 작동할 것입니다.
이것으로 Docker, Docker Compose, Kubernetes을 사용하여 Go 마이크로서비스를 실행 및 디버그하는 방법에 관한 시리즈를 마치겠습니다.
이 글에서는 서비스를 일반적인 방법으로 시작하지 않고 디버그할 수 있도록 Kubernetes 플러그인을 사용해 배포 파일을 편집하는 방법에 관해 설명했습니다.
의견이 있으시면 아래의 댓글 섹션, 이슈 트래커 또는 @GoLandIDE 트윗을 통해 공유해 주세요.
이 게시물은 Florin Pățan이 작성한 Using Kubernetes from GoLand를 번역한 글입니다.