Kubernetes 在tekton管道中使用knctl/kubectl将映像部署到Knative服务

Kubernetes 在tekton管道中使用knctl/kubectl将映像部署到Knative服务,kubernetes,knative,knative-serving,tekton,tekton-pipelines,Kubernetes,Knative,Knative Serving,Tekton,Tekton Pipelines,我正在浏览官方网站,它使用kubectl标准部署对象将一个映像部署到Kubernetes。但是,我正在尝试使用Tekton管道作为CI/CD部署在knative服务中,该服务应使用knctl或kubectl与knative服务yaml而不是的部署yaml 差不多 apiVersion: serving.knative.dev/v1 # Current version of Knative kind: Service metadata: name: helloworld-go # The na

我正在浏览官方网站,它使用
kubectl
标准部署对象将一个映像部署到Kubernetes。但是,我正在尝试使用Tekton管道作为CI/CD部署在knative服务中,该服务应使用
knctl
kubectl
与knative服务yaml而不是的部署yaml

差不多

apiVersion: serving.knative.dev/v1 # Current version of Knative
kind: Service
metadata:
  name: helloworld-go # The name of the app
  namespace: default # The namespace the app will use
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go # The URL to the image of the app
          env:
            - name: TARGET # The environment variable printed out by the sample app
              value: "Go Sample v1"

在这种情况下,我如何利用Tekton。如果我要将映像安装到任意Kubenetes集群,我可以使用任何其他CI/CD工具以及部署清单。我认为Tekton被认为是替代性的构建,使它变得容易。

< P>没有任何一种方式你可以和Tekton一起部署一个有代表性的服务,但是要考虑的两个关键的事情如下。这些说明假设在Kubernetes集群上正确安装Tekton/Knative服务

ServiceAccount创建Knative服务的权限 Tekton允许使用Kubernetes ServiceAccounts分配权限(例如创建Knative服务),以便TaskRun或PipelineRun(即执行Tekton CI/CD进程)能够创建和更新某些资源。在本例中,创建一个Knative服务

为了创建具有创建和更新Knative服务权限的ServiceAccount,您需要创建一个类似如下所示的角色:

种类:角色
apiVersion:rbac.authorization.k8s.io/v1
元数据:
名称:创建活动服务
名称空间:默认值
规则:
#创建和更新Knative服务
-apiGroups:[“serving.knative.dev”]
资源:[“服务”]
动词:[“获取”、“创建”、“更新”]
上面的角色允许创建和更新Knative服务

该角色可以通过RoleBinding与ServiceAccount关联,RoleBinding假定创建ServiceAccount:

---
种类:服务帐户
版本:v1
元数据:
姓名:tekton sa
名称空间:默认值
---
种类:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
元数据:
名称:创建活动服务绑定
学科:
-种类:服务帐户
姓名:tekton sa
名称空间:默认值
roleRef:
apiGroup:rbac.authorization.k8s.io
种类:角色
名称:创建活动服务
角色、角色绑定和ServiceAccount可用后,可以在TaskRun或PipelineRun期间使用此ServiceAccount,具体取决于部署Knative服务的方式。要使用的ServiceAccount可以通过TaskRun或PipelineRun的指定

如果您使用的是Tekton cli(
tkn
),则可以使用
-s
标志指定启动PipelineRun或TaskRun时要使用的ServiceAccount:

tkn pipeline start knative-service-deploy -s tekton-sa 
注意:角色和角色绑定示例适用于仅允许将Knative服务部署到TaskRun/PipelineRun正在执行的同一命名空间的特定情况

使用哪个步骤映像部署Knative服务 要通过TaskRun或PipelineRun部署Knative服务,您需要创建一个带有部署Knative服务步骤的任务。在这种情况下,没有一种工具可以像您提到的那样使用
kubectl
kn
,或者任何其他工具来部署到Kubernetes

Tekton需要了解的重要内容是任务定义、步骤使用的映像以及部署Knative服务所需运行的命令。使用
kn
的示例如下所示:

apiVersion:tekton.dev/v1beta1 种类:任务 元数据: 名称:部署主动服务 规格: #使用kn从构建的映像创建Knative服务的步骤。替换已存在的服务。 步骤: -姓名:kn 图片:“gcr.io/knative releases/knative.dev/client/cmd/kn:latest” 命令:[“/ko app/kn”] args:[“服务”, “创建”、“主动服务”, “--image”,“gcr.io/knative samples/helloworld go:latest”, “--武力”] 在上面的示例中,任务是通过一个名为
kn
的步骤定义的。步骤使用官方
kn
图像;指定运行
kn
root命令;然后将参数传递给
kn
命令,以创建名为
Knative Service
的Knative服务,为名为
gcr.io/Knative samples/helloworld go
的Knative服务使用映像,并使用
--force
标志更新已存在的Knative服务

编辑:添加kubectl示例

这个问题询问如何使用
kubectl
,因此我在Tekton任务中添加了一个使用
kubectl
从YAML文件部署Knative服务的示例:

apiVersion:tekton.dev/v1beta1 种类:任务 元数据: 名称:部署主动服务 规格: #使用kubectl从YAML文件创建Knative服务的步骤。 步骤: -姓名:kubectl 图片:“bitnami/kubectl” 命令:[“kubectl”] 参数:[“应用”、“-f”、”https://raw.githubusercontent.com/danielhelfand/lab-knative-serving/master/knative/service.yaml"] 总结
没有确切的方法来回答这个问题,但希望示例和要点能够帮助您考虑PipelineRun或TaskRun的权限,以及如何将某些工具与Tekton一起使用。

没有一种方法可以使用Tekton部署Knative服务,但要考虑的几个关键问题如下。这些说明假设在Kubernetes集群上正确安装Tekton/Knative服务

ServiceAccount创建Knative服务的权限 Tekton允许使用Kubernetes ServiceAccounts分配权限(例如创建Knative服务),以便TaskRun或PipelineRun(即执行Tekton CI/CD进程)能够创建和更新某些资源。在本例中,创建一个Knative服务

为了创建具有创建和更新Kn权限的ServiceAccount
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  generateName: kn-create-
spec:
  serviceAccountName: kn-account
  taskRef:
    name: kn
  params:
  - name: ARGS
    value:
    - "service"
    - "create"
    - "something"
    - "--image=something"
...