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定义 ...
随机推荐
- py---------网络编程
一.软件开发架构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访 ...
- 记录一个调试REST风格的web服务的client
coogle浏览器的advanced rest client很好用,记录一下,脑子不好,容易忘,,可以在chrome 的网上应用店添加 Rest client是用来调试REST风格的Web服务,接收P ...
- Spring自动注入有关的注解
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. 1,@Comp ...
- 原型设计工具 Axure RP 7.0下载地址及安装说明
Axure RP是产品经理必备的原型制作工具,因为很多同学是新手,在这里整理一下axure7.0的下载.安装和汉化流程,希望能够帮到大家. Axure RP是美国Axure Software Solu ...
- 汇编debug
R:查看.改变CPU寄存器的内容 D:查看内存中的内容 E:改写内存中的内容 U:将内存中的机器指令翻译成汇编指令 T:执行一条机器指令 A:以汇编指令的格式在内存中写入一条机器指令 第一步:先是[开 ...
- 使用Foxfly.Net读取STEP文件
Foxfly.Net是具备基本的几何建模和CAD文件读取功能.本文主要介绍读取STP/STEP文件的使用方法. 1.初始化 项目中引入FoxflyNet.dll程序集,在Program.cs中初始化建 ...
- js中的load先执行还是Jquery的ready先执行问题
onload需要页面上所有的资源都加载上之后执行,而ready则是DOM文档树已经解析完成时,说ready比onload快最显著的是比如一个页面上有一个很大的图片,加载要好久,onload只有在图片加 ...
- spring ehcache 使用详解
Spring 整合 Ehcache 管理缓存详解 yellowbutterfly 前言 Ehcache 是一个成熟的缓存框架,你可以直接使用它来管理你的缓存. Spring 提供了对缓存功能的抽象: ...
- 【前端】Chrome DevTools 笔记
1. 查看网络耗时 timeline 生命周期按照以下类别显示花费的时间: Queuing Stalled 如果适用:DNS lookup.initial connection.SSL handsha ...
- Java图形界面开发—简易记事本
在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: ...