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
![スクリーンショット 2016-11-08 10.43.18.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F8b7a2515-053c-efe6-1829-78c0230db22a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=72203010a4dc8c5fe6022007b250567f)
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
コンテナレジストリに登録する。
![スクリーンショット 2016-11-08 11.46.56.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F48d51e14-ac29-4858-91e6-4df74e02a544.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d05568cd4f6f8235d162a0d73ac15e28)
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の用意
![スクリーンショット 2016-11-08 14.12.40.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F120065f3-5626-b727-3400-76768d977928.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=267b614912902541726f7a702957727f)
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
![スクリーンショット 2016-11-08 14.16.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F4c5fd940-22f2-5967-dcba-02e8d126870d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1ca128c320b21366e052155ffc9208b0)
# serviceリスト取得
kubectl get services
![スクリーンショット 2016-11-08 14.16.58.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F62d4cfe8-d504-9dce-f282-243f8c51c7a8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5c72edc9581b5d55b001e63a61f1a339)
SpringBootアプリケーションが立ち上がっているかどうか確認する
kubectl logs store-agent-hpvda
![スクリーンショット 2016-11-08 14.18.29.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F3aac3316-0a4e-89cd-3997-dbc85dba56ed.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=641eb7865c77c89a2262441fa384a3f8)
起動を確認。
![スクリーンショット 2016-11-08 14.27.06.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F8c9a7298-260e-b4f9-c159-0dca02ffa6ab.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=fe15bb9e0d1e51cabecdc4cf76214f9a)
コンテナもちゃんと作成されてますね。
![スクリーンショット 2016-11-08 14.29.47.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F1af51353-88cb-2b62-1f53-00d36e232c75.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=28a256c0495b6ab85ef957d657eab763)
せっかくなのでこれもやってみる
localマシンで実行。もちろんこちらのSDKがinstallされていることが前提。
gcloud components install kubectl
kubectl proxy
![スクリーンショット 2016-11-08 14.37.51.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2F25b80115-405e-3aaa-c865-9b5676ecb503.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0edcdcd60fe24a38f237a9b6925e9bae)
アクセスするとリッチなダッシュボード
![スクリーンショット 2016-11-08 14.39.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114329%2Ffe05aa2c-a32a-2703-d7d3-86b96e3bf2a9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f2d6214f93205c178bda542dfb25dd5e)
以上。
次回
レプリケーションコントローラーの説明やserviceの説明は省きました。
また詳しくレポートする機会があれば載せます。
以上でSpringBootのアプリケーションの作成→Dockerイメージ化→kubernetes管理下におく
というところまで行きました。
次回は上記のアプリケーションにApache Camelを統合してみます。