1.统一环境变量的优点

  1. 环境变量中存在很多的敏感信息,比如账号密码,直接存在放yaml文件中存在很大的安全性问题
  2. 方便维护管理环境变量
  3. 对于开发、测试、生成环境,由于配置的不同。如果不进行管理就需要修改部署yaml,就将带来额外的开销

2.kubernetes提供configMap与Secret实现业务配置的统一管理

配置统一管理的思想:将配置文件与镜像文件分离,使得容器化的应用程序具有可移植性

在这里插入图片描述

2.1 configMap,通常用来管理应用的配置文件或者环境变量

定义configMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: myblog
  namespace: shi
data:
  MYSQL_HOST: "127.0.0.1"
  MYSQL_PORT: "3306"

创建与查看configmap

$ kubectl create -f configmap.yaml
$ kubectl -n luffy get cm myblog -oyaml

使用txt文件创建configmap,注意创建命令的不同

$ cat configmap.txt
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
$ kubectl create configmap myblog --from-env-file=configmap.txt

2.2 Secret,管理敏感类的信息,默认会base64编码存储,有三种类型

  • Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;创建ServiceAccount后,Pod中指定serviceAccount后,自动创建该ServiceAccount对应的secret;
  • Opaque : base64编码格式的Secret,用来存储密码、密钥等;
  • kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。

定义Secret

apiVersion: v1
kind: Secret
metadata:
  name: myblog
  namespace: shi
type: Opaque
data:
  MYSQL_USER: cm9vdA==        #注意加-n参数, echo -n root|base64
  MYSQL_PASSWD: MTIzNDU2

创建并查看Secret

$ kubectl create -f secret.yaml
$ kubectl -n luffy get secret

使用txt文件创建Secret

$ cat secret.txt
MYSQL_USER=root
MYSQL_PASSWD=123456
$ kubectl -n luffy create secret generic myblog --from-env-file=secret.txt

3.configMap与Secret在yaml中的使用

configMap

 - name: MYSQL_HOST
      valueFrom:
        configMapKeyRef:
          name: myblog
          key: MYSQL_HOST

Secret

- name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: myblog
          key: MYSQL_PASSWD

完整yaml

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  namespace: shi2
  labels:
    component: mysql
spec:
  hostNetwork: true    # 声明pod的网络模式为host模式,效果同docker run --net=host
  volumes: 
  - name: mysql-data
    hostPath: 
      path: /opt/mysql/data
  nodeSelector:   # 使用节点选择器将Pod调度到指定label的节点
    component: mysql
  containers:
  - name: mysql
    image: mysql:5.7
    args:
    - --character-set-server=utf8mb4
    - --collation-server=utf8mb4_unicode_ci
    ports:
    - containerPort: 3306
    env:
    - name: MYSQL_USER
      valueFrom:
        secretKeyRef:
          name: myblog
          key: MYSQL_USER
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: myblog
          key: MYSQL_PASSWD
    - name: MYSQL_DATABASE
      valueFrom:
        configMapKeyRef:
          name: myblog
          key: MYSQL_DATABASE
    resources:
      requests:
        memory: 100Mi
        cpu: 50m
      limits:
        memory: 500Mi
        cpu: 100m
    readinessProbe:
      tcpSocket:
        port: 3306
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 3306
      initialDelaySeconds: 15
      periodSeconds: 20
    volumeMounts:
    - name: mysql-data
      mountPath: /var/lib/mysql

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐