Kubernetes 工程实践(一): 配置类资源

Kubernetes提供的配置管理功能是非常灵活的,但,有时候东西越灵活,反而会让初学者越难进入。遇到类似情形,可以根据实际需求去找相应的功能点,再一一熟悉。这是我的经验,读者不妨试试。

以下是就之前学习Kubernetes配置资源的一次简单回顾。

1. 常规配置

常规配置类型简单划分一下,大概有如下几种类型:

  • 环境变量
  • 配置项目

    • 健值对配置
    • 文件内容配置
  • 密码配置

这些类型基本上能够支持绝大部分的项目。在没有Kubernetes之前,这些配置会以配置文件或者配置服务的方式来满足项目的配置读取。在开启Kubernetes之后,则是通过具体的Kubernetes配置类资源定义进行操作。

2. 配置资源

Kubernetes中提供配置功能的资源主要是ConfigMapSecret两类资源,官网上提供了一篇非常好的入门教程:

虽然Kubernetes提供的资源概念是一个新东西,但是就配置本身而言,需要解决的仍然是相同的问题。瓶子是新的,酒还是旧酒。配置还是那些配置,即:

  • 健值对配置
  • 文件内容配置
  • 密钥配置

我们相应的操作一下:

# 健值对配置
$: kubectl create configmap kv-config --from-literal=key=value
# 文件配置
$: kubectl create configmap file-config --from-file=key=/path/to/configfile
# 密码配置
$: kubectl create secret generic my-secret --from-literal=key=supersecret 

这些配置在Kubernetes都是以资源的形式进行配置的。虽然可以通过命令行的方式进行写入,实际在开发或生产环境需要通过YAML文件的方式存储下来,在通过版本管理软件进行版本跟踪。

# 配置代码化
$: kubectl get configmap kv-config -o yaml > kv-config.yaml

3. 配置注入

虽然Kubernetes本身提供了多种不同配置的资源管理,但是具体到工程实践时,我们关心的问题则是配置的注入问题。配置的注入其实是Kubernetes的官方说法,直白点的说法,就是Kubernetes中如何使用这些配置。官方文章如下:

看目录就知道有以下方式:

  • 启动参数
  • 环境变量
  • 卷挂载
  • PodPreset 资源

其中,PodPreset 资源还是一个比较新的资源,一些老的版本Kubernetes中尚不支持。具体使用可以参考以下文档:

下面贴两段样例,分别就以上的常规注入方式进行简单的演示:

3.1 样例1: 环境变量/参数注入

一个最简单的配置项作为环境变量并注入到参数中使用样例:

apiVersion: v1
kind: Pod
metadata:
  name: echo-pod
spec:
  containers:
    - name: echo-pod
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(MY_KEY1)" ]
      env:
        - name: MY_KEY1
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: key1
  restartPolicy: Never

3.2 样例2: 文件配置/挂载注入

文件配置与卷挂载样例:

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: demo-pod
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/demo.cf" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: my-config-file
        items:
        - key: key1
          path: demo.cf
  restartPolicy: Never

小结

Kubernetes官方文档已经足够清晰,更详细的配置资源的定义与管理,请访问官网找到对应的实例进行学习实践。