> 文档中心 > Kubernetes生产环境,6个非常重要的事情

Kubernetes生产环境,6个非常重要的事情

文章目录

    • Kubernetes生产环境,6个非常重要的事情
    • 1 - 基础设施即代码(IaC)
    • 2 - 监控和集中日志记录
    • 3 - 具有SSL证书管理的集中入口控制器
    • 4 - 基于角色的访问控制(RBAC)
    • 5 - GitOps部署
    • 6 - Secret 管理
    • 总结

Kubernetes生产环境,6个非常重要的事情

6 Important things you need to run Kubernetes in production

Kubernetes的使用率已经达到历史新高。Kubernetes是迄今为止最常用和最受欢迎的容器编排技术。Kubernetes是一个非常复杂的平台,但建立Kubernetes群集,只要您选择托管云解决方案就可以比较轻松。除非你有一个非常好的理由,否则我永远不会建议自管理的Kubernetes集群

运行kubernetes有很多好处,但是在没有强大的kubernetes知识的情况下,自己设置一个坚实的平台需要时间。根据最佳实践建立Kubernetes技术栈需要专业知识,并且必须设置一个未来的稳定集群。只运行集群并部署您的应用程序还不够。运行准备用于生产环境的Kubernetes集群需要一些额外的事情。**一个好的kubernetes配置使开发人员的工作更轻松,并为他们提供了专注于提供业务价值的时间。**在本文中,我将分享在生产中运行Kubernetes技术栈所需的最重要的事情。

在这里插入图片描述

1 - 基础设施即代码(IaC)

首先,使用 Desired State 配置管理云基础架构(Infrastructure as Code — IaC)有很多好处,并且是一般的云基础设施最佳实践。将其指定为声明性代码将使您能够在非生产环境中测试基础结构(更改)。它不鼓励或防止手动部署,使您的基础架构部署更加一致,可靠和可重复。 实现 IaC 的团队能够在规模上快速地提供更稳定的环境。像Terraform或Pulumi这样的 IaC 工具可以很好地将整个 Kubernetes 集群与网络、负载平衡器、 DNS 配置以及集成的容器注册一起部署到您选择的云中。

2 - 监控和集中日志记录

Kubernetes是一个非常稳定的平台。它的自我修复能力将解决许多问题,如果你不知道在哪里寻找你甚至不会注意到。但是,这并不意味着监测是不重要的。我已经看到了在没有适当的监视的情况下运行生产的团队,并且突然证书过期,或者节点内存过度使用导致中断。 您可以轻松防止这些故障,通过适当的监控。Prometheus和Grafana是Kubernetes最常用的监控解决方案,可用于监控您的平台和应用程序。 应该为 Kubernetes 集群的关键问题设置警报(例如使用 Alertmanager) ,这样可以防止停机、故障甚至数据丢失。

除了使用指标的监控外,还有很重要的是运行 Fluentd 或 Filebeat 等集中组件,以收集日志记录并将其发送到Elasticsearch等集中记录平台,以便申请错误日志和日志事件可以追溯和在集中的位置。可以集中设置这些工具,因此所有应用程序都会自动建立标准监控,而无需开发者的额外工作。

3 - 具有SSL证书管理的集中入口控制器

Kubernetes有一个Ingress的概念。一种简单的配置,描述了流量应该如何从Kubernetes外部流到应用程序。可以在群集中安装集中Ingress 控制器(例如Nginx)以为每个应用程序管理所有传入流量。 当入口控制器链接到公共云LoadBalancer时,所有流量都会自动加载节点之间的均衡,并发送到右侧pods IP地址。

ingress
美: [ˈɪnˌɡres]
英: [ˈɪnɡres]
n. 进入;进入权;入境权
网络 入口;入口处;初切

由于其集中化,Ingress控制器具有许多好处。它还可以兼容HTTPS和SSL。名为cert-manager的集成组件是在Kubernetes中的集中部署应用程序,负责HTTPS证书。它可以使用我们自己的加密,通配符证书甚至是内部公司可信证书的私人证书颁发机构配置。所有传入流量都将使用HTTPS证书自动加密,并转发到正确的Kubernetes Pods。开发人员不需要担心的其他事情。

4 - 基于角色的访问控制(RBAC)

不是每个人都应该是Kubernetes管理员。当涉及Kubernetes访问时,我们应该始终应用最小权限的原则。基于角色的访问控制应应用于整个Kubernetes堆栈(Kubernetes API,部署工具,dashboards仪表板等)。当我们使用像KeyCloak,Azure AD或AWS Cognito这样的IAM解决方案集成了Kubernetes时,我们可以使用 OAuth2 / OIDC为平台工具和应用程序集中管理身份验证和授权。可以定义角色和组,以便用户访问他们基于其团队或角色访问所需的资源。

5 - GitOps部署

使用Kubernetes工作的每个人都使用Kubectl一种方式。但是使用“kubectl apply”命令手动部署到Kubernetes不是最佳实践,在生产环境中更是如此。 Kubernetes所需的状态配置应该出现在git中,我们需要一个面向Kubernetes部署平台。 Argocd和Flux是Kubernetes部署的两个领先的Gitops平台。两者都非常适用于处理实时声明式状态管理,确保Git是Kubernetes状态的唯一真实来源。即使流氓开发人员试图手动改变生产中的某些东西,GitOps 平台也会立即将回滚变化。使用Gitops引导技术,我们可以管理环境,团队,项目,角色,策略,命名空间,群集,AppGroups和应用程序,只需要通过git。 GitOps 确保所有Kubernetes环境的所有更改都是100%可追溯,易于自动化和可管理的。

6 - Secret 管理

Kubernetes secret manifests 用于将secrets 注入容器,也可以作为环境变量或文件映射**。最好的情况是,不是每个人都应该能够访问所有secret ,特别是在生产中。使用基于角色的访问控制对团队成员和应用程序的secret 是一种安全最佳实践。** 可以通过本地开发环境使用CI / CD 工具注入Kubernetes,但这可能导致配置状态漂移。这是不可追溯的,不容易管理。同步Secret 的最佳方法是使用中央仓库,如Azure Key Vault,Hashicorp Vault,AWS Secrets Manager,通过集中的 secrets operator ,如External Secrets Operator。这样,secrets 引用存储在git中,指向外部secrets 仓库中的条目。对于更加安全的公司来说,它也是一种选择从Kubernetes中的secrets 锁定所有开发人员的选项,使用RBAC。他们将能够引用secrets ,并在容器中使用它们,但永远无法直接访问它们。

总结

组建一个自管理的 Kubernetes 集群很容易,但是如果您没有这方面的专业知识,那么正确地设置它需要时间。
拥有一个良好的基础架构即代码解决方案、适当的监控、 RBAC 和安全、可管理和可追踪的部署机制非常重要。从长远来看,使用标准化开源工具的最佳实践设置Kubernetes集群将帮助您节省时间,故障和问题。 当然,这些是您的Kubernetes技术栈中最基本的要求,特别是对于企业级公司。

Pionative Kubernetes QuickStart package将为您提供根据最新的开源标准/最佳实践所需的所有基础知识和基础,并将节省您的时间和金钱。