首页 技术 正文
技术 2022年11月19日
0 收藏 309 点赞 3,642 浏览 3409 个字

一、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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

  b、用文件生成configmap

  准备配置文件;

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

  k8s-存储卷2-configMap-Secret-十三

  创建:

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

  k8s-存储卷2-configMap-Secret-十三

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

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

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

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

  k8s-存储卷2-configMap-Secret-十三

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

  下面,修改一下configmap:

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

  k8s-存储卷2-configMap-Secret-十三

  再次查看容器变量:

  k8s-存储卷2-configMap-Secret-十三

  (3)存储卷方式挂载configmap

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

  我上面创建了两个configmap:

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

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

  a、挂载nginx-config

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

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

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

  b、挂载nginx-www

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

  k8s-存储卷2-configMap-Secret-十三

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

  然后定义一个html文件:

  k8s-存储卷2-configMap-Secret-十三

  在node02中测试访问:

  k8s-存储卷2-configMap-Secret-十三

  k8s-存储卷2-configMap-Secret-十三

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

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

  在node02中再次访问:

  k8s-存储卷2-configMap-Secret-十三

  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

  k8s-存储卷2-configMap-Secret-十三

  k8s-存储卷2-configMap-Secret-十三

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

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

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

  k8s-存储卷2-configMap-Secret-十三

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

  k8s-存储卷2-configMap-Secret-十三

  查看变量是否注入:

  k8s-存储卷2-configMap-Secret-十三

  (3)存储卷方式挂载secret

  此方式与configmap类似;

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893