さて、
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
に書かれています。
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を用意しましょう!
こんな感じ。
次に、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
という認証情報が登録されたことが確認できます。
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
git-source
6.いよいよ、動かしてみましょう!
下記のコマンドを実行して、Tekton Pipelineを起動します。
$ kubectl apply -f appsody-pipeline-run.yaml
pipelinerun.tekton.dev/appsody-manual-pipeline-run created
ダッシュボードのPipelineRunsで処理が実行されていることを確認できます。
約5分くらいで処理が完了します。このように各ステップのログを確認することができます。
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/
にアクセスしてみます。
良い感じですね。
これで、Appsodyを使ったCI/CD環境を構築することができました!