K8S简历(十一)

应用部署的一个最佳实践是将应用所需的配置信息与程序进行分离,这样可以使应用程序被更好地复用,通过不同的配置也能实现更灵活的功能。将应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在创建容器时进行配置注入,但在大规模容器集群的环境中,对多个容器进行不同的配置将变得非常复杂。K8S提供了一种统一的应用配置管理方案ConfigMap(环境变量)。

创建ConfigMap:

用yaml的方式创建:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  port: 80
  server_name: wl.com
#值可以用于存储配置文件

用kubectl创建ConfigMap:

kubectl crate configmap nginx-config --from-literal=port=80 --from-literal=server_name=wl.com
kubectl crate configmap nginx-www--from-file=nginx.conf=./www.conf    
#文件内容会成为环境变量的值;--from-file=./www.conf环境变量名称为文件名称

Pod使用ConfigMap:

无volume:

apiVesion: v1
kind: Pod
metadata:
  name: www
  namespace: default
spec:
  containers:
  - name: nginx
    image: wl/nginx:v1.12
    env:
    - name: PORT
      valueFrmo:
        configMapKeyRef:
          - name: nginx-config
            key: port
#如果需要ConfigMap中全部变量
apiVesion: v1
kind: Pod
metadata:
  name: www
  namespace: default
spec:
  containers:
  - name: nginx
    image: wl/nginx:v1.12
    envFrom:
      - configMapRef
        name: nginx-config

通过volume挂载ConfigMap:

apiVesion: v1
kind: Pod
metadata:
  name: www
  namespace: default
spec:
  containers:
  - name: nginx
    image: wl/nginx:v1.12
    volumeMounts:
    - name: config
      mountPath: /data
volumes:
  - name: config
    configMap:
      name: nginx-config
      items:
      - key: port
        path: port
#如果你只想挂载ConfigMap中某个值可以用items字段单独挂载,要全部挂载不用写items字段。

如果你用volume方式挂载ConfigMap,运行时的Pod也能实时获取ConfigMap的更新,不用volume就不能。

secret资源:

secret用于存储比较私密的数据(不安全)

kubectl crate secret generic mysql-root-password --from-literal=pass=root123
#创建secret,在Pod的使用方法和ConfigMap的方法类似只是刚刚字段名称即可。

你可能感兴趣的:(K8S简历(十一))