使用本指南迁移工作负载,使其通过 Google Kubernetes Engine 在开源 Knative 产品上运行。一般来说,迁移工作负载需要在新的 GKE 集群中安装 Knative Serving 组件,然后将每项服务重新部署到该 Knative 集群。
虽然您可以自行决定是否使用、管理和支持开源 Knative,但您需要负责迁移到 Knative。迁移到 Knative 后,您将有机会继续在 Google Kubernetes Engine 平台上运行工作负载。
需注意的差异:
- 我们仅提供 Google Kubernetes Engine 支持。您可以与 Knative 社区联系以获取 Knative 支持。
- 只有 Google Kubernetes Engine 支持 Google Cloud CLI (
gcloud
)。Knative 支持kubectl
和kn
命令。了解如何安装kn
准备工作
- 您必须有权访问新的 GKE 集群。
- 您可以在同一或新的 Google Cloud 项目中创建新集群。
- 您的集群必须满足 Knative 要求。
- 了解如何创建集群:
- 您必须将任何集群配置手动移植到新的 Knative 集群,包括但不限于:
- 您必须创建并配置新的 IAM 和 RBAC 访问权限控制:
在 Google Kubernetes Engine 上安装 Knative
Knative 提供了多种安装选项和网络层供您选择使用。以下 Knative 安装步骤使用 Knative Operator 方法和 Istio 网络层。
安装 Knative 运算符:
将 Operator 部署到您的集群:
kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
将 VERSION 替换为 Knative 运算符的版本。
示例:
kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
设置
kubectl
CLI 以使用default
命名空间:kubectl config set-context --current --namespace=default
验证 Operator 是否已成功创建:
kubectl get deployment knative-operator
结果:
NAME READY UP-TO-DATE AVAILABLE AGE knative-operator 1/1 1 1 6m43s
安装 Knative Serving 组件:
使用以下代码创建一个 YAML 文件,例如 SERVING_FILENAME.yaml:
apiVersion: v1 kind: Namespace metadata: name: knative-serving --- apiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving
将 YAML 文件部署到您的集群:
kubectl apply -f SERVING_FILENAME.yaml
将 SERVING_FILENAME 替换为您创建的 YAML 文件。
安装带有 Sidecar 注入功能的 Istio 作为网络层:
您可以选择执行和配置备用 Istio 安装。 您可以在 Knative 网站上查看所有 Istio 安装选项。请注意,安装过程可能需要 30 分钟或更长时间。
通过运行带有
--set hub=gcr.io/istio-release
标志的以下命令来安装 Istio,以避免 Docker 速率限制:istioctl install --set hub=gcr.io/istio-release
运行以下命令以启用 Sidecar 注入功能:
kubectl label namespace default istio-injection=enabled
可选:默认情况下,Istio 安装在
istio-system
命名空间中。如果要配置其他命名空间,您可以按照以下步骤操作:如需为 Istio 配置自定义命名空间,请将
spec.config.istio
特性附加到 SERVING_FILENAME.yaml 配置文件。例如:apiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: # ... config: istio: local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
您需要在其中:
- LOCAL_GATEWAY_NAMESPACE 是安装了 Knative Serving 的命名空间。默认值:
knative-serving
- ISTIO_NAMESPACE 是安装 Istio 的命名空间。默认值:
istio-system
- LOCAL_GATEWAY_NAMESPACE 是安装了 Knative Serving 的命名空间。默认值:
将更新后的 SERVING_FILENAME.yaml 服务部署到 Knative 集群:
kubectl apply -f SERVING_FILENAME.yaml
确认
istio-ingressgateway
位于您指定的命名空间中,以验证 Istio 安装:kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
将 ISTIO_NAMESPACE 替换为您安装 Istio 的命名空间。默认值:
istio-system
结果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.232.10.190 34.123.5.116 15021:30337/TCP,80:32549/TCP,443:31210/TCP 119m
迁移服务
如需迁移服务,请将服务的 YAML 配置文件部署到 Knative 集群。
运行以下命令,将 Knative 服务服务导出到本地 YAML 文件:
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
您需要在其中:
- 将
SERVICE
替换为您的 Knative 服务服务的名称。 - 将
NAMESPACE
替换为运行服务的命名空间。 - 将
CLUSTER
替换为运行服务的集群的名称。 - 将
FILENAME
替换为您选择的唯一文件名。
- 将
修改导出的
FILENAME.yaml
文件,通过删除以下任何属性及其值来移除不需要的 Knative 服务配置:metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
metadata.managedFields
spec.template.spec.containers.readinessProbes
spec.template.spec.enableServiceLinks
例如,您可能需要从
spec:
>template:
>spec:
>containers:
特性下移除以下配置:... readinessProbe: successThreshold: 1 tcpSocket: {} ...
将修改后的
.yaml
文件部署到 Knative 集群:kubectl apply -f SERVICE.yaml
将 SERVICE 替换为服务的配置文件的名称。
使用测试网域或
cURL
命令访问您部署的服务。您可以使用通配符 DNS 服务来测试对服务的外部访问。如需了解更多选项,请参阅 Knative 文档中的配置 DNS 部分。如需使用魔法 DNS (sslip.io),请运行以下命令。
请注意,您也可以直接使用 sslip.io。
kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
将 VERSION 替换为您的 Knative Serving 的版本。
示例:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
将流量迁移到您的服务
在测试新部署的服务并准备好迁移所有生产流量后,您可以配置自定义网域并向注册商更新 DNS 记录。按照配置自定义网域中的说明进行操作。