配置容器化应用配置的方式

  1. 自定义命令行参数来实现;

    1. command
    2. args []
  2. 把配置文件直接打入进项;
  3. 环境变量实现, 容器从物理机中的环境变量来导入配置
    1. 所配置的应用支持从环境变量中来读取
    2. 用预处理脚本entrypoint处理,通过环境变量传递过来的配置
  4. 存储卷;通过挂在对应的已经存放了配置文件的存储卷上

configMap

将配置文件从镜像中解耦, 从而增强了应用的可以执行以及应用的复制性.

命令创建和测试configMap

命令行键值对创建

  1. kubectl describe configmap nginx-www -o yaml
  2. [root@master volume]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.sijiayong.com
  3. configmap/nginx-config created
  4. [root@master volume]# kubectl get configmap
  5. NAME DATA AGE
  6. nginx-config 2 7s
  7. [root@master volume]# kubectl describe configmap nginx-config
  8. Name: nginx-config
  9. Namespace: default
  10. Labels: <none>
  11. Annotations: <none>
  12. Data
  13. ====
  14. nginx_port:
  15. ----
  16. 80
  17. server_name:
  18. ----
  19. myapp.sijiayong.com
  20. Events: <none>

创建一个Pod 挂在测试

配置清单如下:

  1. [root@master configmap]# cat pod-configmap.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: pod-cm
  6. namespace: default
  7. labels:
  8. app: myapp
  9. tier: frontend
  10. annotations:
  11. jubaozhu.com/created-by: "cluster admin"
  12. spec:
  13. containers:
  14. - name: myapp
  15. image: ikubernetes/myapp:v1
  16. ports:
  17. - name: http
  18. containerPort: 80
  19. env: # 这里使用env, 表示容器中会用环境变量导入
  20. - name: NGINX_SERVER_PORT # 这里的name表示容器中的key值
  21. valueFrom:
  22. configMapKeyRef:
  23. name: nginx-config # 这里name是指向configMap对应的名称
  24. key: nginx_port # 表示容器中key 所对应的 value的值, 此处取值的地方是定义的configMap中的对应的value值
  25. - name: NGINX_SERVER_NAME # 因为要导入两个值,所以要写两份, 写法和上面的导入环境变量的方式相同
  26. valueFrom:
  27. configMapKeyRef:
  28. name: nginx-config
  29. key: server_name

创建后测试

  1. [root@master configmap]# kubectl apply -f pod-configmap.yaml
  2. pod/pod-cm created
  3. [root@master configmap]# kubectl get pod -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod-cm 1/1 Running 0 8s 10.244.1.30 node03.kubernetes <none> <none>

创建Pod后,进入到对应的容器中查看环境变量

把端口变更为8080

  1. [root@master configmap]# kubectl exec -it pod-cm -- /bin/sh
  2. / # env
  3. MYAPP_SVC_PORT_80_TCP_ADDR=10.98.57.156
  4. KUBERNETES_PORT=tcp://10.96.0.1:443
  5. KUBERNETES_SERVICE_PORT=443
  6. MYAPP_SVC_PORT_80_TCP_PORT=80
  7. HOSTNAME=pod-cm
  8. SHLVL=1
  9. MYAPP_SVC_PORT_80_TCP_PROTO=tcp
  10. HOME=/root
  11. NGINX_SERVER_PORT=80
  12. NGINX_SERVER_NAME=myapp.sijiayong.com
  13. ... ...
  14. ... ...

可以通过命令行edit编辑configMap

  1. [root@master configmap]# kubectl edit configmap nginx-config
  2. configmap/nginx-config edited
  3. [root@master configmap]# kubectl describe configmap nginx-config
  4. Name: nginx-config
  5. Namespace: default
  6. Labels: <none>
  7. Annotations: <none>
  8. Data
  9. ====
  10. nginx_port:
  11. ----
  12. 8080
  13. server_name:
  14. ----
  15. myapp.sijiayong.com
  16. Events: <none>

修改之后, 需要些许时间等待后,容器中的环境变量就会变更,需要再次进入容器后查看环境变量中的端口的值是否有变化

命令行文件类创建方式

首先需要手动编辑一个相应的配置文件

  1. [root@master configmap]# cat www.conf
  2. server {
  3. server_name myapp.sijiayong.com;
  4. listen 80;
  5. root /data/web/html/;
  6. }

然后使用命令创建如下:

  1. [root@master configmap]# kubectl create configmap nginx-www --from-file=www.conf # 这里只有一个等号, 表示 key 就是文件名称, 而value 是文件内容
  2. configmap/nginx-www created
  3. [root@master configmap]# kubectl get configmap
  4. NAME DATA AGE
  5. nginx-config 2 2m41s
  6. nginx-www 1 4s
  7. [root@master configmap]# kubectl describe configmap nginx-www
  8. Name: nginx-www
  9. Namespace: default
  10. Labels: <none>
  11. Annotations: <none>
  12. Data
  13. ====
  14. www.conf:
  15. ----
  16. server {
  17. server_name myapp.sijiayong.com;
  18. listen 80;
  19. root /data/web/html/;
  20. }
  21. Events: <none>
  22. [root@master configmap]# kubectl get configmap nginx-www -o yaml
  23. apiVersion: v1
  24. data:
  25. www.conf: |
  26. server {
  27. server_name myapp.sijiayong.com;
  28. listen 80;
  29. root /data/web/html/;
  30. }
  31. kind: ConfigMap
  32. metadata:
  33. creationTimestamp: "2019-08-06T08:44:37Z"
  34. name: nginx-www
  35. namespace: default
  36. resourceVersion: "3850257"
  37. selfLink: /api/v1/namespaces/default/configmaps/nginx-www
  38. uid: 81050135-532c-4f0e-8fcf-99727cc2c498

创建Pod测试

创建相应清单文件

  1. [root@master configmap]# cat pod-configmap-2.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: pod-cm-2
  6. namespace: default
  7. labels:
  8. app: myapp
  9. tier: frontend
  10. annotations:
  11. jubaozhu.com/created-by: "cluster admin"
  12. spec:
  13. containers:
  14. - name: myapp
  15. image: ikubernetes/myapp:v1
  16. ports:
  17. - name: http
  18. containerPort: 80
  19. volumeMounts: # 可直接挂在configMap到Pod中
  20. - name: nginxconf # 这里指定卷名称
  21. mountPath: /etc/nginx/config.d/ # 这里指定挂在的路径
  22. readOnly: true # 这里表示当挂载失败的时候,容器能否启动成功,True表示可以正常启动,否则一点挂载失败,Pod的状态是Error
  23. volumes: # 定义一个卷, 实质上是一个configMap
  24. - name: nginxconf # 卷名称
  25. configMap:
  26. name: nginx-config # 这里指定 configMap对应的名称

创建后测试

  1. [root@master configmap]# kubectl apply -f pod-configmap-2.yaml
  2. pod/pod-cm-2 created
  3. [root@master configmap]# kubectl get pods -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod-cm-2 1/1 Running 0 5s 10.244.2.29 node02.kubernetes <none> <none>

然后进入Pod中查看挂在是否正常

  1. [root@master configmap]# kubectl exec -it pod-cm-2 -- /bin/sh
  2. / # cd /etc/nginx/config.d/
  3. /etc/nginx/config.d # ls -l
  4. total 0
  5. lrwxrwxrwx 1 root root 17 Aug 6 09:12 nginx_port -> ..data/nginx_port
  6. lrwxrwxrwx 1 root root 18 Aug 6 09:12 server_name -> ..data/server_name
  7. /etc/nginx/config.d # cat server_name
  8. myapp.sijiayong.com/etc/nginx/config.d # cat nginx_port # servername显示正常
  9. 8080/etc/nginx/config.d # exit # 端口显示正常

同样也支持在线修改, 需要些许时间后就容器中的对应的值就会产生变化

贴近实际进行测试

上面创建了一个nginx-www 的一个正常的nginx主机的一个配置文件, 下面挂在到Pod中尝试访问是否正常

  1. [root@master configmap]# vim pod-configmap-3.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: pod-cm-3
  6. namespace: default
  7. labels:
  8. app: myapp
  9. tier: frontend
  10. annotations:
  11. jubaozhu.com/created-by: "cluster admin"
  12. spec:
  13. containers:
  14. - name: myapp
  15. image: ikubernetes/myapp:v1
  16. ports:
  17. - name: http
  18. containerPort: 80
  19. volumeMounts:
  20. - name: nginxconf
  21. mountPath: /etc/nginx/conf.d/ # 挂载点为实际的nginx配置文件目录
  22. readOnly: true
  23. volumes:
  24. - name: nginxconf
  25. configMap:
  26. name: nginx-www

创建后测试

  1. [root@master configmap]# kubectl apply -f pod-configmap-3.yaml
  2. pod/pod-cm-3 created
  3. [root@master configmap]# kubectl get pods -o wide
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod-cm-3 1/1 Running 0 6s 10.244.3.33 node01.kubernetes <none> <none>

进入Pod中查看

  1. [root@master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
  2. / # cd /etc/nginx/conf.d/
  3. /etc/nginx/conf.d # ls
  4. www.conf
  5. /etc/nginx/conf.d # cat www.conf
  6. server {
  7. server_name myapp.sijiayong.com;
  8. listen 8088;
  9. root /data/web/html/;
  10. }

因为配置的nginx虚拟主机对应的目录不存在,下面来手动创建目录和写入测试内容

  1. [root@master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
  2. / # mkdir /data/web/html -p
  3. / # echo '<h1>Nginx Server configured by ConfigMap</h1>' > /data/web/html/index.html

集群外部测试访问:

  1. <h1>Nginx Server configured by ConfigMap</h1>
  2. [root@master configmap]# curl 10.244.3.33:80

需要注意的是, 如果在线修改了configMap后, 这里需要手动进入到Pod中, 重载一下nginx才可以, 否则不生效

secret

secret 不实用明文进行展示, 而是使用 base64 编码

三种类型:

  1. generic 通用的secret, 一般保存密码使用
  2. tls 保存证书和对应的秘钥
  3. docker-registry docker的认证信息

举例测试 generic

通过命令的形式创建一个 secret

  1. [root@master configmap]# kubectl create secret generic mysql-root-password --from-literal=passwork=MyP@ss123
  2. secret/mysql-root-password created
  3. [root@master configmap]# kubectl get secret
  4. NAME TYPE DATA AGE
  5. default-token-bc86p kubernetes.io/service-account-token 3 28d
  6. mysql-root-password Opaque 1 4s # 这里看到创建成功
  7. tomcat-ingress-secret kubernetes.io/tls 2 5d21h
  8. [root@master configmap]# kubectl describe secret mysql-root-password
  9. Name: mysql-root-password
  10. Namespace: default
  11. Labels: <none>
  12. Annotations: <none>
  13. Type: Opaque
  14. Data
  15. ====
  16. passwork: 9 bytes # value的值 没有被直接显示出来

解密

  1. [root@master configmap]# kubectl get secret mysql-root-password -o yaml
  2. apiVersion: v1
  3. data:
  4. passwork: TXlQQHNzMTIz # base64 编码格式的密码加密方式
  5. kind: Secret
  6. metadata:
  7. creationTimestamp: "2019-08-07T01:07:11Z"
  8. name: mysql-root-password
  9. namespace: default
  10. resourceVersion: "3942726"
  11. selfLink: /api/v1/namespaces/default/secrets/mysql-root-password
  12. uid: f73164b5-8619-42c4-8186-c13ae8ebd89d
  13. type: Opaque
  14. [root@master configmap]# echo TXlQQHNzMTIz | base64 -d # 解密........
  15. MyP@ss123[root@master configmap]#

创建Pod 应用此 secret

  1. [root@master configmap]# cat pod-secret-1.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: pod-secret-1
  6. namespace: default
  7. labels:
  8. app: myapp
  9. tier: frontend
  10. annotations:
  11. jubaozhu.com/created-by: "cluster admin"
  12. spec:
  13. containers:
  14. - name: myapp
  15. image: ikubernetes/myapp:v1
  16. ports:
  17. - name: http
  18. containerPort: 80
  19. env:
  20. - name: MYSQL_ROOT_PASSWORD
  21. valueFrom:
  22. secretKeyRef:
  23. name: mysql-root-password
  24. key: passwork

创建查看

  1. [root@master configmap]# kubectl apply -f pod-secret-1.yaml
  2. pod/pod-secret-1 created
  3. [root@master configmap]# kubectl get pods
  4. NAME READY STATUS RESTARTS AGE
  5. pod-secret-1 1/1 Running 0 2s
  6. [root@master configmap]# kubectl exec -it pod-secret-1 -- /bin/sh
  7. / # env
  8. MYAPP_SVC_PORT_80_TCP_ADDR=10.98.57.156
  9. KUBERNETES_SERVICE_PORT=443
  10. KUBERNETES_PORT=tcp://10.96.0.1:443
  11. MYAPP_SVC_PORT_80_TCP_PORT=80
  12. HOSTNAME=pod-secret-1
  13. SHLVL=1
  14. MYAPP_SVC_PORT_80_TCP_PROTO=tcp
  15. HOME=/root
  16. MYSQL_ROOT_PASSWORD=MyP@ss123
  17. ... ...
  18. ... ...

09-kubernetes configMap secret的更多相关文章

  1. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  2. Kubernetes configMap(配置文件存储)

    Kubernetes configMap(配置文件存储) 官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure ...

  3. k8s配置中心-configmap,Secret密码

    目录 k8s配置中心-configmap,Secret 创建ConfigMap 使用ConfigMap subPath参数 Secret 官方文档 编写secret清单 使用secret 在 Pod ...

  4. kubernetes ConfigMap和Secret:配置应用程序

    7.1.配置容器化应用程序 7.2.向容器传递命令行参数 7.2.1.待Docker中定义命令与参数 1.了解ENTRYPOINT与CMD ENTRYPOINT定义容器启动时被调用的可以执行程序 CM ...

  5. (十)Kubernetes ConfigMap和Secret

    ConfigMap资源 介绍 ConfigMap是让配置文件从镜像中解耦,让镜像的可移植性和可复制性.许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.这些配置信息需要与docker im ...

  6. 09 . Kubernetes之pv、pvc及使用nfs网络存储应用

    PV,PVC概述 PV的全称是: PersistentVolume (持久化卷),是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph.G ...

  7. kubernetes之secret

    Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中.Secret可以以Volume或者环境变量的方式使用. Secret类型: Opa ...

  8. Kubernetes ConfigMap详解,多种方式创建、多种方式使用

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 配置是程序绕不开的话题,在Kubernetes中使用ConfigMap来配置,它本质其实就是键值对.本文讲解如何 ...

  9. Kubernetes的Secret对象的使用

    Secret可以想要访问的加密数据,存放到Etcd中,Pod可以通过的Volume的方式,访问到Secret保存的信息 ,当数据修改的时候,Pod挂载的Secret文件也会被修改 一.创建Secret ...

随机推荐

  1. 前端技术之:webpack热模块替换(HMR)

    第一步:安装HMR中间件: npm install --save-dev webpack-hot-middleware   第二步:webpack配置中引入webpack对象     const we ...

  2. 转:XSS和CSRF原理及防范

    原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来 ...

  3. 基于node的前端项目代码包发布至nexus

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...

  4. python设置环境变量(临时和永久)

    设置临时环境变量 import os # 设置环境变量 os.environ['WORKON_HOME']="value" # 获取环境变量方法1 os.environ.get(' ...

  5. JavaScript 域名学习及对象的继承实现

    1.定义命名空间 var Namespace = new Object();   Namespace.register = function(path){     var arr = path.spl ...

  6. 描述Linux发行版的系统目录名称命名规则以及用途

    linux各种发行版都遵循LSB(Linux Stadards Base)规则,使用一致的相关的基础目录名称,使用根目录系统结构(root filesystem),使用FHS(Files Hierar ...

  7. MinIO 参数解析与限制

    MinIO 参数解析与限制 MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中. 以下部分提供每个字段的详细说明以及如何自定义它们 ...

  8. day 2 上午 消失之物 背包

    #include<iostream> using namespace std; long long n,m; ]; ]; ]; int main() { cin>>n>& ...

  9. PTA刷题记录(1)

    团队天梯赛-------(2)分值:20 题目要求:你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** ***   *  *** ***** 所谓“沙漏形状” ...

  10. lenovo ubuntu18.04 找不到网络适配器

    链接: https://pan.baidu.com/s/1YJl-MfG0tVy9sLx4_otmnA 提取码: smfp https://blog.csdn.net/John_chaos/artic ...