Helidon Getting Started 3 -Kubernetes-
この記事について
今回は前回の続き、Helidonで生成されたDockerfile、マニフェストファイル(yaml)を使ってKubernetes上にコンテナイメージをデプロイします。
- この記事について
- Kubernetesの環境準備
- コンテナレジストリの準備
- コンテナレジストリへログイン
- コンテナレジストリへイメージをPush
- マニフェスト(yaml)の編集
- OKEにデプロイ
- リソースの起動確認
- アプリの動作確認
Kubernetesの環境準備
今回はOracle Container Engine for Kubernetes(OKE)を使用します。
OKEの作成方法はチャーリー様のブログを御覧ください。
charleysdiary.hatenablog.com
コンテナレジストリの準備
今回コンテナレジストリは OCI Registry(OCIR)を使用します。
OCIRの利用方法は別途整理します。
コンテナレジストリへログイン
OCIRにログインするにはdocker login <OCIRリージョンコード>
を実行します。
Usernameは<テナント名>/<ユーザー名>
を指定します。(例:gse00014510/api.user)
Passwordは生成したトークン文字列を入力します。
$ docker login iad.ocir.io Username: gse00014510/api.user Password: WARNING! Your password will be stored unencrypted in /home/vagrant/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
コンテナレジストリへイメージをPush
docker tag
コマンドでイメージにタグを付加し、docker push
コマンドでコンテナレジストリへイメージをPushします。
タグは<リージョンコード>/<テナント名>/<リポジトリ名>/quickstart-se:v1.0
を指定します。
タグの生成
$ docker tag quickstart-se iad.ocir.io/gse00014510/test/quickstart-se:v1.0
イメージのPush
$ docker push iad.ocir.io/gse00014510/test/quickstart-se:v1.0
出力
The push refers to repository [iad.ocir.io/gse00014510/test/quickstart-se] b7913ec2fe2b: Pushed 8f8cf55d8492: Pushed 9eed0f90b339: Pushed 9bca1faaa73e: Pushed 0c3170905795: Pushed df64d3292fd6: Pushed v1.0: digest: sha256:d44f34c60934ba859e6562b89fedbc91eba8b9c8754db334dfc8a5bad2e1c7e4 size: 1572
これでレジストリへイメージのPushが完了しました。
マニフェスト(yaml)の編集
Kubernetesクラスターにコンテナをデプロイするには、クラスター上の配置情報をマニフェストと呼ばれるファイルに記述しておく必要があります。 マニフェストに先程Pushしたコンテナイメージを指定します。
30行目 image: iad.ocir.io/gse00014510/test/quickstart-se:v1.0
kind: Service apiVersion: v1 metadata: name: quickstart-se labels: app: quickstart-se spec: type: NodePort selector: app: quickstart-se ports: - port: 8080 targetPort: 8080 name: http --- kind: Deployment apiVersion: extensions/v1beta1 metadata: name: quickstart-se spec: replicas: 1 template: metadata: labels: app: quickstart-se version: v1 spec: containers: - name: quickstart-se image: iad.ocir.io/gse00014510/test/quickstart-se:v1.0 #ここを修正 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 ---
OKEにデプロイ
さて、いよいよKubernetesクラスターへデプロイします。
kubectl create
コマンドでマニフェストファイルをKubernetesクラスターに作成(適用)します。
$ kubectl create -f app.yaml service/quickstart-se created deployment.extensions/quickstart-se created
リソースの起動確認
Podの起動を確認
$ kubectl get pods NAME READY STATUS RESTARTS AGE quickstart-se-58bd689f5c-dptr9 1/1 Running 0 56s
Serviceの起動を確認
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h quickstart-se NodePort 10.96.98.114 <none> 8080:30734/TCP 1m
アプリの動作確認
デフォルトで生成されるマニフェストにはServiceタイプにNodePortが使用されています。
NodePortはクラスターが可動しているマシン(ここではOracle CloudのVMインスタンス)の特定のPortを公開し、
そこに来たトラフィックをコンテナに届けます。
kubectl get node
コマンドでクラスターが可動しているマシンのIPアドレスを確認します。
$ kubectl get node NAME STATUS ROLES AGE VERSION 132.145.XXX.AA Ready node 1h v1.11.5 132.145.XXX.BB Ready node 1h v1.11.5 132.145.XXX.CC Ready node 1h v1.11.5
kubectl get service
コマンドでNodePortに割り振られたPort番号を確認します。
$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1h quickstart-se NodePort 10.96.245.253 <none> 8080:30908/TCP 1m
IPアドレスとPort番号を指定してRESTサービスを呼び出します。
$ curl -X GET http://132.145.XXX.AA:30908/greet {"message":"Hello World!"}
Kubernets上にコンテナデプロイしてアプリが動作しているのが確認できました!
これでHelidon Getting Startedは完了です。RESTサービスを僅かな手順で作成することができ、かつKubernetesへの展開を迅速に行うことが出来ます。
途中説明を省略してしまったOCIRの使用方法はまた別の機会に纏めたいと思います。
ご覧いただきありがとうございました。
この記事はOracle Cloud その2 Advent Calendar 2018 - Adventar18日目です。
3日連続の最終日です。(明後日も書きます。)