LoginSignup
1
1

More than 3 years have passed since last update.

Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。

Posted at

さて、
Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。(Tekton準備編)で、Tekton Dashboadの用意ができたら、いよいよAppsodyで作ったNode.jsのモジュールをデプロイしていきます。

今回は私のリポジトリをクローンします。

$ git clone https://github.com/motuo1201/appsody-test-build.git
$ cd appsody-test-build/

一度、ローカルで動かしてみましょう。

こちらの記事にも書きましたが、下記のコマンドでローカルの稼働が確認できます。

$ appsody run
......
[Container] App started on PORT 3000

http://localhost:3000でアクセスが可能になります。文言自体は、app.jsに書かれています。

スクリーンショット
スクリーンショット 2020-01-24 9.05.35.png

app.jsの中身

const app = require('express')()

app.get('/', (req, res) => {
  res.send("Hey! Hello Appsody!");
});

module.exports.app = app;

では、これをいよいよTekton経由でデプロイしてみましょう。

Docker Registoryとアクセスする情報を予め用意する。

Tektonはデプロイをする時に、Docker Registoryを使います。そのため、事前にDocker Hubなどに自分が操作できるDocker Registoryを用意しましょう!

こんな感じ。

スクリーンショット 2020-01-24 9.15.10.png

次に、Kubernetesにdocker hubの認証情報を登録します。
secret.yamlという名前(何でも良いのですが、、、)のファイルを作って、認証情報を作成します。

apiVersion: v1
kind: Secret
metadata:
  name: my-nodejs-dock
  annotations:
    tekton.dev/docker-0: https://index.docker.io/v1/
type: kubernetes.io/basic-auth
stringData:
  username: ********
  password: ********

このファイルを作成したら、Kubernetesに登録しましょう。

$ kubectl apply -f secret.yaml 
secret/my-nodejs-dock created

これによって、Tektonからもmy-nodejs-dockという認証情報が登録されたことが確認できます。
スクリーンショット 2020-01-24 9.21.19.png

Tektonを動かすための各種定義を行う。

1.appsodyで作成したモジュールをTektonでデプロイするためのサンプルが既に用意されています。これをCloneしましょう。

$ git clone https://github.com/appsody/tekton-example
$ cd appsody-tekton/tekton-example/

2.次にサービスアカウント作成と適切な権限を付けていきます。(特にファイルの修正はありません)

$ kubectl apply -f appsody-service-account.yaml
serviceaccount/appsody-sa created
$ kubectl apply -f appsody-cluster-role-binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/appsody-admin created

3.登録されたサービスアカウントに、先ほど作成した認証情報を紐づけていきます。

$ kubectl edit serviceaccount appsody-sa

これをするとファイルの修正画面が出るので、secretに先ほど作成した認証のnameを設定
(ここでは最終行に- name: my-nodejs-dockを追加しています。)

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"appsody-sa","namespace":"default"}}
  creationTimestamp: "2020-01-24T00:24:36Z"
  name: appsody-sa
  namespace: default
  resourceVersion: "3056"
  selfLink: /api/v1/namespaces/default/serviceaccounts/appsody-sa
  uid: 257efc19-e7d4-400f-a32c-b758956172e6
secrets:
- name: appsody-sa-token-6tw82
- name: my-nodejs-dock

4.Tektonのパイプラインおよび、タスクの登録をします。(特にファイルの修正はありません)

$ kubectl apply -f appsody-build-task.yaml
task.tekton.dev/appsody-build-task created
$ kubectl apply -f appsody-build-pipeline.yaml
pipeline.tekton.dev/appsody-build-pipeline created

5.Tektonで使用するDockerとgitのリソースを登録します。

appsody-pipeline-resources.yamlにあるDockerのimageとgitのリポジトリを修正します。

apiVersion: v1
items:
- apiVersion: tekton.dev/v1alpha1
  kind: PipelineResource
  metadata:
    name: docker-image
  spec:
    params:
    - name: url
      value: index.docker.io/yenomoto1201/appsody-deploy-nodejs #ここを修正
    type: image
- apiVersion: tekton.dev/v1alpha1
  kind: PipelineResource
  metadata:
    name: git-source
  spec:
    params:
    - name: revision
      value: master
    - name: url
      value: https://github.com/motuo1201/appsody-test-build #ここを修正
    type: git
kind: List

修正したら、この情報をKubernetesに登録

$ kubectl apply -f appsody-pipeline-resources.yaml
pipelineresource.tekton.dev/docker-image created
pipelineresource.tekton.dev/git-source created

この情報もTekton Dashboad上で確認可能です。
スクリーンショット 2020-01-24 9.33.30.png

docker-image
スクリーンショット 2020-01-24 9.34.07.png

git-source

スクリーンショット 2020-01-24 9.35.13.png

6.いよいよ、動かしてみましょう!

下記のコマンドを実行して、Tekton Pipelineを起動します。

$ kubectl apply -f appsody-pipeline-run.yaml 
pipelinerun.tekton.dev/appsody-manual-pipeline-run created

ダッシュボードのPipelineRunsで処理が実行されていることを確認できます。

スクリーンショット 2020-01-24 9.37.13.png

約5分くらいで処理が完了します。このように各ステップのログを確認することができます。

スクリーンショット 2020-01-24 9.43.57.png

Serviceを確認すると、きちんとデプロイできていることがわかります。

$ kubectl get svc
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
appsody-test-build   NodePort    10.109.30.147   <none>        3000:32272/TCP   108s
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP          54m

ここで確認した、PORT:32272を元に、http://localhost:32272/にアクセスしてみます。
スクリーンショット 2020-01-24 9.46.48.png

良い感じですね。
これで、Appsodyを使ったCI/CD環境を構築することができました!

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