k8s之Configmap与Secret
ConfigMap:k8s标准资源,将配置文件做成k8s资源,使其它资源可加载其中配置
Secret:实现加密功能的安全配置文件。由多个key:val中组成
创建configmap资源,可直接使用kubectl创建并且传值
kubectl create configmap filebeat-cfg -n config --from-literal=redis_host="redis.default.svc.cluster.local" --from-literal=log_level="Info"
--from-literal=log_level="Info" 此字段表示为创建一个key为log_level并且为这个可以赋值为info
而后创建pod,并引用configmap资源中的key
apiVersion: v1
kind: Pod
metadata:
  name: pod-cfg-demo
  namespace : config
spec:
  containers:
    name: filebeat
    image: ikubernetes/filebeat:5.6.5-alp ine
    env:#引用环境变量值
    - name: REDIS_ HOST #名称,REDIS_HOST为容器内部的变量名称
      valueFrom:#引用其他资源传递变量,
        configMapKeyRef :#表示引用configmap资源
          name: filebeat-cfg #configmap名称,为刚才创建的configmap资源
          key: redis_host#key名称
    - name: LOG_LEUEL #同上也为容器内的变量名称
        valueFrom:
          configMapKeyRef :
            name: filebeat-cfg
            key: log_level

连接至容器内部查看环境变量传递成功了,但是我们修改configmap中key 的值不会生效,除非重建pod
基于存储卷引用configmap
创建2个配置文件为存储卷提供配置

定义好configmap
kubectl create configmap nginx-cfg --from-file=./server1.conf --from-file=server-2./server2.conf -n config
--from-file=./server1.conf #利用文件来传递参数,没有给key名称默认为文件名称为key,文件内容为value
--from-file=server-2./server2.conf -n config#也可以手动添加key名。并指定文件内容为value,且目录为相对路径不能为绝对路径
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  namespace: config
spec:
  containers:
  - name: myapp
    image: ikubernetes/ myapp:v1
    volumeMounts : #定义容器使用存储卷挂载
    - name: config#使用存储卷的名称
      mountPath: /etc/nginx/conf.d/
volumes:#定义存储卷
- name: config#存储卷名称
  configMap:#存储卷类型:这里为configmap而不是nfs其他的文件系统,可以指定configmap资源为存储卷
    name: nginx-cfg#configmap名称,这里为我们刚才创建的cm名称
    items :#使用cm中的key
    - key: server1.conf #key名称
      path: server-first.conf #表示映射为文件时文件名是什么
    - key: server-2
      path: server-second.conf
kubectl edit cm nginx-cfg -n config#在线修改时会自动同步至容器内部


secret资源。经过base64编码后的配置中心,用于传递敏感信息的值
secret类型:
tls类型:专用ssl。tls格式的证书和私钥打包进secret中。不管原来文件叫什么,通通进行统一,证书一定会映射为叫tls.crt。私钥为tls.key
generic:非证书认证时使用的普通的敏感信息类型
docker-registry:用于连接dockerhub中时使用的账户认证信息类型
kubectl create secret generic mysql-root-password -n config --from-literal=password=centos #创建通用型secret资源
创建pod使用secret中的key传递给容器
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  namespace: config
spec:
  containers:
  - name: mysql
    image: mysql:5.6
    env: #容器内部定义的变量
    - name: MYSQL_ROOT_PASSWORD#此名称为容器内部定义的变量名,不是随便给的。需要传递参数才能启动mysql容器
      valueFrom:  #定义值
        secretKeyRef: #值类型为secret
          key: password #key名称
          name: mysql-root-password #secret的名称

交互式连接mysql可直接使用传递的参数登陆mysql
kubectl create secret tls mysql-cert --cert=./myapp.crt --key=./myapp.key -n config#创证书类型secret配置,是其他pod能将此secret当作证书认证
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod-tls
  namespace: config
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: config
      mountPath: /etc/nginx/conf.d/
    - name: tls
      mountPath: /etc/nginx/certs/#容器内部的挂载路径
  volumes:#定义存储卷类型
  - name: config 存储卷名称
    configMap:  #存储卷类型configmap
     name: nginx-cfg
     items:
     - key: server1.conf
       path: server-first.conf
     - key: server-2
       path: server-second.conf
  - name: tls
    secret: #此存储卷类型为secret
      secretName: mysql-cert #secret的名称,刚才我创建为mysql-cert
      items: #定义key
      - key: tls.crt #注意原key和crt为什么名称。在secret中定义都为tls.key,tls,crt
        path: myapp.crt #在容器中名称相对路径为mountPath: /etc/nginx/conf.d/
      - key: tls.key
        path: myapp.key
        mode: 0600 #定义权限

StatefulSet:管理有状态应用,但对于扩缩容需要自己写代码操作,statefulset只负责提供给pod一个单一的标识,存储设备。
operator:使用不同应用程序,对不同的应用程序有程序的所有运维管理操作,不同的应用程序有不同的operator,operator运行为k8s集群中的pod,用于控制有状态的集群应用
定义statefulset:
先创建好几个pv,使用静态创建
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v0
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v0
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v1
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v2
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v2
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v3
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v3
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v4
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v4
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-v5
  labels:
    storage: nfs
spec:
  accessModes: ["ReadWriteOnce ","ReadwriteMany","ReadOnlyMany"]
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  persistentvolumeReclaimPolicy: Retain
  nfs:
    server: 192 .168.1.199
    path: /vols/v5
#而后创建statefulset资源,绑定使用pv
定义好statefulset
apiVersion: v1
kind: Service #定义好前端service
metadata:
  name: myapp-sts-svc
  namespace: sts
  labels:
    app: myapp
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: myapp-pod
    containers: sts
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-demo
  namespace: sts
spec:
  selector:
    matchLabels:
      app: myapp-pod
      containers: sts
  serviceName: "myapp-sts-svc"
  replicas: 2 #pod副本数量
  template:#pod模板
    metadata:
      labels:
        app: myapp-pod
        containers: sts
    spec:
      terminationGracePeriodSeconds: 10#删除pod时长
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myapp-pvc
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:#定义好pvc资源模板
  - metadata:
      name: myapp-pvc #pvc名称
      namespace: sts #所属名称空间
    spec:
      accessModes: [ "ReadWriteOnce" ] #访问模型为单路读写
      resources: #请求占用多少资源
        requests:
          storage: 2Gi
												
											k8s之Configmap与Secret的更多相关文章
- k8s之configmap和secret
		
1.configmap configmap和secret是两种特殊的存储卷,它们不是给pod提供存储空间用的,而是给管理员或者用户提供了从外部向pod内部注入信息的方式. configmap:把配置文 ...
 - 容器编排系统K8s之ConfigMap、Secret资源
		
前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...
 - k8s env、configmap、secret外部数据加载配置
		
K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量.ConfigMap以及Secret的使用和配置. 环境变量 在docker项目中,对一个容器添加环境变量可以在容器创建时通过-e EN ...
 - kubernetes系列12—二个特色的存储卷configmap和secret
		
本文收录在容器技术学习系列文章总目录 1.configmap 1.1 认识configmap ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件.ConfigMa ...
 - kubernetes ConfigMap和Secret:配置应用程序
		
7.1.配置容器化应用程序 7.2.向容器传递命令行参数 7.2.1.待Docker中定义命令与参数 1.了解ENTRYPOINT与CMD ENTRYPOINT定义容器启动时被调用的可以执行程序 CM ...
 - 九,configMap及secret的基本使用
		
目录 制定容器配置的方式 configMap(存储数据为明文,敏感数据慎用) 创建configMap的几种方式 命令行创建和测试configMap实例 创建一个Pod 挂载测试 通过指定文件创建con ...
 - spring-cloud-kubernetes与k8s的configmap
		
本文是<spring-cloud-kubernetes实战系列>的第六篇,主要内容是在kubernetes上部署一个java web应用,该应用使用了spring-cloud-kubern ...
 - 使用kubeseal加密和管理k8s集群的secret
		
使用kubeseal加密和管理k8s集群的secret 在k8s的管理过程中,像secret这种资源并不好维护,kubeseal提供了一种相对简单的方式来对原始secret资源进行加密,并通过控制器进 ...
 - 3.k8s存储之ConfigMap、Secret
		
1.ConfigMap ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.ConfigMap API 给我们提供了向容器 ...
 
随机推荐
- 【GMT43智能液晶模块】例程十七:LAN_UDP实验——以太网数据传输
			
源代码下载链接: 链接:https://pan.baidu.com/s/1CXeIohlqs7OjrgC9-QZjzg 提取码:be3d 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...
 - RabbitMQ的应用总结
			
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准 ...
 - ios评分功能实现
			
/** * 只能评分,不能编写评论 * 有次数限制,一年只能使用三次 * 使用次数超限后,需要跳转appstore */ - (IBAction)systemComentBtnAction:( ...
 - 双写mq后碰到没有消费问题记录
			
上周双写mq后碰到遇到个问题,mq双写的一台机器有produce,另一台一直没有,但是有的那台机器没有消费者,导致另一个服务 一直没有可以消费的mq.原因是 mq在双写初始化配置的时候两个类文件重复了 ...
 - 恋恋山城 Jean de Florette (1986) 男人的野心 / 弗洛莱特的若望 / 让·德·弗罗莱特 / 水源 下一部 甘泉,玛侬
			
<让·德·弗洛莱特>电影剧本 文/[法]马赛尔·巴涅尔译/苏原 编者按:<让·德·弗洛莱特>和<甘泉,玛侬>是根据法国著名作家马赛尔·巴涅尔的同名小说改编的电影.马 ...
 - 大数据分析常用去重算法分析『Bitmap 篇』
			
大数据分析常用去重算法分析『Bitmap 篇』 mp.weixin.qq.com 去重分析在企业日常分析中的使用频率非常高,如何在大数据场景下快速地进行去重分析一直是一大难点.在近期的 Apache ...
 - 【C/C++开发】C++11的模板类型判断——std::is_same和std::decay
			
C++11的模板类型判断--std::is_same和std::decay 问题提出:有一个模板函数,函数在处理int型和double型时需要进行特殊的处理,那么怎么在编译期知道传入的参数的数据类型是 ...
 - Android EditText禁止回车换行
			
在做一个登录页面的时候,发现了输入手机号的EditText可以输入回车的bug,影响用户体验,在此分享下解决办法. 百度了很多,都是设置singline=true的或者设置maxLines=" ...
 - 手把手教你创建electron+vue项目
			
electron可以结合前端的很多框架来进行快速的开发.在这里只讲一种electron结合vue并且使用前端的elementui来快速搭建一个项目页面. 第一步.创建electron 以管理员身份运行 ...
 - [转帖]POW , POS 与 DPOS 一切都为了共识
			
POW , POS 与 DPOS 一切都为了共识 https://www.jianshu.com/p/f99e8fe57c9a 共识机制的背景 加密货币都是去中心化的,去中心化的基础就是P2P节点 ...