简化Google Kubernetes集群的管理,为应用程序开发人员和平台运营商提供便利,通过使用开源的Korifi安装Cloud Foundry抽象层。
托管的Kubernetes集群在软件开发人员中非常受欢迎。他们寻求托管提供商的原因有很多,其中主要原因是简化管理、提高可靠性和控制成本。在众多可用的提供商中,Google Cloud在软件开发人员中非常受欢迎,是一个很好的基础设施提供商选择。Google Kubernetes Engine是Google Cloud提供的托管Kubernetes服务,但开发人员需要更多的东西来管理他们的应用程序。
Cloud Foundry是一个强大的平台即服务(PaaS),可以帮助软件开发人员更轻松、更安全地构建、部署和管理应用程序。它可以安装在任何基于云的基础设施上,并将其转变为多租户、自助服务和可消费的资源。它的目标是帮助开发人员专注于构建应用程序,而不是管理基础设施。Cloud Foundry最初是为基于虚拟机的计算而构建的。十多年来,Cloud Foundry已成功应用于全球范围的工作负载。现在,这种相同的抽象也适用于基于Kubernetes的工作负载。Cloud Foundry Korifi是在Kubernetes本地自定义资源之上构建的Cloud Foundry API的实现。Korifi设计用于安装在任何基础设施提供商上。这在可用的托管Kubernetes提供中得到了极大简化,并且还在kind、k3s和其他Kubernetes版本上进行了本地开发的测试。使用Korifi可以部署使用任何语言或框架编写的应用程序。本教程将展示如何在Google Kubernetes Engine上安装Cloud Foundry Korifi。
先决条件
请安装以下工具以开始。
-
kubectl
-
cf CLI(版本5或更高)
-
Helm
-
gcloud CLI
安装步骤
第一步是创建一个Kubernetes集群。在使用Google Kubernetes Engine时,我们发现使用"Autopilot"创建集群会与Korifi所需的某些网络配置发生冲突。请选择"标准"模式来配置集群。你可以使用以下命令行命令创建集群:
arduino
gcloud beta container --project "summit-labs" clusters create "korifi-demo-02" --zone "us-central1-c" --no-enable-basic-auth --cluster-version "1.25.8-gke.1000" --release-channel "regular" --machine-type "e2-standard-4" --image-type "COS_CONTAINERD" --disk-type "pd-balanced" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "3" --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --enable-ip-alias --network "projects/summit-labs/global/networks/default" --subnetwork "projects/summit-labs/regions/us-central1/subnetworks/default" --no-enable-intra-node-visibility --default-max-pods-per-node "110" --security-posture=standard --workload-vulnerability-scanning=disabled --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --no-enable-managed-prometheus --enable-shielded-nodes --node-locations "us-central1-c"
给出的命令是使用Google Cloud SDK(gcloud)工具的命令行指令,用于创建具有特定配置的Google Kubernetes Engine(GKE)集群。接下来,我们将安装以下依赖项:cert-Manager、kpack和Contour。Cert-Manager是一个专为Kubernetes集群设计的开源证书管理解决方案。可以使用单个kubectl apply命令安装它,路径中引用了最新版本的YAML定义。
bash
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
Kpack是一个与Kubernetes集成的开源项目,用于提供容器本地的构建过程。它使用云原生的Buildpacks来导出OCI兼容的容器。可以使用kubectl apply命令安装Kpack,绕过包含最新版本声明的yaml文件。
ruby
kubectl apply -f https://github.com/pivotal/kpack/releases/download/v0.11.0/release-0.11.0.yaml
Contour是一个基于Envoy代理构建的用于Kubernetes的开源Ingress控制器。Ingress控制器是一个Kubernetes资源,用于管理集群内服务的入站网络流量。它充当网关,为运行在集群内部的服务提供外部访问。Contour专注于为Kubernetes中的Ingress提供高级功能和能力。
arduino
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
在Kubernetes集群上安装Contour后,它将生成外部可访问的IP地址。这将允许我们访问集群。需要查询Contour服务以确定我们将映射到集群的Ingress的IP地址。以下命令将帮助您完成这个操作:
ini
kubectl get service envoy -n projectcontour -ojsonpath='{.status.loadBalancer.ingress[0]}'
该命令的输出将是一个IP地址,例如{"ip": "34.31.52.175"},它将作为基本域名在各个地方使用,并以nip.io作为后缀。安装需要一个容器注册表来运行。在这个安装过程中,我们将使用Google Artifact注册表。为了访问这个容器注册表,需要创建和配置一个凭据密钥。创建注册表凭据的命令如下:
arduino
kubectl --namespace "cf" create secret docker-registry image-registry-credentials
--docker-username="<docker-hub-username>"
--docker-password "<docker-hub-access-token>"
在这个安装过程中,需要使用以下值:
arduino
kubectl --namespace "cf" create secret docker-registry image-registry-credentials --docker-server="us-central1-docker.pkg.dev" --docker-username="_json_key" --docker-password "$(awk -v RS= '{$1=$1}1' ~/Downloads/summit-labs-8ff7123608fe.json)"
创建了密钥后,使用以下Helm chart在GKE集群上安装Korifi。
ini
helm install korifi https://github.com/cloudfoundry/korifi/releases/download/v0.7.1/korifi-0.7.1.tgz --namespace="korifi" &&
--set=global.generateIngressCertificates=true --set=global.rootNamespace="cf" &&
--set=global.containerRegistrySecret="image-registry-credentials" --set=adminUserName="riyengar@cloudfoundry.org" &&
--set=api.apiServer.url="api.34.31.52.175.nip.io" --set=global.defaultAppDomainName="apps.34.31.52.175.nip.io" &&
--set=global.containerRepositoryPrefix="us-central1-docker.pkg.dev/summit-labs/korifi/korifi-" &&
--set=kpackImageBuilder.builderRepository="us-central1-docker.pkg.dev/summit-labs/korifi/kpack-builder" --wait
注意:我们使用nip.io作为可从外部访问集群的IP地址的后缀。Nip.io是一个通配符DNS提供商。安装完成后,使用cf CLI设置API端点并登录到集群。
lua
cf api https://api.34.31.52.175.nip.io --skip-ssl-validation
cf login
可以使用以下命令来测试安装是否成功。
ruby
cf create-org active
cf target -o active
cf create-space -o active ant
cf target -o active -s ant
cf push mighty-monkey -p ~/sandbox/korifi/tests/smoke/assets/test-node-app/
从哪里开始
Cloud Foundry Korifi是一个完全开源的项目。如果您正在寻找以下方式:
-
简化应用程序开发人员的部署体验;
-
在使用Kubernetes集群时实现运营卓越。
那么,我觉得Korifi是工具库中的一个很好的工具。
作者:Ram Iyengar
更多技术干货请关注公众号"云原生数据库"
squids.cn ,目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等。