🐕
Goで作成したAPIをKubernetes上で動かす
はじめに
こちらの記事は前回作成したGo APIのdocker imageを使ってkubernetesの学習を兼ねてKubernetes上で動作させることをゴールとしています。
前提
- Kubernetesがインストールされていること
kubernetesのコンテキストはdocker-desktopで進めました
目次
- deployment.yamlを作成
- service.yamlを作成
- 動作確認
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
を使用するため、imagePullPolicy
をIfNotPresent
に設定します。
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