一、StorageClass

  在前一篇文章中,手动定义了pv,并让pvc关联至pv;现实中在pvc申请存储空间时,未必就有现成的pv符合pvc申请的需求,该怎么办呢?

Kubernetes提供了描述存储的方法(StorageClass)。比如,在存储系统中划分一个1TB的存储空间提供给Kubernetes使用,当用户需要一个10G的PVC时,会立即通过restful发送请求,从而让存储空间创建一个10G的image,之后在我们的集群中定义成10G的PV提供给当前的PVC作为挂载使用。在此之前我们的存储系统必须支持restful接口,比如ceph分布式存储,而glusterfs则需要借助第三方接口完成这样的请求。  

二、Secret和configMap

    configMap和secret是特殊类型的存储卷,它们不是提供pod存储空间,而是给管理员或用户提供从集群外部向Pod内部的应用注入配置信息的方式。

其实ConfigMap功能在Kubernetes1.2版本的时候就有了,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。这些配置信息需要与docker image解耦,你总不能每修改一个配置就重做一个image吧?ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。

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

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

查看资源定义清单字段

    [root@master ~]# kubectl explain pods.spec.volumes

  [root@master ~]# kubectl explain cm          #cm:ConfigMap

   [root@master ~]# kubectl create configmap --help     #可以直接在命令行创建一个configmap  

  1、configmap

  (1)创建configmap

  configmap可以在命令行创建,也可以用文件生成;

  a、在命令行手动创建一个configmap

[root@master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.mageedu.com

  #nginx-config:名字; --from-literal:用来定义一对键值

  [root@master ~]# kubectl get cm

  

  [root@master ~]# kubectl describe cm nginx-config

  

  b、用文件生成configmap

  准备配置文件;

  "myapp.magedu.com"后面应该有一个";",我这里忘记写了,需要写上;

  

  创建:

  [root@master configmap]# kubectl create configmap nginx-www --from-file=./www.conf  #此时不指定键,文件名当键,文件内容当值;

  

  (2)创建pod,并挂载configmap(环境变量方式注入到pod)

  [root@master configmap]# vim pod-configmap.yaml

  

  [root@master configmap]# kubectl apply -f pod-configmap.yaml

  

  查看变量是否被注入到容器中:

  [root@master configmap]# kubectl exec -it pod-cm-1 -- /bin/sh

  

  发现环境变量已被注入到容器中;这种只在容器启动时生效一次,如果后续改了configmap,也不会再次生效,只有再次启动才行;

  下面,修改一下configmap:

  [root@master configmap]# kubectl edit cm nginx-config

  

  再次查看容器变量:

  

  (3)存储卷方式挂载configmap

  Volume 形式的 ConfigMap ,支持动态更新;

  我上面创建了两个configmap:

    nginx-config      #是在命令行创建的,不是以文件的形式

    nginx-www         #是以文件的形式创建的

  a、挂载nginx-config

  [root@master configmap]# vim pod-configmap-2.yaml

  

  [root@master configmap]# kubectl apply -f pod-configmap-2.yaml

  

  查看挂载,此时端口是8080:

  

  然后我们修改一下端口,测试一下配置文件的动态更新:

  [root@master ~]# kubectl edit cm nginx-config    #将端口改为8088

  

  再次查看,发现端口已经动态更新了:

  

  b、挂载nginx-www

  [root@master configmap]# vim pod-configmap-3.yaml

  

  

  [root@master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh

  

  然后定义一个html文件:

  

  在node02中测试访问:

  

  

  然后改一下configmap里定义的端口,测试一下配置文件的动态更新:

  [root@master ~]# kubectl edit cm nginx-www

  

  稍等片刻,再次查看,nginx容器中的配置文件已经自动更新:

  

  但是此时nginx仍然监听的是80端口,我们需要手动重载一下配置文件:

  

  在node02中再次访问:

  

  2、Secret

  [root@master ~]# kubectl create secret --help

   Available Commands:
     docker-registry   创建一个给 Docker registry 使用的 secret
     generic   从本地 file, directory 或者 literal value 创建一个 secret
     tls   创建一个 TLS secret

  Usage:

    kubectl create secret [flags] [options]

  [root@master ~]# kubectl create secret generic --help

  Usage:

    kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1]

  (1)在命令行创建secret

  [root@master configmap]# kubectl create secret generic mysql-root-password --from-literal=passwprd=Myp@ss123

  

  

  此种加密使用的base64,意义不大;

  (2)挂载secret(环境变量方式注入到pod)

  [root@master configmap]# vim pod-secret-1.yaml

  

  [root@master configmap]# kubectl apply -f pod-secret-1.yaml

  

  查看变量是否注入:

  

  (3)存储卷方式挂载secret

  此方式与configmap类似;

k8s-存储卷2-configMap-Secret-十三的更多相关文章

  1. k8s存储卷概述

    pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在.docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的 ...

  2. K8s存储卷、pv和pvc的使用

    emptyDIR 临时目录 hostPath :使用主机的路径 网络存储: 传统的设备存储:NAS,SAN 分布式存储:glusterfs,rbd,cephfs 云存储:EBS,Azure,阿里云的 ...

  3. kubernetes系列12—二个特色的存储卷configmap和secret

    本文收录在容器技术学习系列文章总目录 1.configmap 1.1 认识configmap ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件.ConfigMa ...

  4. 09-kubernetes configMap secret

    目录 配置容器化应用配置的方式 命令创建和测试configMap 创建一个Pod 挂在测试 命令行文件类创建方式 创建Pod测试 创建后测试 贴近实际进行测试 创建后测试 secret 举例测试 ge ...

  5. k8s系列---存储卷pv/pvc。configMap/secert

    因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...

  6. k8s学习笔记之八:存储卷

    第一章.前言 默认情况下容器的数据都是非持久化的, 在容器消亡以后数据也跟着丢失, 所以 Docker 提供了 Volume 机制以便将数据持久化存储. 类似的, Kubernetes 提供了更强大的 ...

  7. k8s volume存储卷(四)

    介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价,首先,kubernetes中的v ...

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

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

  9. k8s volume存储卷

    k8s volume存储卷   介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价, ...

  10. k8s之存储卷及pvc

    1.存储卷概述 因为pod是有生命周期的,pod一重启,里面的数据就没了,所以我们需要数据持久化存储,在k8s中,存储卷不属于容器,而是属于pod,也就是说同一个pod中的容器可以共享一个存储卷,存储 ...

随机推荐

  1. 【Android开发—智能家居系列】(三):手机连接WIFI模块

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 概述 实现连接WIFI的功能会用到一个工具类,源码可以点击链接下载.网上这些类似的工具类里的代码差不多是一样的.连接无线网主要有 ...

  2. Mac电脑解压文件unrar用密码问题解决

    下载了一个rar文件,有密码的,你懂的. 但是在mac上面,用unrar解压,只能解出空文件:用izip解压,直接停在那里不动. 只好上网搜索.找到了办法. 用brew 安装了命令行版本的 unrar ...

  3. POJ 1260 Pearls (动规)

    Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7210 Accepted: 3543 Description In ...

  4. 转:为什么Uber宣布从Postgres切换到MySQL?

    转: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547609&idx=1&sn=cbb55ee823dd ...

  5. 我的javascript

    JavaScript的简介: 1.定义:javascript是一门动态弱类型的解释型编程语言,增强页面动态效果,实现页面与用户之间的实时动态的交互. javascript是由三部分组成:ECMAScr ...

  6. [WF4.0 实战] 事件驱动应用

    看到题目或许非常多人都会疑问,为什么要使用事件监听呢? 眼下的认识: 1,使用事件监听能够将工作流的结点返回值返回到client 2,能够实现等待与重新启动,相当于之前的WaitActivity创建B ...

  7. python的pexpect模块

    Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...

  8. 多线程-----Thread类与Runnable接口的区别

    第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...

  9. 设计模式学习笔记——Observer观察者模式

    观察者模式里面有两个东西:观察者(Observer)和目标(Subject).当目标发生变化的时候,观察者随之起舞,也作出相应的变化.此为观察者模式. 这是怎么做到的?主要是目标里面存有一份观察者的名 ...

  10. chmod|chown|chgrp和用法和区别

    1.chgrp(改变文件所属用户组) chgrp 用户组   文件名   ###就是这个格了.如果整个目录下的都改,则加-R参数用于递归. 如:chgrp -R   user smb.conf 2.c ...