生产准备图表的道路

三年过去了赫尔姆的第一次释放,它确实为自己创造了名称。Avowed Fans和Fervent Haters都同意Kubernetes“apt-get等效”是beplay网页版下载部署到生产的标准方法(至少现在,让我们看看运营商最终带到表格)。在此期间,Bitnami以多种方式为该项目做出了贡献。在解决方案中,您可以在Helm的代码中找到我们的PRSKubpps.,特别是我们最着称的是什么:我们庞大的应用程序图书馆

作为一个超过的维护者45掌上图表,我们知道创建可维护,安全和生产准备的图表远远不断微不足道。从这个意义上讲,这个博客帖子显示了任何图表开发人员应该知道的基本功能。

提示:我们提供了良好的实践指南有用的链接部分。

使用非根容器

确保容器能够仅执行一个非常有限的操作集对生产部署至关重要。感谢这一点使用用户执行的非根容器虽然创建非根容器比根容器更复杂(尤其是关于文件系统权限),但这绝对值得。此外,在像OpenShift这样的环境中,使用非根容器是强制性的

为了使掌舵图表与非根容器一起工作,添加SecurityContext.部分给你的yaml.文件。

例如,这是我们在Bitnami Elasticsearch Helm图表中所做的。此图表部署了几个弹星研究statefulsets.部署(数据,摄入,协调和主节点),所有这些都具有非根容器。如果我们检查一下主节点状态,我们看到以下内容:

规格{{- 如果.values.securitycontext.enabled.}}SecurityContext.fsgroup.{{.values.securityContext.fsgroup.}}{{- 结尾}}

上面的代码段更改了安装卷的权限,因此容器用户可以访问它们进行读/写操作。除此之外,在容器定义内,我们看到了另一个SecurityContext.堵塞:

{{- 如果.values.securitycontext.enabled.}}SecurityContext.Runasuser.{{.values.securityContext.RunasUser.}}{{- 结尾}}

在此部分中,我们指定运行容器的用户。在里面值.Yaml.文件我们为这些参数设置了默认值:

## POD安全上下文## ref:https://kbeplay网页版下载ubernetes.io/docs/tasks/configure-pod-container/security-context/##SecurityContext.启用真的fsgroup.1001.Runasuser.1001.

通过这些变化,图表将在GKE,Minikube或OpenShift等平台中作为非root工作。

不要持续配置

添加持久性是部署状态应用程序的重要组成部分。beplay苹果官网在我们的经验中,决定什么或不能持续的东西可能很棘手。在我们的图表中几次迭代后,我们发现了坚持应用程序配置不是推荐的练习。Kubernetes的一个优点是,beplay网页版下载您可以通过刚执行此操作来简单地更轻松地更改部署参数kubectl编辑部署或者掌舵升级。如果配置持续存在,则不会应用任何更改。因此,在开发生产准备的掌控器时,请确保可以轻松更改配置kubectl.或者掌舵升级。一个常见的做法是创造一个configmap.使用配置并将其安装在容器中。让我们使用Bitnami RabbitMQ图表作为一个例子:

apiersionv1.种类configmap.元数据名称{{模板“rabbitmq.fullname”。}}-Config.标签应用程序{{模板“rabbitmq.name”。}}图表{{模板“rabbitmq.chart”。}}释放{{.release.name.}}“遗产{{.Lelease.Service.}}“数据Enabled_plugins.|  -{{模板“rabbitmq.plugins”。}}rabbitmq.conf.|  -##用户名和密码default_user = {{。value.verst.rabbitmq.username}}default_pass = chodgeme.{{.values.RabbitMQ.Configuration |缩进4.}}{{.values.rabbitmq.extraconfiguration |.缩进4.}}

请注意,有一个部分值.Yaml.允许您包含任何自定义配置的文件:

##配置文件内容:所需的群集配置除非你知道你在做什么,否则##不要覆盖。要添加更多配置,请使用`extraconfiguration`配置|  -##群集cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s.cluster_formation.k8s.host = beplay网页版下载kubernetes.default.svc.cluster.Local.cluster_formation.node_cleanup.interval = 10.cluster_formation.node_cleanup.only_log_warning = truecluster_partition_handling = autoheal.#队列主定位器queue_master_locator = min-masters#使能访客用户LoopBack_Users.guest = False.##配置文件内容:额外配置##使用此代替`配置否则添加更多配置extraconfiguration:|  -#disk_free_limit.absolute = 50MB#Management.Load_Definitions = /App/load_definition.json

configmap.然后在容器文件系统中安装,正如我们在的状态规格:

-名称配置卷configmap.名称{{模板“rabbitmq.fullname”。}}-Config.项目-钥匙rabbitmq.conf.小路rabbitmq.conf.-钥匙Enabled_plugins.小路Enabled_plugins.

如果应用程序需要在配置文件中编写,则需要在容器内创建副本,如configmaps.安装为只读。这也在RabbitMQ部署中完成:

容器-名称rabbitmq.图像{{模板“rabbitmq.image”。}}imagePullpolicy.{{.values.image.pullpolicy |引用}}命令-抨击--EC.-|mkdir -p /opt/bitnami/rabbitmq/.rabbitmq/mkdir -p / opt / bitnami / rabbitmq / etc / rabbitmq /#persist在服务器和cli工具的地方中的erlang cookieecho $ rabbitmq_erl_cookie> /opt/bitnami/rabbitmq/var/lib/rabbitmq/.erlang.cookieCp /opt/bitnami/rabbitmq/var/lib/rabbitmq/.erlang.cookie /opt/bitnami/rabbitmq/.rabbitmq/#Change权限,所以只有用户可以访问cookie文件chmod 600 /opt/bitnami/rabbitmq/.rabbitmq/.erlang.cookie /opt/bitnami/rabbitmq/var/lab/rabbitmq/.erlang.cookie#Copy将安装的配置安装在两个地方CP / OPT / BITNAMI / RABBITMQ / CONF / * / OPT / BITNAMI / RABBITMQ / etc / rabbitmq#应用资源限制ulimit -n“$ {rabbitmq_ulimit_nofiles}”#replace生成的默认密码sed -i“s / changeme / $ rabbitmq_password / g”/opt/bitnami/rabbitmq/etc/rabbitmq/rabbitmq.conf

这将使您的图表不仅可以易于升级,而且更适合用户需求,因为它们可以提供自定义配置文件。

将图表与日志记录和监控工具集成

如果我们谈论生产环境,我们正在谈论可观察性。我们的部署必不可少地监控,因此我们可以早期检测潜在问题。具有应用程序使用,成本和资源消耗度量也是必不可少的。为了收集这些信息,您通常会像EFK一样部署日志记录堆栈(Elasticsearch.Fluentd., 和kibana)和监控工具如普罗米修斯Bitnami提供了Bitnami beplay网页版下载Kubernetes生产运行时(BKPR)这很容易安装这些工具(以及其他工具),因此您的群集已准备好处理生产工作负载。

在编写图表时,请确保您的部署能够无缝地使用上述工具。为此,要确保以下几点:

  • 所有容器记录到STDOUT / STDERR(因此EFK堆栈可以轻松摄取所有日志信息)
  • 包括Prometheus出口商(使用Sidecar容器或单独部署)

所有Bitnami图表都与BKPR(其中包括efk和prometheus)开箱即用。让我们来看看Bitnami PostgreSQL图表Bitnami PostgreSQL容器看看我们是如何做到的。

首先,容器内的过程在前台运行,所以所有的日志信息都写入到stdout/stderr中:

start_args.=(“- d”$ data_dir.“--config-file =$ conf_file.“--external_pid_file =.$ pid_file.“--hba_file =PG_HBA_FILE美元stop_args.=(“停止”“-W”“- d”$ data_dir.功能postgresqlstart.{#如果容器被启动为“root`用户”如果[EUID美元-eq.0.];然后exc.GOSU Postgres Postgres.$ {start_args.[@]}别的exc.postgres.$ {start_args.[@]}FI.}

有了这个,我们确保它与EFK合作。然后,在图表中,我们添加了一个边车集装箱的普罗米修斯度量

{{- 如果是.values.metrics.enabled.}}-名称指标图像{{模板“postgreSql.metrics.image”。}}imagePullpolicy.{{.values.metrics.image.pullpolicy |引用}}{{- 如果是.values.metrics.securityContext.enabled.}}SecurityContext.Runasuser.{{.values.metrics.securityContext.RunasUser.}}{{- 结尾}}env.{{-  $数据库=必需“为了启用指定数据库(.values.postgresqldatabase或.values.global.postgresql.postgresqldatabase)”(包括“postgreesql.database”。)}}-名称data_source_uri.价值{{printf“127.0.0.1.d /%ssslmode =禁用“(int(包含”postgresql.port“。))$数据库|报价}}

我们还确保POD或服务包含Prometheus用于检测出口商的正确注释。在这种情况下,我们将它们定义为值.Yaml.文件:

##配置度量导出器##指标启用真的# 资源: {}服务类型Clusterip.注释prometheus.io/scrape.真的”prometheus.io/port.9187“

在PostgreSQL图表的情况下,这些注释转到了一个指标服务,与PostgreSQL服务分开。

通过这些修改,您的图表将与您的监控平台无缝集成。所有获得的指标都将以良好的形状维持部署至关重要。

Kubernetes中的生产工作负载是可能的beplay网页版下载

现在,您知道一些必不可少的创建指南固定(带有非根容器),适应性(具有适当的配置管理),可观察(具有适当的监控)图表。使用这些功能,您已涵盖基础知识,以确保您的应用程序可以部署到生产。然而,这只是你掌握掌舵之旅的另一个步骤。您还应考虑到其他功能,如升级性,可用性,稳定性和测试等功能。

要了解更多信息,请查看以下链接: