使用本指南迁移工作负载,以在具有 Google Kubernetes Engine 的开源 Knative 产品上运行。通常,迁移工作负载要求您在新的 GKE 集群中安装 Knative Serving 组件,然后将每个服务重新部署到该 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 项目中或新的 Google Cloud 项目中创建新集群。
- 集群必须满足 Knative 要求。
- 了解如何创建集群:
- 您必须将任何集群配置手动移植到新的 Knative 集群,包括但不限于:
- 您必须创建并配置新的 IAM 和 RBAC 访问权限控制:
在 Google Kubernetes Engine 上安装 Knative
Knative 提供了多种安装选项和网络层供您选择使用。以下 Knative 安装步骤使用 Knative Operator 方法和 Istio 网络层。
安装 Knative Operator:
将此 Operator 部署到集群:
kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
将 VERSION 替换为 Knative Operator 的版本。
示例:
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 serving 服务导出到本地 YAML 文件:
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
您需要将其中的:
- 将
SERVICE
替换为您的 Knative serving 服务的名称。 - 将
NAMESPACE
替换为运行服务的命名空间。 - 将
CLUSTER
替换为运行服务的集群的名称。 - 将
FILENAME
替换为您选择的唯一文件名。
- 将
通过删除以下任何属性及其值,修改导出的
FILENAME.yaml
文件,以移除不需要的 Knative serving 配置: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 记录。按照配置自定义网域中的说明进行操作。