本页面介绍如何将新服务和新修订版本部署到 Knative serving。
准备工作
如需使用 Google Cloud CLI,您必须先设置和配置命令行工具。
连接到 GKE 集群
您必须先登录并连接到 GKE 集群,然后才能将服务部署到 Knative serving。
如需详细了解如何连接到 GKE 集群(包括其他选项),请参阅:
部署所需的权限
除了需要针对 apiGroup serving.knative.dev
和 kind Service
的创建、更新和删除权限外,您还必须拥有下列 Identity and Access Management 角色之一:
可部署的映像
您可以部署的容器映像没有大小限制。
您可以使用任何容器注册表中的容器,例如 Docker Hub。如需了解如何部署 Container Registry 或 Artifact Registry 以外的其他注册表中的私有映像,请参阅部署其他容器注册表中的私有容器映像。
部署新的服务
您可以使用标记(例如 gcr.io/my-project/my-image:latest
)或确切摘要(例如 gcr.io/my-project/my-image@sha256:41f34ab970ee...
)指定容器映像。
首次部署到服务时会创建第一个修订版本。请注意,修订版本是不可变的。如果使用容器映像标记进行部署,则该标记会被解析为摘要,并且修订版本将始终提供此特定摘要。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或从 YAML 配置文件部署容器。
点击相应标签页即可获取有关所选工具的使用说明。
默认 gcloud
位置配置
如果您之前在 Google Cloud CLI 的 default
配置中配置了位置,则 gcloud
命令默认使用这些值,包括:
compute/region
compute/zone
run/cluster
run/cluster_location
run/platform
run/region
运行以下 gcloud
config 命令查看 default
配置的设置:
gcloud config configurations describe default
控制台
要部署容器映像,请执行以下操作:
在 Google Cloud 控制台中前往 Knative serving:
点击创建服务以显示“创建服务”页面。
在此表单中执行以下操作:
从下拉菜单中,为您的服务选择一个可用的 GKE 集群。
输入所需的服务名称。服务名称在每个地区和项目或每个集群必须是唯一的。服务名称一旦指定便无法更改。
在“连接”下:
- 如果您想将访问仅限于对其他 Knative serving 服务或集群中使用 Istio 的服务的访问,请选择内部。
- 如需允许对服务的外部访问,请选择外部
请注意,您可以随时更改连接选项,具体说明请参阅更改服务连接设置。
点击下一步以前往服务创建表单的第二页。
在此表单中执行以下操作:
您刚刚将一个服务部署到启用 Knative serving 的集群。
命令行
要部署容器映像,请执行以下操作:
运行
gcloud run deploy
命令:gcloud run deploy SERVICE --image IMAGE_URL
将 SERVICE 替换为要部署到的服务的名称。如果指定的服务不存在,则会创建一个新服务。
将 IMAGE_URL 替换为对容器映像的引用,例如
gcr.io/cloudrun/hello
。其他部署选项:
如需部署到非默认命名空间,必须使用
--namespace
参数指定该命名空间。如需部署到默认配置以外的位置,必须使用
--cluster
和--cluster-location
参数指定集群的name
和location
:gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
您可以使用
--connectivity
标志设置连接选项,以指定内部或外部访问(请参阅更改服务连接设置)。对于 Knative serving on VMware,您必须添加
--kubeconfig
参数并指定配置文件:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。
YAML
您可以将服务规范存储在 YAML
文件中,然后使用 Google Cloud CLI 进行部署。
使用以下内容创建新的
service.yaml
文件:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
替换
- 将 SERVICE 替换为您的 Knative serving 服务的名称
- 将 IMAGE 替换为容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令部署新服务:
gcloud run services replace service.yaml
部署现有服务的新修订版本
您可以使用 Google Cloud 控制台、gcloud
命令行或 YAML 配置文件部署新的修订版本。
请注意,更改任何配置设置都会导致新修订版本的创建,即使容器映像没有变化也是如此。创建的每个修订版本都是不可变的。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
要部署现有服务的新修订版本,请执行以下操作:
在 Google Cloud 控制台中前往 Knative serving:
在服务列表中找到要更新的服务,然后点击该服务以打开其详细信息。
点击修改和部署新修订版本。此时会显示修订版本部署表单:
如果需要,请提供要部署的新容器映像的网址。
根据需要设置:
如需将所有流量都发送到新修订版本,请选中“立即支持此修订版本”复选框。如需逐步发布新修订版本,请取消选中该复选框:这样在部署中,系统将不会向新修订版本发送任何流量(在部署之后,请按照适用于逐步发布的说明进行操作)。
点击部署并等待部署完成。
命令行
要部署容器映像,请执行以下操作:
运行
gcloud run services update
命令:gcloud run services update SERVICE --image IMAGE_URL
- 系统会自动为每个修订版本分配修订版本后缀。如果您要指定自己的修订版本后缀,请添加 --revision-suffix 参数。
将 SERVICE 替换为要部署到的服务的名称。如果指定的服务不存在,则会创建一个新服务。
将 IMAGE_URL 替换为对容器映像的引用,例如
gcr.io/cloudrun/hello
。其他部署选项:
如需部署到非默认命名空间,必须使用
--namespace
参数指定该命名空间。如需部署到默认配置以外的位置,必须使用
--cluster
和--cluster-location
参数指定集群的name
和location
:gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
您可以使用
--connectivity
标志设置连接选项,以指定内部或外部访问(请参阅更改服务连接设置)。对于 Knative serving on VMware,您必须添加
--kubeconfig
参数并指定配置文件:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
等待部署完成。成功完成后,系统将显示一条成功消息以及已部署服务的网址。
YAML
您可以使用 gcloud run services describe
命令和 --format=export
标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace
命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。
将服务配置下载到本地工作区上名为
service.yaml
的文件中:gcloud run services describe SERVICE --format export > service.yaml
将 SERVICE 替换为您的 Knative serving 服务的名称。
在本地文件中,更新
spec.template
的任意子属性中的修订版本设置。部署新修订版本:
gcloud run services replace service.yaml
从其他 Google Cloud 项目中部署映像
如果您设置了正确的 IAM 权限,则可以从其他 Google Cloud 项目中部署容器映像:
在 Google Cloud 控制台中,打开 Knative serving 服务的项目。
获取服务账号信息:
对于 Google Cloud 上的集群,请复制 Compute Engine 默认服务账号的电子邮件。该电子邮件的后缀为 @developer.gserviceaccount.com
对于其他集群,请创建 Google Cloud 服务账号并下载凭据。将这些凭据添加为 Kubernetes 服务账号的默认
imagePullSecrets
。
打开您要使用的容器注册表所属的项目。
点击添加以添加新的主账号。
在新的主账号文本框中,粘贴您之前复制的服务账号的电子邮件。
在“选择角色”下拉列表中,选择可从仓库读取的角色:
- Artifact Registry,包括 Artifact Registry 中的 gcr.io 仓库:Artifact Registry -> Artifact Registry Reader
- Container Registry:Storage -> Storage Object Viewer
将容器映像部署到您的 Knative serving 服务所属的项目。
为了提高安全性,您可以限制授予的访问权限:
- Artifact Registry:授予存储容器映像的仓库的角色。
- Container Registry:授予存储容器映像的 Cloud Storage 存储桶的角色。
从其他容器注册表中部署私有容器映像
本部分介绍如何设置正确的权限,以将容器映像从任意私有注册表部署到 Knative serving。私有容器注册表需要凭据才能访问容器映像。 请注意,您无需执行如下步骤,即可将私有容器映像从 Container Registry(已弃用)或 Artifact Registry 部署到您的集群所在的项目中。
如需部署私有容器映像,您必须创建一个 imagePullSecret
类型的 Kubernetes Secret 并将其与服务账号相关联:
创建一个名为
container-registry
的imagePullSecret
Secret:kubectl create secret docker-registry container-registry \ --docker-server=DOCKER_REGISTRY_SERVER \ --docker-email=REGISTRY_EMAIL \ --docker-username=REGISTRY_USER \ --docker-password=REGISTRY_PASSWORD
- 将 DOCKER_REGISTRY_SERVER 替换为您的私有注册表 FQDN(例如:对于 Container Registry,替换为 https://gcr.io/;对于 DockerHub,则替换为 https://hub.docker.com)。
- 将 REGISTRY_EMAIL 替换为您的电子邮件地址。
将 REGISTRY_USER 替换为您的容器注册表用户名。
如果您使用的是 Container Registry 或 Artifact Registry,并且想要存储和拉取长期凭据,而不是传递短期访问令牌,请参阅《身份验证方法:JSON 密钥文件》。
将 REGISTRY_PASSWORD 替换为您的容器注册表密码。
打开默认服务账号:
kubectl edit serviceaccount default --namespace default
Kubernetes 集群中的每个命名空间都有一个名为
default
的默认服务账号。除非您在部署 Knative serving 服务时另有指定,否则系统将使用此默认服务账号拉取容器映像。将新创建的
imagePullSecret
Secret 添加到您的默认服务账号:imagePullSecrets: - name: container-registry
您的服务账号现在应如下所示:
apiVersion: v1 kind: ServiceAccount metadata: name: default namespace: default ... secrets: - name: default-token-zd84v # The secret we just created: imagePullSecrets: - name: container-registry
现在,当前 default
命名空间中创建的所有新 Pod 都将定义了 imagePullSecret
Secret。
在启用了自动 Sidecar 注入的情况下进行部署
如需在启用 Istio Sidecar 注入功能的情况下部署服务,请参阅 Cloud Service Mesh 文档中的启用自动 Sidecar 注入功能。
在内部网络上部署服务
如需在内部网络上部署服务,您必须设置专用内部网络。
后续步骤
部署新服务后,您可以执行以下操作:
您可以使用 Cloud Build 触发器实现 Knative serving 的自动构建和部署: