1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > kubernetes系列12—二个特色的存储卷configmap和secret

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

时间:2023-06-12 23:19:00

相关推荐

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

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

1、configmap

1.1 认识configmap

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

1.2 创建configmap

1.2.1 通过命令行

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

[root@master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=configmap/nginx-config created[root@master ~]# kubectl get cmNAME DATAAGEnginx-config 2 11s[root@master ~]# kubectl describe cm nginx-configName: nginx-configNamespace: defaultLabels: <none>Annotations: <none>Data====nginx_port:----80server_name:----Events: <none>

1.2.2 通过文件

(1)准备文件

[root@master ~]# mkdir configmap[root@master ~]# cd configmap[root@master configmap]# vim www.confserver {server_name ;listen 80;root /data/web/html/;}

(2)创建查询认证

[root@master configmap]# kubectl create configmap nginx-www --from-file=./www.confconfigmap/nginx-www created[root@master configmap]# kubectl get cmNAME DATAAGEnginx-config 2 3mnginx-www1 5s[root@master configmap]# kubectl describe cm nginx-wwwName: nginx-wwwNamespace: defaultLabels: <none>Annotations: <none>Data====www.conf:----server {server_name ;listen 80;root /data/web/html/;}Events: <none>

1.3 创建pod使用configmap

1.3.1 pod通过环境变量使用configmap

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

(1)编写configmap的yaml文件

[root@master configmap]# vim pod-configmap.yamlapiVersion: v1kind: Podmetadata:name: pod-cm-1namespace: defaultlabels:app: myapptier: frontendannotations:/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.yamlpod/pod-cm-1 created[root@master configmap]# kubectl get podsNAME READYSTATUS RESTARTS AGEpod-cm-1 1/1 Running 041s---查询pod内部变量[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVERNGINX_SERVER_PORT=80NGINX_SERVER_NAME=

(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:----8080server_name:----Events: <none>------但是pod实际没有改变------[root@master configmap]# kubectl exec -it pod-cm-1 -- printenv |grep NGINX_SERVER NGINX_SERVER_PORT=80NGINX_SERVER_NAME=

1.3.2 pod通过存储卷使用configmap

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

(1)编写configmap的yaml文件,并创建configmap

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

[root@master configmap]# vim pod-configmap-2.yamlapiVersion: v1kind: Podmetadata:name: pod-cm-2namespace: defaultlabels:app: myapptier: frontendannotations:/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.yamlpod/pod-cm-2 created

(2)登入pod中,查询验证

[root@master configmap]# kubectl get podsNAME READYSTATUS RESTARTS AGEpod-cm-2 1/1 Running 07s[root@master ~]# kubectl exec -it pod-cm-2 -- /bin/sh/ # cd /etc/nginx/config.d//etc/nginx/config.d # lsnginx_port server_name/etc/nginx/config.d # cat nginx_port80/etc/nginx/config.d # cat server_name

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

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

[root@master ~]# kubectl edit cm nginx-configapiVersion: v1data:nginx_port: "8080" server_name: ... ...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 编写创建pod的yaml文件,使用nginx-www的configmap

[root@master configmap]# vim pod-configmap-3.yaml apiVersion: v1kind: Podmetadata:name: pod-cm-3namespace: defaultlabels:app: myapptier: frontendannotations:/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.yamlpod/pod-cm-3 created[root@master configmap]# kubectl get podsNAME READYSTATUS RESTARTS AGEpod-cm-3 1/1 Running 024s

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 ;listen 80;root /data/web/html/;}/ # nginx -T |tail -7#-T查询nginx的配置信息nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful# configuration file /etc/nginx/conf.d/www.conf:server {server_name ;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 wideNAME READYSTATUS RESTARTS AGE IP NODEpod-cm-3 1/1 Running 07m 10.244.1.124 node2

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

[root@node1 ~]# vim /etc/hosts10.244.1.124

(3)访问pod,成功

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

1.4.5 通过修改configmap,修改pod内nginx服务的端口

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

[root@master ~]# kubectl edit cm nginx-wwwapiVersion: v1data:www.conf: "server {\n\tserver_name ;\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 ;listen 8888;root /data/web/html/;}/ # nginx -s reload 重载一下nginx配置/02/25 02:32:00 [notice] 16#16: signal process started

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

[root@node1 ~]# curl :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。要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为volume中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取镜像时使用。Secret有三种类型: Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;Opaque:base64编码格式的Secret,用来存储密码、密钥等;kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。

2.2 创建一个secret

---创建secret[root@master ~]# kubectl create secret generic mysql-root-passwd --from-literal=password=MyP@ss123secret/mysql-root-passwd created---查询secret信息[root@master ~]# kubectl get secretNAME TYPE DATAAGEdefault-token-wjbzf kubernetes.io/service-account-token 3 35dmysql-root-passwdOpaque 1 11s---查询详细信息[root@master ~]# kubectl describe secret mysql-root-passwdName: mysql-root-passwdNamespace: defaultLabels: <none>Annotations: <none>Type: OpaqueData====password: 9 bytes #已经进行64位加密---以yaml文件显示信息[root@master ~]# kubectl get secret mysql-root-passwd -o yamlapiVersion: v1data:password: TXlQQHNzMTIzkind: Secretmetadata:creationTimestamp: -10-10T03:14:04Zname: mysql-root-passwdnamespace: defaultresourceVersion: "436965"selfLink: /api/v1/namespaces/default/secrets/mysql-root-passwduid: 8adbf6ae-cc3a-11e8-bb48-005056277243type: Opaque---解密[root@master ~]# echo TXlQQHNzMTIz |base64 -dMyP@ss123

2.3 通过secret向pod注入环境变量

(1)编写yaml文件,创建pod

[root@master configmap]# vim pod-secret-1.yamlapiVersion: v1kind: Podmetadata:name: pod-secret-1namespace: defaultlabels:app: myapptier: frontendannotations:/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.yamlpod/pod-secret-1 created

(2)查询并认证

[root@master configmap]# kubectl get podsNAME READYSTATUS RESTARTS AGEpod-secret-11/1 Running 014s---验证,查询pod中的环境变量,筛选出MYSQL_ROOT_PASSWD[root@master configmap]# kubectl exec pod-secret-1 -- printenv |grep MYSQLMYSQL_ROOT_PASSWD=MyP@ss123

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。