KubernetesOperators是为特定应用程序构建的,目的是简化这些应用程序在Kubernetes上的创建、配置、管理和操作。在本文中,我们深入探讨了KubernetesOperator的机制,并概述了每个DevOps都需要了解的10个Operator。Kubernetes和容器技术的出现使应用程序更具可移植性、可扩展性和资源利用效率。对于DevOps,Kubernetes具有更广泛的吸引力:能够大规模配置、管理和运行容器化微服务。同时,Kubernetes也让他们在应用的创建、部署、扩展和配置上实现了一定程度的自动化,大大减少了程序管理的开销和错误。然而,有一个警告:对于有状态的应用程序,它可能没有我们想要的那么完美。部署、扩展、操作和配置有状态应用程序并以自动化方式构建它们需要大量的DevOps交互。什么是KubernetesOperator?KubernetesOperators是一种在Kubernetes集群上构建和驱动每个应用程序的高级原生方式。通过与KubernetesAPI紧密合作,它提供了一种一致的方法来自动化所有应用程序操作流程,而无需任何人工响应。换句话说,Operator是一种打包、运行和管理Kubernetes应用程序的方式。KubernetesOperators使在Kubernetes上创建、配置和管理这些应用程序变得更加容易。许多Operator还延长了整个应用程序生命周期,从而更容易执行操作任务,例如扩展、升级、备份和恢复复杂的有状态应用程序。由于它们使用和扩展了KubernetesAPI,因此它们紧密集成在Kubernetes框架中。以下是KubernetesOperator的一些最常见功能的列表:安装具有配置项和副本计数的应用程序。应用程序的弹性扩展启动升级、自动备份和故障恢复作为代码执行管理任务KubernetesOperators是如何工作的?Operator利用Kubernetes的可扩展性和模块化来自动创建、配置和管理Kubernetes应用程序。Operator基于自定义Kubernetes控制器(CRD)和自定义资源的概念,被DevOps用来管理Kubernetes上的应用程序。它们作用于CRD,以确保集群的实际状态与CRD中定义的状态相匹配。CoreOs的prometheusOperator就是一个很好的例子。它部署为自定义Kubernetes控制器,用于监控KubernetesAPI的四个自定义资源定义:Prometheus、ServiceMonitor、PrometheusRule和AlertManager。部署后,PrometheusOperator将安装和配置完整的PrometheusStack,包括Prometheusserver、Alertmanager、Grafana、hostnode_exporter和kube-state-metrics。然后DevOps可以轻松地扩展每个组件的单个副本的数量、进行配置更改、更新警报规则或自动监控新服务。介绍完KubernetesOperator的概念之后,我们再介绍一下DevOps中最常用的几个Operator。你应该知道哪些KubernetesOperatorsRBACManagerOperatorRBACManager(https://github.com/FairwindsOps/rbac-manager)是Fairwinds的kubernetnsOperator,旨在使RBAC上的Kubernetes易于安装、配置和管理。Kubernetes授权通常是复杂的、重复的,需要大量的手动配置并且难以扩展。RBACManager极大地减少了管理RBAC和创建、删除或更新角色绑定、集群角色绑定和服务帐户所涉及的配置。通过在单个RBAC定义文件中聚合跨多个命名空间的角色绑定,它可以作为了解RBAC状态的单一事实来源。MongoDBEnterpriseKubernetesOperatorMongoDBOperator(https://docs.mongodb.com/manual/reference/Operator/)帮助DevOps标准化创建大规模MongoDB集群的过程。该Operator可以接管涉及拆分和管理MongoDB集群的典型管理任务,包括配置存储和计算、配置网络连接以及设置用户。KubernetesOperator还集成了其他MongoDB管理工具,例如MongoDBOpsManager和MongoDBCloudManager,以提供备份、监控和性能优化。HPAKubernetesOperatorBanzai的HPAOperator(https://github.com/banzaicloud/hpa-Operator)是另一个有用的Operator,它将pod自动缩放添加到Helm图表。它监视Kubernetes部署或StatefulSet,并根据配置中定义的注释自动创建、删除或更新“Horizo??ntalPodAutoscalers”(HPA)。HPA的Github页面以Kafka为例。Kafka的Helmcharts没有为集群定义任何HPA规则,这意味着使用这个helmchart部署Kafka并没有在Kafka中实现HPA。为确保HPA包含在Helm图表中,DevOps可以为min和maxReplicas添加注释。添加后,HPA操作员将根据注释增加所需的HPA副本数。HPAOperator还使用KubeMetricsAdapter公开的基于Prometheus的自定义指标。Cert-managerKubernetesOperatorCert-managerOperator(https://github.com/jetstack/cert-manager)是来自Jetstack的KubernetesOperator。它旨在自动化TLS证书的管理和颁发。DevOps可以使用此Operator自动执行重复性任务,例如确保证书有效、最新和正确更新。部署后,Cert-manager将作为Kubernetes部署运行。DevOps可以将证书和证书颁发者的列表配置为KubernetesCRD。配置证书后,应用程序可以使用受信任的证书发出即时请求。ArgoCDOperatorArgoCDOperator(https://github.com/jmckind/argocd-Operator)管理着ArgoCD及其相关组件的整个生命周期。ArgoCD是CNCF领域中评价最高的Kubernetes特定持续交付工具之一。Operator使配置和安装ArgoCD以及升级、备份、恢复和扩展ArgoCD组件变得容易。Operator通过监控三个KubernetesCRD、ArgoCD(定义ArgoCD集群的期望状态)和ArgoCDExport(定义ArgoCD组件导出和恢复的期望状态)来实现这一点。IstioOperatorIstio(https://istio.io/)是一种服务网格工具,用于管理、协调、保护和监控部署在Kubernetes上的微服务之间的通信。IstioOperator(https://istio.io/blog/2019/introducing-istio-Operator/)使Istio的安装、升级和故障排除变得更加容易。安装只需要istioctl作为先决条件,因为它们不需要更改API,并且可以轻松实现特定于版本的升级挂钩。使用此Operator安装Istio还可以确保验证所有API字段。OperatorAPI支持所有6种内置安装配置文件,包括Default、Demo、Minimal和Remote。DevOps和SRE可以从其中任何一个开始,然后通过配置更改进一步调整服务网格以满足他们的特定需求。EtcdOperatorEtcd作为Kubernetes上所有集群数据的存储数据库,因此是每个集群中最关键的组件之一。在Kubernetes上管理和配置etcd集群是一项比较耗时的工作,需要进行一些手动配置,这增加了确保etcd集群的高可用性、可监控性和容灾性的复杂性。ETCDOperator(https://coreos.com/Operators/etcd/docs/latest/)帮助DevOps和SRE更轻松地在Kubernetes集群中创建、配置和管理etcd实例。团队可以轻松启动多个高可用性etcd实例,而无需指定详细的配置设置,修改集群规范以调整集群大小,配置用于灾难恢复的自动备份策略,并在不停机的情况下启动优雅升级。ElasticCloudonKubernetes(ElasticKubernetesOperator)Elasticcloud(ECK)onKubernetes(https://github.com/elastic/cloud-on-k8s)是elastic.co官方的Kubernetesoperator,专为在Kubernetes上部署,管理并操作整个ElasticStack以提供无缝体验。除了更容易在Kubernetes上部署弹性搜索和Kibana之外,它还简化了关键操作任务,包括管理和监控多个集群、启动优雅升级、扩展集群容量和本地存储、进行配置更改和备份。默认的ECK发行版是免费和开源的,内置功能包括用于密集存储的冻结索引、Kibana空间、Canvas和ElasticMaps,以及对监控Kubernetes日志和基础设施的支持。GrafanaOperatorRedHat提供的GrafanaOperator(https://github.com/integr8ly/grafana-Operator)简化了在Kubernetes上创建、配置和管理Grafana实例的过程。除了帮助部署Grafana之外,它还支持通过入口、自动化仪表板和数据源发现以及安装仪表板依赖项来使Grafana高可用。可以使用Ansible或通过kubectl命令手动安装Operator,并创建自定义资源。安装后,Operator将根据部署期间传递的标志在其自己的命名空间或所有命名空间中监视仪表板定义,发现仪表板,如果有任何无效的json,将错误消息添加到仪表板的状态字段,并自动安装指定的插件。然后,DevOps和SRE可以将数据源与其他配置文件一起添加到GrafanaDataSource中。JaegerKubernetesOperatorJaegerKubernetesOperator(https://github.com/jaegertracing/jaeger-Operator)帮助部署、管理和配置Jaeger实例。在安装DevOps和SRE时,您可以指定jaeger的配置选项,包括存储选项、派生依赖项、注入的Jaeger代理sidecar和UI配置等。安装后,Operator可用于创建Jaeger实例并将其与部署相关联政策。DevOps和SRE可以从三种受支持的部署策略中进行选择:allInOne、生产和流式传输。在使用生产策略时,Operator将启动一个更具扩展性和高可用性的环境,并单独部署每个后端组件。allInOne策略旨在用于测试和开发目的,而流式策略增强了生产策略并在收集器和后端存储之间提供流式传输。
