DZone>云计算专区>用Carvel Kapp控制器管理Kubernetes中的应用
用Carvel Kapp控制器管理Kubernetes中的应用程序
我们使用Carvel工具包中最流行的两个工具:Kapp和Kapp-controller,它们帮助我们处理应用程序而不是它们的单个组件。
作者
CORE -
6月11日,22日 - 云区 -教程
喜欢 (1)
评论
保存
鸣谢
77 次浏览
加入DZone社区,获得完整的会员体验。
任何部署在Kubernetes上的典型企业级应用都包括需要一起部署的若干API资源。例如,WordPress应用程序是Kubernetes GitHub仓库中的示例应用程序之一,它包括。
- 一个
wordpressfrontend pod。 - 一个
wp-pv-claim持久卷声称安装在前端pod上。 - 一个
wordpress-mysqlMySQL数据库pod。 - 一个安装在MySQL数据库pod上的
mysql-pv-claim持久卷要求。 - 两个持久化卷:
wordpress-pv-1和wordpress-pv-2,为持久化卷要求服务。 - 数据库和前端pod的服务。
应用程序(或称APP)在Kubernetes中不是一个原生的结构。然而,管理应用程序是开发人员和运营人员的主要关切。Kubernetes上的应用交付涉及到升级、降级和定制各个API资源。Kubernetes允许你通过namespaces ,限制应用资源的传播,这样你可以在一个命名空间中部署整个应用,可以删除或创建。然而,一个复杂的应用可能由分散在不同命名空间的资源组成,在这种情况下,回答以下问题可能是一个挑战。
- 一个命名空间中有多少个应用程序在运行?
- 应用程序的所有资源的升级是否成功?
- 哪些类型的资源与我的应用程序相关?
kapp工具
kapp(Kubernetes App)工具是Carvel工具包中的工具之一。kapp使用户能够将一组资源(具有相同标签的资源)作为一个应用程序分组。此外,kapp还管理应用程序的各个资源,因此用户只需通过kapp CLI在应用程序的层面上进行操作。
Helm(特别是Helm3)是kapp工具的一个替代品。就像Helm一样,kapp可以对应用程序进行有状态的升级。然而,Kapp不具备像Helm那样的模板制作能力,这种能力由Carvel工具包中的YTT工具来实现。通过将kapp与kapp-controller相结合,你可以建立整齐的GitOps工作流,这使它远远超出了Helm的能力。
为了更好地理解kapp,让我们用下面的命令把它安装到我们的系统上。
Shell
wget -O- https://carvel.dev/install.sh > install.sh
sudo bash install.sh
前面的命令将在你的系统中安装Carvel工具包的所有工具,如YTTl、imgpkg等。请自行探索这些工具的用法。Carvel工具包的每一个工具都是独立的,在你的系统中占用很少的空间。
我写了一个简单的.NET应用程序,包括一个前端和一个Redis数据库,我们将用它来测试kapp。请自由使用该应用程序,用于你的演示或学习目的。你可以使用all-in-one.yaml清单,将应用程序的所有组件安装到你的集群中。现在让我们使用kapp以一个名为az-vote的应用程序的形式来安装这些组件。
外壳
kapp deploy --app=az-vote -f https://raw.githubusercontent.com/rahulrai-in/azure-voting-app-dotnet/main/kubernetes-manifests/all-in-one.yaml
在执行该命令时,你会看到kapp将创建的组件列表如下。
由kapp确定的修改列表
如果你输入 "y",kapp将对你的资源进行注释,以便将它们链接到应用程序中,并在以后对它们进行管理。基于实际状态和期望状态之间的差异,它将升级或删除资源,并给你的应用程序的整体状态。下面的截图显示了由kapp添加到应用程序的pod的注释。
由kapp应用的标签
你可以使用kapp list 命令查看集群中的应用程序,如下所示。
列出集群中的应用程序
要查看组成应用程序的资源列表,请使用kapp inspect 命令,如下所示。
检查应用程序
你会注意到,当你定义一个Service ,Kubernetes在引擎盖下创建的一些对象,如Endpoints 和EndpointSlices ,都包含在命令输出中。这种输出格式使得我们可以很容易地阅读所有应用程序资源的成功和失败状态。
现在我们将引入kapp-controller来自动部署应用程序。然而,在我们这样做之前,通过运行以下命令删除应用程序。
Shell
kapp delete --app=az-vote
kapp-controller
当你把你的应用程序捆绑成一组具有明确名称的原子管理资源(例如,Azure Vote App的组件)时,你多少会建立一个CustomResourceDefinition(CRD)。CRD经常被Kubernetes操作者使用,使Kubernetes在资源被创建、销毁或更新时以 "正确 "的方式行事。事实上,你已经可以发现在你的Kubernetes集群上安装了几个CRD,可以通过使用kubectl get crd 命令来列出它们。
kapp-controller工具采用kapp应用程序,并以GitOps等自动化功能来增强它。该工具允许你建立一个完全自动化的应用平台,可以自动部署和管理100多个应用,而不需要任何手动或自动输入。诸如Helm和kapp-controller这样的工具无需建立操作者来管理大多数不需要与Kubernetes API互动的商业应用的生命周期。
让我们通过使用kapp本身将kapp-controller安装到集群上,如下所示。
外壳
kapp deploy -a kc -f https://github.com/vmware-tanzu/carvel-kapp-controller/releases/latest/download/release.yml
kapp deploy -a default-ns-rbac -f https://raw.githubusercontent.com/vmware-tanzu/carvel-kapp-controller/develop/examples/rbac/default-ns.yml
第一条命令将kapp-controller安装为集群上的一个应用程序。第二条命令创建一个RBAC规则,将default 命名空间的完全控制权交给kapp-controller。这些权限使kapp-controller能够在命名空间中创建、更新和删除Kubernetes资源。
现在我们的kapp-controller已经在集群中运行,我们可以用它来自动部署Git仓库中的应用程序。为此,我们将创建一个kapp CR来定义我们的应用程序。kapp CR可以被kapp-controller很好地理解。kapp 应用程序的规范格式可在Carvel docs网站上找到。
为Azure Vote App创建一个应用规范,它将作为一个完全由kapp控制的应用运行,如下所示。
YAML
apiVersion: kappctrl.k14s.io/v1alpha1
kind: App
metadata:
name: azure-vote-app
namespace: default
spec:
serviceAccountName: default-ns-sa
fetch:
- git:
url: https://github.com/rahulrai-in/azure-voting-app-dotnet
ref: origin/main
subPath: kubernetes-manifests/
template:
- ytt: {}
deploy:
- kapp: {}
从Git中拉出应用规范是创建应用的支持方式之一。你也可以指示kapp-controller从HTTP位置、Helm图表、容器注册表等获取应用规格。默认情况下,kapp-controller将每分钟检查应用程序的来源(HTTP位置、Helm图表等),并尝试将集群中的应用程序的状态与来源中指定的状态进行协调。
通过运行kubectl apply -f <app-spec-file> 命令将应用程序部署到集群中。之后,运行kapp list 命令,列出集群中的应用程序,如下所示。
集群中的应用程序列表
让我们检查一下应用程序的资源,如下所示。
azure-vote-app-ctrl应用程序的资源列表
现在,我们已经将我们的应用程序集成到一个CI/CD系统中,该系统可以完全在Kubernetes内部管理。我们现在可以把提交和维护应用程序的CRD的责任分配给开发人员,并让kapp控制器操作员在默认命名空间中部署和管理应用程序。
kapp控制器为我们在集群中安装了kapp应用程序的CRD,现在我们可以使用kubectl 命令来操作应用程序,就像其他本地Kubernetes对象一样,如下所示。
使用kubectl与kapp
总结
我们使用了Carvel工具包中最流行的两个工具:kapp和kapp-controller,它们帮助我们处理应用程序而不是它们的单个组件。此外,我们注意到,kapp-controller可以帮助我们以有状态的方式打包我们的应用程序,而不需要我们编写任何自定义的操作符。最后,我们使用kapp工具实现了Azure Vote App的类似于运营商的部署模式,并意识到kapp-controller可以用实现运营商的一小部分时间提供运营商的大部分好处。
Kubernetes 应用程序 集群
经DZone MVB的Rahul Rai许可,发表于DZone。请看原文。
DZone贡献者所表达的观点属于他们自己。
DZone上的热门文章
评论