GYAOのtsです。
我々のチームは、オールパブリッククラウドで、Microservice Architectureを採用した次期バックエンドを設計中です。
経緯
前回の記事の続きです。
- アプリケーション雛形作成 ← 完了
- DockerImage作成
- imageの保存
- deploy
DockerImage作成
アプリケーションの肉付けは後でやるとして、次はこれをDockerImageにしてみよう。
Dockerfile
Dockerfileの作成に関してはこちらのオフィシャルページを参照
FROM java:8
ENV WAR_FILE_NAME=storeagent-0.0.1-SNAPSHOT.war
VOLUME /tmp
ADD target/$WAR_FILE_NAME app.jar
RUN sh -c 'touch /app.jar'
RUN groupadd spring \
&& useradd -r -g spring spring
USER spring
EXPOSE 80 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
CMD ["start"]
画面系のものは8080でAPIを80で公開する予定なので、両方Exposeする。
DockerImageのコンテナレジストリへの登録
Cloud Shell
Cloud Shell、便利ですね。
javaのバージョンが、1.7になっていたので、1.8に切り替える。
sudo update-alternatives --config java
javacも同様
sudo update-alternatives --config javac
build & push
packaging
mvn install
docker build
docker build -t asia.gcr.io/[projectid]/storeagent:0.1.0 .
push image
gcloud docker push asia.gcr.io/zeolite-1196/storeagent:0.1.0
コンテナレジストリに登録する。
コンテナレジストリに登録されていることを確認container作成
create container
gcloud container clusters create "store-agent-asia" --num-nodes 3 --zone "asia-east1-a" --machine-type "n1-standard-2" --scopes "compute-rw","storage-ro","bigquery","logging-write","monitoring"
node3でasia-east1-aに作成
credentials 取得
gcloud container clusters get-credentials store-agent-asia --zone asia-east1-a
yamlの用意
プロジェクト直下のkubernetesディレクトリに作成Controller
apiVersion: v1
kind: ReplicationController
metadata:
name: store-agent
labels:
app: store-agent
role: store-agent-node
tier: backend
spec:
replicas: 2
template:
metadata:
labels:
app: store-agent
role: store-agent-node
tier: backend
spec:
containers:
- name: store-agent
image: asia.gcr.io/zeolite-1196/storeagent:0.1.0
env:
- name: WAR_FILE_NAME
value: storeagent-0.0.1-SNAPSHOT.war
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 8080
- containerPort: 80
Service
kind: Service
apiVersion: v1
metadata:
name: store-agent-service
labels:
app: store-agent
role: store-agent-node
tier: backend
spec:
type: LoadBalancer
ports:
- port: 80
name: webservice
targetPort: 80
- port: 8080
name: console
targetPort: 8080
selector:
app: store-agent
role: store-agent-node
tier: backend
レプリケーションコントローラーとサービスの作成
kubectl create -f kubernetes/store-agent-controller.yaml
kubectl create -f kubernetes/store-agent-service.yaml
確認する
# podリスト取得
kubectl get pods
# serviceリスト取得
kubectl get services
SpringBootアプリケーションが立ち上がっているかどうか確認する
kubectl logs store-agent-hpvda
起動を確認。
コンテナもちゃんと作成されてますね。
せっかくなのでこれもやってみる
localマシンで実行。もちろんこちらのSDKがinstallされていることが前提。
gcloud components install kubectl
kubectl proxy
アクセスするとリッチなダッシュボード
以上。
次回
レプリケーションコントローラーの説明やserviceの説明は省きました。
また詳しくレポートする機会があれば載せます。
以上でSpringBootのアプリケーションの作成→Dockerイメージ化→kubernetes管理下におく
というところまで行きました。
次回は上記のアプリケーションにApache Camelを統合してみます。