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

本文收录在容器技术学习系列文章总目录

1、configmap

1.1 认识configmap

  ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMapsecret很类似,但它可以更方便地处理不包含敏感信息的字符串。

 

1.2 创建configmap

1.2.1 通过命令行

创建一个名为nginx-configconfigmap,指定端口和server name

[root@master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.along.com
configmap/nginx-config created
[root@master ~]# kubectl get cm
NAME           DATA      AGE
nginx-config   2         11s
[root@master ~]# kubectl describe cm nginx-config
Name:         nginx-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
nginx_port:
----
80
server_name:
----
myapp.along.com
Events:  <none>

  

1.2.2 通过文件

1)准备文件

[root@master ~]# mkdir configmap
[root@master ~]# cd configmap
[root@master configmap]# vim www.conf
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}

  

2)创建查询认证

[root@master configmap]# kubectl create configmap nginx-www --from-file=./www.conf
configmap/nginx-www created
[root@master configmap]# kubectl get cm
NAME           DATA      AGE
nginx-config   2         3m
nginx-www      1         5s
[root@master configmap]# kubectl describe cm nginx-www
Name:         nginx-www
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
www.conf:
----
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}Events:  <none>

  

1.3 创建pod使用configmap

1.3.1 pod通过环境变量使用configmap

通过使用环境变量传入podconfigmap,不能实时更新

1)编写configmapyaml文件

[root@master configmap]# vim pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-cm-1namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80env:- name: NGINX_SERVER_PORTvalueFrom:configMapKeyRef:name: nginx-configkey: nginx_port- name: NGINX_SERVER_NAMEvalueFrom:configMapKeyRef:name: nginx-configkey: server_name

  

2)创建pod,查询认证

[root@master configmap]# kubectl apply -f pod-configmap.yaml
pod/pod-cm-1 created
[root@master configmap]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
pod-cm-1                        1/1       Running   0          41s
---查询pod内部变量
[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVER
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.along.com

  

3)通过环境变量导入configmap,修改configmap后,pod中内容不会更改

使用edit修改configmap,把nginx_port 80改为8080

[root@master configmap]# kubectl edit cm nginx-config
... ...nginx_port: "8080"     #把80改为8080
... ...
configmap/nginx-config edited

查询,configmap被修改,但是pod中变量并未修改

因为configmap只是在容器启动时加载生效;现在pod已经创建,再修改,不会生效

------cm已经修改------
[root@master configmap]# kubectl describe cm nginx-config   
Data
====
nginx_port:
----
8080
server_name:
----
myapp.along.com
Events:  <none>
------但是pod实际没有改变------
[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVER   
NGINX_SERVER_PORT=80
NGINX_SERVER_NAME=myapp.along.com

  

1.3.2 pod通过存储卷使用configmap

通过使用存储卷传入podconfigmap,可以实时更新

1)编写configmapyaml文件,并创建configmap

创建一个volume,使用上边创建好的名为nginx-configconfigmap

[root@master configmap]# vim pod-configmap-2.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-cm-2namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:volumes:- name: nginxconfconfigMap:name: nginx-configcontainers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80volumeMounts:- name: nginxconfmountPath: /etc/nginx/config.d/readOnly: true
[root@master configmap]# kubectl apply -f pod-configmap-2.yaml
pod/pod-cm-2 created

  

2)登入pod中,查询验证

[root@master configmap]# kubectl get pods
NAME       READY     STATUS    RESTARTS   AGE
pod-cm-2   1/1       Running   0          7s
[root@master ~]# kubectl exec -it pod-cm-2 -- /bin/sh
/ # cd /etc/nginx/config.d/
/etc/nginx/config.d # ls
nginx_port   server_name
/etc/nginx/config.d # cat nginx_port
80
/etc/nginx/config.d # cat server_name 
myapp.along.com

  

3)通过环境变量导入configmap,修改configmap后,pod中内容会更改

使用edit修改configmap,把nginx_port 80改为8080

[root@master ~]# kubectl edit cm nginx-config
apiVersion: v1
data:nginx_port: "8080" server_name: myapp.along.com
... ...
configmap/nginx-config edited

再登入pod查看,发现已经改变

[root@master ~]# kubectl exec -it pod-cm-2 -- /bin/sh
/ # cat /etc/nginx/config.d/nginx_port 
8080/

  

1.4 一个完整的configmap的应用实例

1.4.1 编写创建podyaml文件,使用nginx-wwwconfigmap

[root@master configmap]# vim pod-configmap-3.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-cm-3namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:volumes:- name: nginxconfconfigMap:name: nginx-wwwcontainers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80volumeMounts:- name: nginxconfmountPath: /etc/nginx/conf.d/readOnly: true

  

1.4.2 创建pod

[root@master configmap]# kubectl apply -f pod-configmap-3.yaml
pod/pod-cm-3 created
[root@master configmap]# kubectl get pods
NAME       READY     STATUS    RESTARTS   AGE
pod-cm-3   1/1       Running   0          24s

  

1.4.3 登入pod,查询配置是否成功

[root@master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
/ # cat /etc/nginx/conf.d/www.conf 
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}
/ # nginx -T |tail -7      #-T查询nginx的配置信息
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/conf.d/www.conf:
server {server_name myapp.along.com;listen 80;root /data/web/html/;
}
---生成nginx的主页内容
/ # mkdir -p /data/web/html
/ # vi /data/web/html/index.html
<h1>Nginx Server configured by CM</h1>

  

1.4.4 在其他节点访问,验证是否成功

1)在master上新开一个窗口,查询pod对应的IP

[root@master ~]# kubectl get pods -o wide
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
pod-cm-3                        1/1       Running   0          7m        10.244.1.124  node2

  

2)在任意节点上配置host,使其能连通此pod

[root@node1 ~]# vim /etc/hosts
10.244.1.124 myapp.along.com

  

3)访问pod,成功

[root@node1 ~]# curl myapp.along.com    
<h1>Nginx Server configured by CM</h1>	

  

1.4.5 通过修改configmap,修改podnginx服务的端口

1)修改configmap的配置,将nginx的端口由80改为8888

[root@master ~]# kubectl edit cm nginx-www
apiVersion: v1
data:www.conf: "server {\n\tserver_name myapp.along.com;\n\tlisten 8888;\n\troot /data/web/html/;\n}\n"
... ...
configmap/nginx-www edited

  

2)在pod内还需要重载nginx配置(现在是手工操作,后面会使用k8s工具完成)

/ # cat /etc/nginx/conf.d/www.conf     查询configmap的修改是否生效
server {server_name myapp.along.com;listen 8888;root /data/web/html/;
}
/ # nginx -s reload  重载一下nginx配置
2019/02/25 02:32:00 [notice] 16#16: signal process started

  

3)在node节点上访问验证,成功

[root@node1 ~]# curl myapp.along.com:8888
<h1>Nginx Server configured by CM</h1>	

 

2、secret

2.1 认识secret

  •  Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。将这些信息放在 secret 中比放在 pod 的定义或者 docker 镜像中来说更加安全和灵活。
  •  Secret 是一种包含少量敏感信息例如密码、token key 的对象。这样的信息可能会被放在 Pod spec 中或者镜像中;将其放在一个 secret 对象中可以更好地控制它的用途,并降低意外暴露的风险。
  •  用户可以创建 secret,同时系统也创建了一些 secret
  •  要使用 secretpod 需要引用 secretPod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet pod 拉取镜像时使用。
  •  Secret有三种类型:
    •  Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod/run/secrets/kubernetes.io/serviceaccount目录中;
    •  Opaquebase64编码格式的Secret,用来存储密码、密钥等;
    •  kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。

 

2.2 创建一个secret

---创建secret
[root@master ~]# kubectl create secret generic mysql-root-passwd --from-literal=password=MyP@ss123
secret/mysql-root-passwd created
---查询secret信息
[root@master ~]# kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-wjbzf   kubernetes.io/service-account-token   3         35d
mysql-root-passwd     Opaque                                1         11s
---查询详细信息
[root@master ~]# kubectl describe secret mysql-root-passwd
Name:         mysql-root-passwd
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
password:  9 bytes    #已经进行64位加密
---以yaml文件显示信息
[root@master ~]# kubectl get secret mysql-root-passwd -o yaml
apiVersion: v1
data:password: TXlQQHNzMTIz
kind: Secret
metadata:creationTimestamp: 2018-10-10T03:14:04Zname: mysql-root-passwdnamespace: defaultresourceVersion: "436965"selfLink: /api/v1/namespaces/default/secrets/mysql-root-passwduid: 8adbf6ae-cc3a-11e8-bb48-005056277243
type: Opaque
---解密
[root@master ~]# echo TXlQQHNzMTIz |base64 -d
MyP@ss123

  

2.3 通过secretpod注入环境变量

1)编写yaml文件,创建pod

[root@master configmap]# vim pod-secret-1.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-secret-1namespace: defaultlabels:app: myapptier: frontendannotations:along.com/created-by: "cluster admin"
spec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80env:- name: MYSQL_ROOT_PASSWDvalueFrom:secretKeyRef:name: mysql-root-passwdkey: password
[root@master configmap]# kubectl apply -f pod-secret-1.yaml
pod/pod-secret-1 created

  

2)查询并认证

[root@master configmap]# kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
pod-secret-1                    1/1       Running   0          14s
---验证,查询pod中的环境变量,筛选出MYSQL_ROOT_PASSWD
[root@master configmap]# kubectl exec pod-secret-1 -- printenv |grep MYSQL
MYSQL_ROOT_PASSWD=MyP@ss123

  

转载于:https://www.cnblogs.com/along21/p/10435468.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为完成拉美铜网宽带G.fast技术部署测试

1/11/2016,英国大东通信巴拿马分公司日前与华为公司发布消息称&#xff0c;覆盖拉丁美洲地区的最快铜缆宽带服务系统成功完成初次测试。 作为巴拿马地区领先的移动宽带服务提供商&#xff0c;大东通信巴拿马分公司也是当地最大的电信服务提供商&#xff0c;此次与华为合作在现有…

kotlin调用类中的方法_一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用

kotlin调用类中的方法by Oleksii Fedorov通过Oleksii Fedorov 一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用 (A stress-free way to test frustrating static method calls in Kotlin) Let me make a wild guess… You have encountered some code in Kotlin that is …

python图像加密模块_使用Pycryp的图像加密和解密

这和加密或解密文本是一样的。示例首先导入一些模块&#xff1a;from Crypto.Cipher import AESfrom Crypto import Random然后&#xff0c;让我们生成一个键和一个初始化向量。key Random.new().read(AES.block_size)iv Random.new().read(AES.block_size)加密下面的代码加载…

遇到attemp to invoke virtual method

这个很大原因是没有预先初始化sdk&#xff0c;检查application的配置是否配置了application&#xff1a;name 转载于:https://www.cnblogs.com/caimuqing/p/5894099.html

app启动页自动跳转源码_关于移动端App启动页的策划方案

App启动页是指app在启东时需要加载必要的运行环境和配置&#xff0c;在这个过程中提示用户等待的一个过渡页面。在产品经理眼里启动页是app给予用户重要的第一印象&#xff1b;也是App最重要的黄金页面之一&#xff0c;所有用户100%都会看到的页面。启动页适合用来做以下几个事…

电信运营商占IDC市场65%:中国电信占行业半数以上

随着云计算、大数据的快速发展&#xff0c;作为重要基础设施的IDC数据中心也在高速扩张。 近日&#xff0c;DCA常务理事长何宝宏介绍&#xff0c;我国规划在建数据中心共计246个&#xff0c;总设计机架数约为103万个&#xff0c;总设计服务器规模约1326万台。在用超大型、大型数…

Python 日期和时间戳的转换

Python 日期和时间戳的转换 1. Python中处理时间的模块 Python中处理时间的模块有time、datetime和calendar。 在Python中表示时间的方式&#xff1a; 时间戳&#xff1a;10位整数位和若干小数位&#xff0c;例如 1551153156.6358607元组&#xff08;struct_time&#xff09;: …

快应用比赛_我的应用如何在国际学生比赛中获得第三名

快应用比赛by Rafael Melo通过拉斐尔梅洛 我的应用如何在国际学生比赛中获得第三名 (How my App won third place in an International Student Competition) I developed an App that won third place at the IEEE Mobile Applications Development Contest 2017 (IEEEmadC 2…

JAVA中String类的intern()方法的作用

一般我们变成很少使用到 intern这个方法&#xff0c;今天我就来解释一下这个方法是干什么的&#xff0c;做什么用的 首先请大家看一个例子&#xff1a; public static void main(String[] args) throws Exception { String a "b" ; String b "b" ; …

java 如何排查内存溢出_java 内存溢出排查

测试代码&#xff0c;如下示例&#xff1a;import java.util.ArrayList;import java.util.List;/*** Description 测试内存溢出, 启动时设置参数&#xff0c;最大堆内存为1m, 内存溢出时dump出内存文件 -Xmx1m -XX:HeapDumpOutOfMemoryError* Author luzy* Date 2018/10/5 11:0…

《企业级ios应用开发实战》一2.2 iOS框架介绍

2.2 iOS框架介绍 iOS衍生自Mac OS X的成熟内核&#xff0c;但iOS操作系统更紧凑和高效&#xff0c;支持iPhone和iPod Touch的硬件。iOS继承了Mac OS X的风格&#xff0c;包括&#xff1a;统一的OS X 内核&#xff0c;针对网络的BSD套接字&#xff0c;以及Objective-C和C/C编译器…

python的opencv 车牌识别 开源_毕节进出口车牌识别系统怎么样

毕节进出口车牌识别系统怎么样 gzheu8il毕节进出口车牌识别系统怎么样 系统拓扑图如下&#xff1a;该系统以社区中心机房为枢纽&#xff0c;有机的将智慧家居住户、社区数字化服务、物业数字化管理、社区智能化管理结合起来&#xff0c;真正的实现&#xff1a;住户与住户之间的…

了解使用JavaScript进行面向对象编程的基础(并增强您的编码…

by Kris Baillargeon通过克里斯拜伦 学习使用JavaScript进行面向对象编程的基础知识(并增强您的编码能力&#xff01;) (Learn the basics of object-oriented programming with JavaScript (and supercharge your coding abilities!)) As a moderator of the freeCodeCamp ch…

postgresql的别名要用双引号才可以

postgresql的别名要用双引号""才可以 转载于:https://www.cnblogs.com/handsome1013/p/10443001.html

imx6 mac地址设置

imx6的mac地址总是固定的值&#xff0c;所以需要更改&#xff0c;采用的方法是在uboot中设置环境变量,之后在kernel中使用uboot中设置的mac地址的值。本文记录更改的过程。 参考链接&#xff1a; http://www.cnblogs.com/zengjfgit/p/5711304.html uboot lib_arm/board.c …

java try catch陷阱_Java异常处理最佳实践及陷阱防范

原标题&#xff1a;Java异常处理最佳实践及陷阱防范出自《深夜里的程序猿》作者&#xff1a;wangzenghuang前言不管在我们的工作还是生活中&#xff0c;总会出现各种“错误”&#xff0c;各种突发的“异常”。无论我们做了多少准备&#xff0c;多少测试&#xff0c;这些异常总会…

vivo手机怎么投屏到电脑_投屏软件电脑加手机投屏软件投屏

优秀的资源工具可以让你事半功倍&#xff01;本号文内资源已经手工转存整理&#xff0c;安全起见&#xff0c;回复 “领取资源” 按提示自助领取。今天分享的是一家公司出品的投屏神器。为避免被举报这里就不说出软件名了。它可以在局域网内把手机的屏幕投到电脑上&#xff0c;…

How to upload windows Sysprep Files to VMware vCenter Server Appliance 6.5(vC

vCSA5.5中可以登录到端口5480中去上传&#xff0c;vCSA 6.0以后就不支持了。但是可以通过Enable “Pi Shell”来做。 首先确保vCSA的ssh可用&#xff1a; 0. Make sure that SSH in enabled on the VCSA. Home > Administration > System configuration (under Deploymen…

开源短地址_如何在短短5分钟内完成您的第一个开源贡献

开源短地址by Roshan Jossey罗珊乔西(Roshan Jossey) 如何在短短5分钟内完成您的第一个开源贡献 (How to make your first open source contribution in just 5 minutes) The best way to level up your programming skills it to code more. The second best thing is to rea…

【Qt开发】QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent

建了一个对话框&#xff0c;我不想把边框去掉&#xff0c;只想去掉关闭按钮&#xff0c; setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint); 结果那个问号的按钮去掉了&#xff0c;但是关闭按钮还在&#xff0c;求助啊 set…