使用Tekton在Appsody上创建的Nodejs应用程序进行K8s部署
好的,
在使用Tekton通过Appsody创建的Node.js应用程序上,部署到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存储库的访问信息。
在部署时,Tekton使用Docker Registry。因此,请提前准备一个可以操作的Docker Registry,比如Docker Hub!
差不多这样。

接下来,我们将在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进行动作。
已经为使用Appsody创建的模块在Tekton中部署提供了示例。让我们克隆它。
$ git clone https://github.com/appsody/tekton-example
$ cd appsody-tekton/tekton-example/
接下来,我们将创建一个服务账号并为其添加适当的权限。(无需进行特定文件的修改)
$ 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: 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
使用Tekton时,需要注册Docker和git的资源。
修改appsody-pipeline-resources.yaml中的Docker镜像和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源码

6. 终于,让我们试着动起来吧!
执行下面的命令,启动Tekton Pipeline。
$ kubectl apply -f appsody-pipeline-run.yaml
pipelinerun.tekton.dev/appsody-manual-pipeline-run created
您可以在仪表板的PipelineRuns上确认处理已经执行。

大约需要大约5分钟完成处理,您可以通过检查每个步骤的日志来确认。

通过检查服务,可以确定部署成功。
$ 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

这感觉很不错。
成功搭建了一个使用Appsody的CI/CD环境!