1.configmap

configmap和secret是两种特殊的存储卷,它们不是给pod提供存储空间用的,而是给管理员或者用户提供了从外部向pod内部注入信息的方式.

configmap:把配置文件放在配置中心上,然后多个pod读取配置中心的配置文件,不过,configmap中的配置信息都是明文的,所以不安全;

secret:功能和configmap一样,只不过配置中心存储的配置文件不是明文的.configmap和secret也是专属于某个名称空间的.

# 用命令行创建configmap
kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.lixiang.com
kubectl describe cm nginx-config
# 用清单方式创建configmap
mkdir configmap && cd configmap
cat www.conf
server {
server_name myapp.lixiang.com;
listen 80;
root /data/web/html;
} kubectl create configmap nginx-www --from-file=www.conf
# 用ENV方式把configmap的配置信息注入到pod中
cat pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cm-1
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
env:
- name: NGINX_SERVER_PORT
valueFrom: # kubectl explain pods.spec.containers.env.valueFrom
configMapKeyRef: # 表示要引用一个configmap来获取数据
name: nginx-config # configmap的名字
key: nginx_port # 通过kubectl describe cm nginx-config的键
- name: NGINX_SERVER_NAME
valueFrom:
configMapKeyRef:
name: nginx-config
key: server_name kubectl apply -f pod-configmap.yaml
kubectl exec -it pod-cm-1 -- /bin/sh
# printenv
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.lixiang.com
# 通过edit方式修改configmap的配置文件,在Pod里面不会立即生效,需要重启pod才能生效
kubectl edit cm nginx-config
# 用存储卷的方法把configmap注入到pod中
cat pod-configmap2.ymal
apiVersion: v1
kind: Pod
metadata:
name: pod-cm-2
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
volumeMounts:
- name: nginxconf
mountPath: /etc/nginx/conf.d/
readOnly: true
volumes:
- name: nginxconf
configMap:
name: nginx-config kubectl apply -f pod-configmap2.ymal
# 进入pod,可以看到configmap中的键值对,在/etc/nginx/conf.d/下以文件形式存在
# 把www.conf文件注入到pod中
cat pod-configmap3.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cm-3
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
volumeMounts:
- name: nginxconf
mountPath: /etc/nginx/conf.d/
readOnly: true
volumes:
- name: nginxconf
configMap:
name: nginx-www
kubectl apply -f pod-configmap3.yaml
kubectl exec -it pod-cm-3 -- /bin/sh
/ # cd /etc/nginx/conf.d/
/etc/nginx/conf.d # ls
www.conf
/etc/nginx/conf.d # cat www.conf
server {
server_name myapp.lixiang.com;
listen 80;
root /data/web/html;
}
# 修改端口,pod中的配置文件同样会发生变化
kubectl edit cm nginx-www

2.secret

secret功能和configmap一样,只不过secret配置中心存储的配置文件不是明文的,一般将连接数据库的密码、私钥等写在secret中.

kubectl create secret --help

generic:保存密码;

tls:保存私钥、证书;

docker-registry:保存docker认证信息,比如从私有docker仓库拉镜像时,就用这个类型,k8s拖镜像的进程是kublet.

# 如果从私有仓库拉镜像,就用imagePullSecrets存登录验证的信息
kubectl explain pods.spec.imagePullSecrets
kubectl create secret docker-registry LXregsecret --docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=xx --docker-password=xxxxxx --docker-email=xx
LXregsecret:指定secret的名字,可自行定义;--docker-email:邮件地址(选填)
该密钥只能在对应namespace使用,也就是这里的default,如果需要在其他namespace中用到,需要在创建时指定名称空间
containers:
- name: channel
image: registry-internal.cn-hangzhou.aliyuncs.com/yin32167/channel:dev-1.0
ports:
- containerPort: 8114
imagePullSecrets:
- name: LXregsecret
#
# 好像也可以这么创建,bash64 -wo 代表以64位转码展示并且不换行
cat .docker/config.json |base64 -w0
cat docker-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: registrypullsecret
data:
.dockerconfigjson: 加密串
type: kubernetes.io/dockerconfigjson # password的内容会以base64的形式加密
kubectl create secret generic mysql-root-password --from-literal=password=123456
kubectl describe secret mysql-root-password
kubectl get secret mysql-root-password -o yaml
# 用base64进行解码
echo MTIzNDU2 |base64 -d # 把secret通过env的方式注入到pod里面
cat pod-secret-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-secret-1
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
kubectl apply -f pod-secret-1.yaml
kubectl exec -it pod-secret-1 -- /bin/sh
# printenv
MYSQL_ROOT_PASSWORD=123456
secret还可以用mount的方式注入pod中

参考博客:http://blog.itpub.net/28916011/viewspace-2214804/

在kubernetes集群中部署nginx+mysql+php应用:https://blog.csdn.net/bbwangj/article/details/82954187

kubernetes小课堂:https://k.i4t.com/

k8s之configmap和secret的更多相关文章

  1. 容器编排系统K8s之ConfigMap、Secret资源

    前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...

  2. k8s之Configmap与Secret

    ConfigMap:k8s标准资源,将配置文件做成k8s资源,使其它资源可加载其中配置 Secret:实现加密功能的安全配置文件.由多个key:val中组成 创建configmap资源,可直接使用ku ...

  3. k8s env、configmap、secret外部数据加载配置

    K8s提供了多种外部数据注入容器的方式,今天我们主要学习环境变量.ConfigMap以及Secret的使用和配置. 环境变量 在docker项目中,对一个容器添加环境变量可以在容器创建时通过-e EN ...

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

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

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

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

  6. 九,configMap及secret的基本使用

    目录 制定容器配置的方式 configMap(存储数据为明文,敏感数据慎用) 创建configMap的几种方式 命令行创建和测试configMap实例 创建一个Pod 挂载测试 通过指定文件创建con ...

  7. spring-cloud-kubernetes与k8s的configmap

    本文是<spring-cloud-kubernetes实战系列>的第六篇,主要内容是在kubernetes上部署一个java web应用,该应用使用了spring-cloud-kubern ...

  8. 使用kubeseal加密和管理k8s集群的secret

    使用kubeseal加密和管理k8s集群的secret 在k8s的管理过程中,像secret这种资源并不好维护,kubeseal提供了一种相对简单的方式来对原始secret资源进行加密,并通过控制器进 ...

  9. 3.k8s存储之ConfigMap、Secret

    1.ConfigMap ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.ConfigMap API 给我们提供了向容器 ...

随机推荐

  1. ACM之路(16)—— 数位DP

    题目就是kuangbin的数位DP. 先讲C题,不要62,差不多就是一个模板题.要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值 ...

  2. 在CUDA8.0下指定位置编译安装OpenCV3.1.0来实现GPU加速(Compiling OpenCV3.1.0 with CUDA8.0 support)

    在CUDA8.0下指定位置编译安装OpenCV3.1.0 一.本人电脑配置:ubuntu 14.04, NVIDIA GTX1060. 二.编译OpenCV3.1.0前,读者需要成功安装CUDA8.0 ...

  3. Dubbo API 笔记——Dubbo架构与使用

    转载于: https://blog.csdn.net/benhuo931115/article/details/78457149 架构演变 单一应用架构 所有功能部署在一个应用上,用于简化增删改查工作 ...

  4. VMware Workstation 与 Device/Credential Guard 不兼容

    之前在本机搭建Docker for Windows的时候,启用了win10自带的虚拟Hyper-V,但是win10的虚拟与VMware Workstation的虚拟有冲突,运行VMware Works ...

  5. SpringBoot ErrorController 实践

    SpringBoot的默认异常处理映射为“/error”.BasicErrorController已经默认实现了“text/html”的处理,如果想返回自定义JSON格式信息,则实现“ErrorCon ...

  6. Python - selectors 模块

    selectors 模块 它的功能与 linux 的 epoll,还是 select 模块,  poll 等类似: 实现高效的 I/O multiplexing ,  常用于非阻塞的 socket  ...

  7. php缓存加速优化--Xcache

    1.安装软件:cd /usr/local/src/下载软件包wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache- 3.2.0.tar.b ...

  8. mac被锁有pin码的解锁方法

    停用规律: 错误5次密码停用1分钟 再错误3次停用5分钟 在错误1次就停用15分钟 再错误1次就是60分钟了,而且还没输入框了,这时候我们要通过按 option,commond这2个按钮来唤起输入框 ...

  9. 手写web框架之加载配置项目

    一  定义框架配置项 在项目的src/main/resources目录下创建一个名为smart.propertiesd的文件,文件的内容如下: smart.framework.jdbc.driver= ...

  10. spring-kafka —— 生产者消费者重要配置

    一.生产者配置 # 以逗号分隔的主机:端口对列表,用于建立与Kafka群集的初始连接 spring.kafka.producer.bootstrap-servers=TopKafka1:9092,To ...