1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kubernetesのクラスターにknativeを入れてゼロスケールするPodを作る

Posted at

先日knativeを使って、ゼロスケールするAPIを作ったので備忘録です。

前提条件

  • kubernetesのクラスターは構築済み
  • istioはインストール済
  • knativeのversionはv0.17を使用しています

手順

  1. knativeのインストール
  2. アプリケーションコードの実装
  3. Dockerfileの実装
  4. manifestの実装
  5. 動作確認

knativeのインストール

以下のURLの参照をお願いします(ここはそれぞれの環境による部分もあると思うので省略します)
https://knative.dev/v0.16-docs/install/any-kubernetes-cluster/

アプリケーションコードの実装

# main.goとしてディレクトリ内に保存する
package main

import (
	"net/http"
	"github.com/gin-gonic/gin"
)


func main() {
	r := gin.Default()
	r.POST("/", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"code": http.StatusOK,
			"body": "OK",
		})
	})
	r.Run()
}

Dockerfileの実装

FROM golang:1.13-alpine as builder

WORKDIR /opt/application

COPY  go.mod .
COPY  go.sum .
RUN  go mod download

COPY  . .

RUN go build -o app ./main.go

FROM alpine

COPY --from=builder /opt/application/app /usr/local/bin/app

EXPOSE 8080

Dockerfileをbuildして、repositoryにpushをする

manifestの実装

# knativeのservice
# service.yamlとして保存
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: application
   namespace: anynamespace
spec:
  template:
    metadata:
      annotations:
        # see https://knative.dev/v0.15-docs/serving/configuring-autoscaling/
        autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
        autoscaling.knative.dev/metric: concurrency
        autoscaling.knative.dev/target: "1"
        autoscaling.knative.dev/minScale: "0" # レプリカの最小値
        autoscaling.knative.dev/maxScale: "1" # レプリカの最大値
        autoscaling.knative.dev/window: "60s" # この期間にトラフィックがない場合スケールアウトする
    spec:
      containers:
        - name: application
          image: app # docker imageを保存したrepositoryのパスに変更
          imagePullPolicy: Always
          command:
          - "/usr/local/bin/app"
# 作ったmanifestのapply
$ kubectl apply -f service.yaml

動作確認

# serviceがあることを確認
$ kubectl get ksvc
NAME          URL                         LATESTCREATED       LATESTREADY          READY   REASON
application   http://application.xxxxxx   application-pzxhm   application-pzxhm   True

$ CLUSTER_HOST=<CLUSTER_HOST>
curl  $CLUSTER_HOST -H "Host: http://application.xxxxxx"
OK

このように表示されたら成功です

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?