k8s的configMap基本概念及案例
pod中两种特殊类型的存储卷:secret,configMap
pod.spec.volumes.secret
pod.spec.volumes.configMap
多数情况下,这两个存储卷不是给pod做存储空间来用的,而是给我们的管理员或者用户提供了从集群外部向pod内部的应用注入配置信息的方式。
configMap里放的是配置信息
configMap的主要作用是:让配置信息与镜像文件结藕,配置信息可以通过configMap注入。
简单来讲,一个configMap就是一系列配置数据的集合,而这些数据将来可以注入到pod对象中的容器中,以供使用。
而注入方式有两种:1,直接把configMap当存储卷。2,使用env的envFrom应用configMap当中所保存的数据
在每一个configMap中所有的配置信息都保存为键值格式。
configMap属于名称空间级别的资源。
configMap里面的配置信息是明文的。
secret相对于configMap,功能上是相似的,但是secret是以其他编码方式去记录配置信息的,但是也可以被解读,只不过有技术门槛,不是那么容易就被解读的。
使用base64是可以解读的:echo ******** | base64 -d
********是kubectl describe secret secretName -o yaml中的值的编码
配置容器化应用的方式:
1.自定义命令行参数;
args:[ ]
2.把配置文件直接焙进镜像;
3.环境变量;
(1)Cloud Native的应用程序一般可直接通过环境变量加载配置;
(2)通过entrypoint脚本来预处理变量为配置文件中的配置信息;
4.存储卷;
pod资源环境变量的获取方式:
在pod中我们要想通过环境变量传递内容、传递数据、传递信息给pod中的容器
我们需要在容器上使用env、value、或valueFrom来获取数据;
在pod.spec.containers.env{name,value}/{valueFrom}
pod.spec.containers.env.valueFrom.{configMapKeyRef:configMap}/{fieldRef:引用配置文件的某个字段:metadata...}/{resourceFieldRef:资源限制}/{secretKeyRef:secret}
使用valueFrom方式获取配置的方式:
pod.spec.containers.env.valueFrom.configMapKeyRef
pod.spec.containers.env.valueFrom.secretKeyRef
kubectl create configMap configMapName --from-file=key1=file1url --from-file=keyN=fileNurl 此时以文件名为key,以文件内容为value
详情:kubectl create configmap --help
例:
创建一个pod,创建一个configMap,pod用env引用configMap定义的key和value。
1.先创建configMap
kubectl create cm cm- --from-literal=nginx_port= --from-literal=server_name=myapp.smbands.com
kubectl describe cm cm-
Name: cm-
Namespace: default
Labels: <none>
Annotations: <none> Data
====
nginx_port:
---- server_name:
----
myapp.smbands.com
Events: <none>
2.创建pod
vim myapp-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-demo
namespace: default
spec:
replicas:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort:
env:
- name: NGINX_SERVER_PORT
valueFrom:
configMapKeyRef:
name: cm-
key: nginx_port
- name: NGINX_SERVER_NAME
valueFrom:
configMapKeyRef:
name: cm-
key: server_name
3.运行pod查看env
kubectl apply -f myapp-pod.yaml
kubectl exec myapp-pod-5db6d54bb7-rjhkz -- printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=myapp-demo-5db6d54bb7-rjhkz
NGINX_SERVER_PORT=
NGINX_SERVER_NAME=myapp.smbands.com
当我们使用环境变量注入时,只在pod启动时加载生效
如上示例如果更改configMap中的key或value,容器中的env只会在重启容器时生效。
当然我们可以使用存储卷方式来实时获取configMap里的数据。
只不过存储卷方式,configMap挂载到pod中的某个目录下每个键成为文件名,对应值成为文件内容。也就是说,把configMap中的键值以文件方式挂载到pod中。
例:创建一个pod,创建一个configMap,pod使用挂载卷方式引用configMap里的主机配置内容,pod运行后可直接使用指定主机访问。
1.创建configMap:
vim www.config
server {
server_name myapp.smbands.com;
listen ;
root /data/web/html;
}
kubectl create cm cm- --from-file=www.conf
kubectl describe cm cm-
Name: cm-
Namespace: default
Labels: <none>
Annotations: <none> Data
====
www.conf:
----
server {
server_name myapp.smbands.com;
listen ;
root /data/web/html;
} Events: <none>
2.创建pod
vim myapp-pod-.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-
namespace: default
spec:
replicas:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort:
volumeMounts:
- name: wwwconf
mountPath: /etc/nginx/conf.d/
volumes:
- name: wwwconf
configMap:
name: cm-
3.启动pod,查看挂载点目录。
kubectl apply -f myapp-pod-.yaml
kubectl exec myapp--5b5fc74c6-jd2b7 -- cat /etc/nginx/conf.d/www.conf
server {
server_name myapp.smbands.com;
listen ;
root /data/web/html;
}
此时可以修改hosts文件,在发布路径下写测试页,然后就可以curl myapp.smbands.com
4.修改configMap cm-2的listen 80 为listen 8080
kubectl edit cm cm-2 修改80为8080
等待片刻,再查看
kubectl exec myapp--5b5fc74c6-jd2b7 -- cat /etc/nginx/conf.d/www.conf
server {
server_name myapp.smbands.com;
listen ;
root /data/web/html;
}
注意:这里储存卷挂载方式可以实时注入信息,但是不一定注入的信息都能生效。
比如此例,虽然cm-2修改为8080,pod中的配置文件也同步为8080,但是nginx的监听地址还是80,需要重载配置文件才能生效。
k8s的configMap基本概念及案例的更多相关文章
- k8s的secret基本概念及案例
secret相对于configMap,功能上是相似的但是secret是以其他编码方式去记录配置信息的,但是也可以被解读,只不过有技术门槛,不是那么容易就被解读.使用base64可以解码:echo ** ...
- 在k8s中的基本概念
在k8s中的基本概念 一.Pod1. podk8s下最重要也最基本的概念,由一个根容器Pause和许多用户业务容器组成,是容器的载体. 2. pod的yaml定义格式及字段 apiVersion: v ...
- js引出函数概念的案例
js引出函数概念的案例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...
- spring-cloud-kubernetes与k8s的configmap
本文是<spring-cloud-kubernetes实战系列>的第六篇,主要内容是在kubernetes上部署一个java web应用,该应用使用了spring-cloud-kubern ...
- ASP.NET Core基于K8S的微服务电商案例实践--学习笔记
摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...
- Shiro 安全框架详解二(概念+权限案例实现)
Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...
- Shiro 安全框架详解一(概念+登录案例实现)
shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...
- k8s 集群基本概念
一.概述: kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) ...
- OAF开发概念和案例总结(项目总结)
留看: 网上关于OAF学习的资料比较少,最近有些时间,整理了下自己在项目上的经验总结和同学们一下共享一下 和学友一起讨论一下OAF开发,还有两个比较复杂的系列正在整理中..... 一.OAF EO定义 ...
随机推荐
- Docker从入门到实战(一)
Docker从入门到实战(一) 一:容器技术与Docker概念 1 什么是容器 容器技术并不是一个全新的概念,它又称为容器虚拟化.虚拟化技术目前主要有硬件虚拟化.半虚拟化.操作系统虚拟化等.1.1关于 ...
- python3.6下安装wingIDE破解方法
1.wingIDE的下载: 在电脑配置好的python环境情况下,去官网下载wingIDE6,按照一般方式安装好.安装好它会自动提示你是否激活,你点击激活.然后到下一步. 2.脚本的制作: impor ...
- Python+Selenium----处理登录图片验证码
1.说明 在做自动化测试的时候,经常会遇到登录,其中比较麻烦的就是验证码的处理,现在比较常用的图形验证码,每次刷新,得到的验证码不一致,所以,一般来说,获取验证码图片有两种方式: (1)拿到验证码的图 ...
- RMAN restore fails with ORA-01180: can not create datafile 1 (文档 ID 1265151.1)
http://blog.itpub.net/26655292/viewspace-2131269/ ########Q&A issue1:ORA-01180: can not create d ...
- C# this索引器
- calendar 类 用法
add()和roll()区别 一.Calendar 月份从 0-11,要表示8月,应该传入7 . 二.set() 会自动转换为合法的日期,如 set(1999,8,31) 表示的是1999-09-3 ...
- 几种复杂度的斐波那契数列的Java实现
一:斐波那契数列问题的起源 13世纪初期,意大利数论家Leonardo Fibonacci在他的著作Liber Abaci中提出了兔子的繁殖问题: 如果一开始有一对刚出生的兔子,兔子的长大需要一个月, ...
- npm warn weex @1.0.0 no repository field
玩weex出现nmp安装问题总是包这个错,但是其实是安装成功的 npm warn weex@1.0.0 no repository field. 看字面意思大概是package.json里缺少repo ...
- 永洪BI——国内领军的一站式大数据分析平台
平台: CentOS 类型: 虚拟机镜像 软件包: jdk-7.79-linux yonghongbi.sh basic software big data business intelligence ...
- 更新浏览器,导致编写脚本报错Message: Unable to find a matching set of capabilities
卸载更新浏览器后,所编写的脚本无法运行,报如下的错误:selenium.common.exceptions.WebDriverException: Message: Unable to find a ...