🐕

Goで作成したAPIをKubernetes上で動かす

2022/04/27に公開

はじめに

こちらの記事は前回作成したGo APIのdocker imageを使ってkubernetesの学習を兼ねてKubernetes上で動作させることをゴールとしています。
https://zenn.dev/kenny/articles/b9dd668bf09efe

前提

  • Kubernetesがインストールされていること

kubernetesのコンテキストはdocker-desktopで進めました

目次

  1. deployment.yamlを作成
  2. service.yamlを作成
  3. 動作確認

1. deployment.yamlを作成

前回の記事で作成したgo-sampleディレクトリにdeployment.yamlを作成します

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-sample
  labels:
    app: go-sample
spec:
  # とりあえず2つのpodに設定しておく
  replicas: 2
  selector:
    matchLabels:
      app: go-sample
  template:
    metadata:
      labels:
        app: go-sample
    spec:
      containers:
        - name: go-sample
          # ローカルで作成したイメージを使用
          image: go-sample-image
          # ローカルのイメージを使用するため、imagePullPolicyをIfNotPresentに設定
          imagePullPolicy: IfNotPresent
          # コンテナのポートは8080
          ports:
            - containerPort: 8080

ポイントとしては、
ローカルで作成したDocker imageのgo-sample-imageを使用するため、imagePullPolicyIfNotPresentに設定します。
IfNotPresentにするとコンテナレジストリに問い合わてあればそのイメージを利用し、なければローカルイメージを利用するようにするという設定です。

deployment.yamlが作成出来たら、applyしてみます

$ kubectl apply -f deployment.yaml

正しくdeploymentとpodが作成されているか確認します

// podが2つ作成されているか確認
$ kubectl get pods

// deploymentが作成されているか確認
$ kubectl get deploy

2. service.yamlを作成

上記でdeploymentとpodを作成しましたが、そのままではローカルマシンから呼び出せないので、Podの集合体にアクセスするためのServiceを作成します

apiVersion: v1
kind: Service
metadata:
  name: go-sample
  labels:
    app: go-sample
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: go-sample
  type: LoadBalancer

ServiceのTypeをLoadBalancerに指定するとローカルマシンからアクセスが出来る様になります

serviceが作成されているか確認します

$ kubectl get svc

3. 動作確認

$ curl http://localhost:8080/hello
// {"message":"Hello World!"}

以上になります
次はEKSの学習を兼ねてEKSで動作させれるようにしていきたいと思います

Discussion