Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
135 lines (103 sloc) 4.26 KB
date title template thumbnail slug author categories tags
2019-10-31
Kubernetes 工程实践(一): 配置类资源
post
../thumbnails/k8s.png
k8s-config
JayL
k8s
devops
configMap
secret

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

You can’t perform that action at this time.