写点什么

总结归纳 Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)

作者:洛神灬殇
  • 2024-05-05
    江苏
  • 本文字数:4447 字

    阅读完需:约 15 分钟

总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)

前提介绍

Kubernetes,亦被称为 K8s,是业界公认的容器编排巨擘,以其卓越的能力简化了容器化应用的部署、扩展和管理流程。通过其强大的功能,Kubernetes 不仅提升了应用的可靠性和可伸缩性,还优化了资源利用率,为开发者和运维人员提供了更加高效、灵活的容器运行环境。


在传统的应用部署模式中,不同环境间的基础设施与配置差异构成了巨大的挑战,使得跨环境部署变得困难重重。然而,Kubernetes 的出现彻底改变了这一局面。它通过构建一个统一的容器编排平台,巧妙地将底层基础设施的复杂性进行了抽象,让开发人员能够摆脱繁琐的环境配置问题。在 Kubernetes 的助力下,应用程序可以在不同环境中实现一致且高效的部署与管理,这不仅极大地提升了应用的可移植性,更为未来的扩展性奠定了坚实的基础。

文章主旨

本篇文章是学习开发使用 k8s 的必备工具,提供了对无缝部署管理所需的基本命令的快速访问。让我们将其视为快节奏 Kubernetes 环境中的必备指南,以提高生产力,减少错误,并确保在复杂任务中的高效导航。不仅包含了 Kubernetes 中最常用的命令,还提供了针对特定任务的实用提示和最佳实践。无论您是经验丰富的 Kubernetes 管理员还是初学者,这份速查表都将成为您日常工作中的宝贵资源。


通过本系列文章,您可以快速了解如何创建和管理部署(Deployments)、服务(Services)、持久存储(Persistent Storage)以及其他 Kubernetes 资源。

Configuration 和 Secrets

ConfigMaps 提供了一种高效的方式,能够实现对非敏感配置细节的集中化管理,有效简化了配置的维护工作;而 Secrets 则是为了确保敏感信息如密码等的安全存储而设计的机制,为应用的安全运行提供了坚实的保障。

Kubernetes 关键配置选项

下图涵盖了 Kubernetes 中常见的配置和管理功能,这些功能共同构成了 Kubernetes 强大的资源管理和应用部署能力。



  1. ConfigMaps:ConfigMaps 是 Kubernetes 中的一个资源对象,用于将配置信息从代码中解耦出来,使得配置信息可以独立于代码进行管理和更新。

  2. 使用场景:通过 ConfigMaps,可以将应用的配置信息(如数据库连接信息、应用设置等)存储在 Kubernetes 集群中,并在需要时挂载到 Pod 中的容器中。这种方式使得配置信息的管理更加集中和灵活,方便进行版本控制和动态更新。

  3. Secrets:Secrets 也是 Kubernetes 中的一个资源对象,用于存储敏感信息,如密码、密钥、令牌等。

  4. 使用场景:Secrets 提供了一种安全的方式来管理和传输敏感数据。它使用 Base64 编码将敏感数据存储在 Kubernetes 集群中,并通过权限控制来限制对 Secrets 的访问。当 Pod 需要访问这些敏感数据时,Secrets 可以被挂载到 Pod 的容器中,并且数据在传输过程中也是加密的,从而保证了数据的安全性。

  5. 资源限制:资源限制是指在 Kubernetes 中为每个容器设置的最大和最小资源使用量(如 CPU 和内存)。

  6. 使用场景:通过设置资源限制,可以确保容器不会过度消耗集群中的资源,避免对集群的稳定性和性能造成影响。同时,资源限制还可以帮助实现资源的公平分配和成本控制。

  7. 环境变量:环境变量是操作系统中的一个特性,用于在程序运行时传递配置信息。在 Kubernetes 中,可以通过环境变量的方式将配置信息传递给容器。

  8. 使用场景:环境变量提供了一种简单的方式来将配置信息传递给容器内的应用程序。通过将配置信息以环境变量的形式定义在 Pod 的 YAML 文件中,容器在启动时会自动获取这些环境变量,并可以在应用程序中使用它们。这种方式使得配置信息的传递更加灵活和方便。

  9. 卷挂载:卷挂载是指在 Pod 中将集群中的存储卷(如持久卷)挂载到容器的文件系统中,使得容器可以访问存储卷中的数据。

  10. 使用场景:卷挂载为容器提供了一种持久化存储的解决方案。通过挂载存储卷,容器可以读写存储卷中的数据,并且在容器重启或迁移时,数据仍然可以保留。这对于需要持久化存储的应用来说是非常重要的。

  11. 标签和注解:标签(Labels)和注解(Annotations)是 Kubernetes 中用于组织和查询资源的元数据。

  12. 使用场景:标签是一组键值对,用于为 Kubernetes 对象(如 Pod、Service 等)提供简单的标识符。通过标签,可以方便地对资源进行筛选、分组和查询。注解则是比标签更加灵活的元数据,可以存储更多的信息,并且没有特定的格式限制。注解通常用于存储非关键性的、辅助性的信息,或者用于存储由第三方工具生成的元数据。

使用实践案例

创建 ConfigMap

在 Kubernetes 环境中,ConfigMap 发挥着至关重要的作用,它专门用于存储配置信息。通过 ConfigMap,我们可以将应用程序的配置与其部署过程解耦,从而实现更灵活、更便捷的管理和更新机制。


创建 ConfigMap 的方式主要分为两大类:


通过 kubectl 命令行创建

通过命令行参数创建

基于 kubectl 命令,配合--from-literal参数直接指定键值对。例如:


kubectl create configmap test-configMap --from-literal=name=libo--from-literal=age=30 --from-literal=webSite=www.liboware.com
复制代码


这种方式更适合用于临时性的测试场景,对于需要管理大量配置的情况则显得不够高效和适用。在涉及众多配置信息的复杂环境中,采用更为专业的配置管理工具或方法将更为恰当和高效。

通过指定文件创建

若配置信息已预先保存在文件中,我们可以利用--from-file参数来指定该文件。举例来说,假设我们有一个名为nginx.conf的配置文件,那么可以通过执行以下命令来创建 ConfigMap:


kubectl create configmap nginx-config --from-file=nginx.conf
复制代码


例如,nginx.conf 可能包含应用程序的配置参数、环境变量、特征标志、文件路径或其他任何键值对形式的配置。这取决于你的应用程序需要哪些配置来运行。


APP_NAME=my-application  DEBUG=false  LOG_LEVEL=INFO  DATABASE_URL=postgres://user:password@localhost:5432/mydb
复制代码
通过指定目录创建

当配置信息分散在多个文件中时,您可以通过指定一个目录来统一创建 ConfigMap。Kubernetes 将会递归地遍历该目录下的所有文件,并将这些文件的内容作为 ConfigMap 的数据项进行存储。以下是一个示例命令:


kubectl create configmap cmdir-config --from-file=conf/
复制代码


在这个例子中,conf/目录包含了所有需要作为 ConfigMap 数据的配置文件。Kubernetes 会自动读取这些文件,并将它们整合成一个 ConfigMap 对象。这种方式特别适用于那些配置信息分散在多个文件中的复杂场景,能够简化配置信息的整合过程,提高管理效率。

通过指定环境变量配置文件创建

当配置信息以环境变量的形式存储于特定的配置文件中(例如.env文件),我们可以利用 --from-env-file 参数来创建 ConfigMap


这一方法允许你将应用程序的环境变量存储在一个 .env 文件中,然后 Kubernetes 能够直接读取这个文件,并将其中的环境变量键值对作为 ConfigMap 的数据。


具体来说,.env 文件通常包含一系列的环境变量定义,每行一个,格式为 KEY=VALUE。例如:


APP_NAME=myappDB_HOST=db.example.comDB_PORT=5432
复制代码


当你使用 kubectl create configmap 命令并指定 --from-env-file 参数时,Kubernetes 会读取 .env 文件中的每一行,并将其解析为一个键值对,然后这些键值对会作为 ConfigMap 的数据条目存储起来。


命令示例如下:


kubectl create configmap demo-config --from-env-file=./myapp.env
复制代码


在这个例子中,myapp.env 是包含环境变量定义的 .env 文件,而 demo-config 是将要创建的 ConfigMap 的名称。


一旦 ConfigMap 被创建,你就可以在 Kubernetes 的 Pod 定义中引用它,将这些环境变量注入到容器的运行环境中。这样,应用程序在启动时可以读取这些环境变量,并据此配置其行为。

通过 YAML 文件创建

除了使用 kubectl 命令行工具外,还可以通过编写 YAML 文件来定义和创建 ConfigMap。例如:


apiVersion: v1kind: ConfigMapmetadata:  name: demo-configmapdata:  key1: value1  key2: value2
复制代码


然后,使用以下命令创建 ConfigMap:


kubectl create -f my-configmap.yaml
复制代码


这种方式更加灵活和可维护,尤其适用于复杂的配置场景。

创建 Secret

在 Kubernetes(通常简称为 k8s)中,Secrets 用于存储和管理敏感信息,如密码、令牌或密钥。这些信息在 Pod 中作为环境变量、卷中的文件或容器镜像的密钥注入使用。


注意,我们坚决避免在应用程序代码或配置文件中直接硬编码机密信息,以防信息泄露。同时,我们实行定期轮换密码和加密密钥的机制,以最大限度地减少潜在安全漏洞带来的风险。

命令行创建 Secret

Secrets 与 ConfigMap 在功能上确实展现出诸多相似之处,这使得它们在创建方式上也有着诸多共通之处。因此,当你掌握了 ConfigMap 的创建方法后,将 ConfigMap 替换为 Secret,即可轻松应用于 Secrets 的创建。


kubectl create secret generic my-secret \    --from-literal=username=my-username \    --from-literal=password=my-password
复制代码


为避免冗余,这里不再逐一列举具体的创建步骤。简而言之,只需将 ConfigMap 的相关操作稍作调整,即可同样适用于 Secrets 的创建过程。

在 Kubernetes pod 中使用 ConfigMaps 和 Secret 的配置

利用 Kubernetes 内置的 Secrets API,我们可以安全地存储敏感信息,确保数据的安全性。在组件间传输数据时,特别是在处理敏感信息时,我们采用加密措施,从而保障数据在传输过程中的机密性。为了更精细地控制对 Secret 的访问权限,我们实施基于角色的访问控制(RBAC),确保只有经过授权的实体能够检索敏感数据。

在 Pod 中使用 ConfigMap

我们创建了一个名为configmap-pod的 Pod,其中包含一个名为 demo-container 的容器。该容器使用 demo-image:latest 镜像,并从名为 demo-configmap 的 ConfigMap 中读取环境变量。


apiVersion: v1kind: Podmetadata:  name: configmap-podspec:  containers:  - name: demo-container    image: demo-image:latest    envFrom:    - configMapRef:        name: demo-configmap
复制代码


  • envFrom 字段引用了名为 demo-configmap 的 ConfigMap。

  • ConfigMap 中的值将作为环境变量注入 pod。


容器在启动时就可以访问到 ConfigMap 中定义的配置信息,而无需在容器内部或镜像中硬编码这些配置。这是一种在 Kubernetes 中动态管理配置信息的常见做法。

在 Pod 中使用 Secrets

YAML 配置文件的主要任务是创建一个名为 secret-pod 的 Pod。在此过程中,envFrom 字段扮演着至关重要的角色,它通过引用名为 example-secret 的 Secret 来实现这一目标。


apiVersion: v1kind: Podmetadata:  name: secret-podspec:  containers:  - name: app-container    image: app-image:latest    envFrom:    - secretRef:        name: demo-secret
复制代码


这个引用的核心功能是将 Secret 中的值作为环境变量注入到 Pod 中,从而确保 Pod 在运行时能够直接访问和使用这些值。

快捷指令

额外福利

给大家输出一些额外的指令快速手册,如下面所示:

统一创建 Resource 资源

此处的资源涵盖了多个 Kubernetes 的核心组件,包括 Pod、Service、ReplicaSet、Deployment,Node 等以及用于配置管理的 ConfigMap 和 Secret。



这些资源的管理与操作,大部分情况下,都遵循着相似的指令和逻辑,使得用户可以通过统一的方式进行管理和维护。这样的设计不仅提高了 Kubernetes 的易用性,也极大地简化了复杂集群环境的管理工作。

Node 节点管理的指令


发布于: 刚刚阅读数: 5
用户头像

洛神灬殇

关注

🏆 InfoQ写作平台-签约作者 🏆 2020-03-25 加入

👑 前优酷资深工程师,一个具有高洞察力的理性自律小i人 — INTJ 📕 个人著作《深入浅出Java虚拟机—JVM原理与实战》 💻 10年开发经验,参与过多个大型互联网项目,定期分享技术干货和项目经验

评论

发布
暂无评论
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)_Kubernetes_洛神灬殇_InfoQ写作社区