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"
...