k8s mysql 连接时间 k8s搭建mysql_配置文件


本文通过搭建 MySQL 环境来了解 k8s 的重要概念,包括持久卷,网络和参数配置。这是下篇,专门讲解参数配置。如果你有些地方不能完全看明白,请先看上篇通过搭建MySQL掌握k8s重要概念(上):网络与持久卷

配置参数

参数配置是 K8s 里比较重要的一个概念,它包含了下面三个部分:

  • ConfigMap:是用来保存共享配置数据的。当你需要在不同的配置文件之间共享数据时,你可以把这些数据以键值对的形式存储在 configMap 中。详情请见"Configure a Pod to Use a ConfigMap[1]"
  • Secret:它跟 configMap 的作用很类似,但是用来存储保密信息的,例如数据库的口令。详情请见"Secrets[2]"
  • Environment Variable:它就是我们所熟悉的环境变量,一般是由系统来定义。不同的系统例如 Linux 和 Windows 都有自己的方法来定义环境变量。k8s 的环境变量主要是用来向容器传递数据的。详情请见"Container Environment Variables[3]"

configMap

下面就是 configMap(mysql-config.yaml)的配置文件。它的结构很简单,最重要的就是 data 部分,里面是键、值列表。这是比较简单的一个例子,复杂的还可以包含文件和键、值列表的组合。你可以把 configMap 单独放在一个文件里,这样调试起来比较方便,也可以把它和部署(Deployment)放在一起,这样运行起来比较方便。

apiVersion: v1kind: ConfigMapmetadata:name: mysql-config # name of ConfigMap, referenced in other filesdata:db-host: mysql # host address of mysql serverdb-name: service_config # name of the database

configMap 的运行命令与其它对象不同,例如一般的运行命令是“kubectl apply -f mysql-volume.yaml”或“kubectl create -f mysql-volume.yaml”,你只要给出配置文件名就行了,不需要给出要创建的对象的类别(它是自动识别的)和名字,因为在配置文件里已经有了(例如“kind: ConfigMap”,就表示对象类别是“ConfigMap”。“name: mysql-config” 就表示要创建的 configMap 的名字是“mysql-config”)。但 configMap 的创建命令是"kubectl create configmap [map-name][data-source]",对象类别和名字都要在命令行里明确给出,[map-name] 是要创建的 configMap 的名字。“[data-source]”是数据来源文件的文件名(不是配置文件的文件名),我们上面提到过,configMap 可以包含别的文件里的键、值列表,“[data-source]”就是“别的文件”的文件名。注意这个命令里就根本没有提到配置文件。我不太喜欢这种方式,因为当你在部署配置里引用键、值对时,需要给出 configMap 的名字,如果它不是存在文件里,而是在创建时敲入,这样很容易出错。

因此我还是采用了通用的创建命令“kubectl apply -f mysql-config.yaml”来创建 configMap,这种方式在 k8s 的官方文档里是没有的,但它也是可行的。不过缺点是不能包含别的文件。

键入“kubectl get configMap”来显示已创建好的 configMap。

vagrant@ubuntu-xenial:/var/log$ kubectl get configMapNAME DATA AGEmysql-config 2 11h

键入“kubectl describe configMap”来显示 configMap 的详细信息。

vagrant@ubuntu-xenial:/var/log$ kubectl describe configMapName: mysql-configNamespace: defaultLabels: Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1