草庐IT

k8s中配置存储ConfigMap和Secret

xmwan 2023-03-28 原文

ConfigMap

ConfigMap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的。

Secret

在kubernetes中,还存在一种和ConfigMap非常类似的对象,称为Secret对象。它主要用于存储敏感信息,例如密码、秘钥、证书等等。

 

创建configmap 

1. 先创建username.txt ,password.txt 文件,输入对应用户名和密码信息

[root@k8s-master1 ConfigMap_secret]# cat username.txt 
xm
[root@k8s-master1 ConfigMap_secret]# cat 
123456

2. 使用kubectl命令导出yaml文件

[root@k8s-master1 ConfigMap_secret]#  kubectl create configmap configmap -n my-ns-xmcc --from-file=username.txt --from-file=password.txt --dry-run -o yaml > configmap.yaml

[root@k8s-master1 ConfigMap_secret]# cat configmap.yaml 
apiVersion: v1
data:
  password.txt: |
    123456
  username.txt: |
    xm
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: configmap1
  namespace: my-ns-xmcc
 
#使用此配置文件创建configmap
[root@k8s-master1 ConfigMap_secret]# kubectl apply -f configmap.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
configmap/configmap configured
[root@k8s-master1 ConfigMap_secret]# kubectl get cm -n my-ns-xmcc 
NAME        DATA   AGE
configmap   1      3m3s
# 查看configmap详情
[root@k8s-master1 ConfigMap_secret]# kubectl describe cm configmap -n my-ns-xmcc
Name:         configmap
Namespace:    my-ns-xmcc
Labels:       <none>
Annotations:  <none>

Data
====
info:
----
username: xm
password: 123456

Events:  <none>

3. 接下来创建一个deployment,将上面创建的configmap挂载进pod中

先用命令导出yaml文件

[root@k8s-master1 ConfigMap_secret]# kubectl create deploy deploy-xmcc -n my-ns-xmcc --image=centos-nginx:1.23.1 --dry-run -oyaml >> deploy.yaml

修改yaml文件,加入configmap配置信息

[root@k8s-master1 ConfigMap_secret]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-xmcc
  name: deploy-xmcc
  namespace: my-ns-xmcc
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: deploy-xmcc
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: deploy-xmcc
    spec:
      containers:
      - image: centos-nginx:1.23.1
        imagePullPolicy: IfNotPresent
        name: centos-nginx
        resources: {}
        volumeMounts:     #configmap挂载上去
        - name: config
          mountPath: /configmap/config
      volumes:
      - name: config
        configMap:
          name: configmap
      dnsPolicy: ClusterFirst
      restartPolicy: Always

#使用配置文件创建deployment
[root@k8s-master1 ConfigMap_secret]# kubectl apply -f deploy.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply

#查询资源
[root@k8s-master1 ConfigMap_secret]# kubectl get all -n my-ns-xmcc 
NAME                              READY   STATUS    RESTARTS   AGE
pod/deploy-xmcc-7b49c87f8-zg6sp   1/1     Running   0          57s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-xmcc   1/1     1            1           7m44s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/deploy-xmcc-5d64d5c64d   0         0         0       7m44s
replicaset.apps/deploy-xmcc-7b49c87f8    1         1         1       57s

#进入容器
[root@k8s-master1 ConfigMap_secret]# kubectl exec -it -n my-ns-xmcc deploy-xmcc-7b49c87f8-zg6sp /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@deploy-xmcc-7b49c87f8-zg6sp /]# cd /configmap/config/
[root@deploy-xmcc-7b49c87f8-zg6sp config]# ll
total 0
lrwxrwxrwx 1 root root 11 Sep 20 10:17 info -> ..data/info 
[root@deploy-xmcc-7b49c87f8-zg6sp config]# cat info 
username: xm
password: 123456
# 可以看到映射已经成功,每个configmap都映射成了一个目录 
# key--->文件 value---->文件中的内容 
# 此时如果更新configmap的内容, 容器中的值也会动态更新

 

 

Secret

在kubernetes中,还存在一种和ConfigMap非常类似的对象,称为Secret对象。它主要用于存储敏感信息,例如密码、秘钥、证书等等。

#首先使用base64对数据进行编码
[root@k8s-master1 ConfigMap_secret]# echo 'xm' |base64
eG0K
[root@k8s-master1 ConfigMap_secret]# echo '123456'|base64
MTIzNDU2Cg==
#解码的话,在上面命令加-d参数
[root@k8s-node1 ~]# echo eG0K | base64 -d
xm
[root@k8s-node1 ~]# echo MTIzNDU2Cg== | base64 -d
123456
#把编码存放在txt文件
[root@k8s-master1 ConfigMap_secret]# echo -n 'xm' | base64 >> username.txt
[root@k8s-master1 ConfigMap_secret]# echo -n '123456' | base64 >> password.txt
[root@k8s-master1 ConfigMap_secret]# cat username.txt 
eG0=
[root@k8s-master1 ConfigMap_secret]# cat password.txt 
MTIzNDU2
#使用kubectl命令创建,导出yaml文件
[root@k8s-master1 ConfigMap_secret]# kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt -n my-ns-xmcc --dry-run -o yaml >> db-user-pass-secret.yaml
#查询对应的yaml文件,可以根据需要修改
[root@k8s-master1 ConfigMap_secret]# cat db-user-pass-secret.yaml 
apiVersion: v1
data:
  password.txt: TVRJek5EVTIK
  username.txt: ZUcwPQo=
kind: Secret
metadata:
  creationTimestamp: null
  name: db-user-pass
  namespace: my-ns-xmcc
#修改后的yaml文件,使用yaml文件创建Secret
[root@k8s-master1 ConfigMap_secret]# cat secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: secret
  namespace: my-ns-xmcc
type: Opaque
data:
  username: eG0K
  password: MTIzNDU2Cg==
  
 # 创建secret
 [root@k8s-master1 ConfigMap_secret]# kubectl create -f secret.yaml 
secret/secret created

# 查看secret详情
[root@k8s-master1 ConfigMap_secret]# kubectl describe secret secret -n my-ns-xmcc 
Name:         secret
Namespace:    my-ns-xmcc
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  7 bytes
username:  3 bytes

#创建deployment,将上面创建的secret挂载进去:

[root@k8s-master1 ConfigMap_secret]# cat deploy-secret.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: deploy-xmcc-secret
  name: deploy-xmcc-secret
  namespace: my-ns-xmcc
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: deploy-xmcc-secret
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: deploy-xmcc-secret
    spec:
      containers:
      - image: centos-nginx:1.23.1
        imagePullPolicy: IfNotPresent
        name: centos-nginx
        resources: {}
        volumeMounts:      #挂载secret存储
        - name: config
          mountPath: /secret/config
      volumes:
      - name: config
        secret:
          secretName: secret
      dnsPolicy: ClusterFirst
      restartPolicy: Always

#创建deploy资源
[root@k8s-master1 ConfigMap_secret]# kubectl create -f deploy-secret.yaml 
deployment.apps/deploy-xmcc-secret created

#查询资源
[root@k8s-master1 ConfigMap_secret]# kubectl get all -n my-ns-xmcc 
NAME                                      READY   STATUS    RESTARTS   AGE
pod/deploy-xmcc-7b49c87f8-zg6sp           1/1     Running   0          5h51m
pod/deploy-xmcc-secret-54554c554f-gpwx7   1/1     Running   0          19s

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-xmcc          1/1     1            1           5h58m
deployment.apps/deploy-xmcc-secret   1/1     1            1           19s

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/deploy-xmcc-5d64d5c64d          0         0         0       5h58m
replicaset.apps/deploy-xmcc-7b49c87f8           1         1         1       5h51m
replicaset.apps/deploy-xmcc-secret-54554c554f   1         1         1       19s

#进入容器,查看secret信息,发现已经自动解码了
[root@k8s-master1 ConfigMap_secret]# kubectl exec -it -n my-ns-xmcc deploy-xmcc-secret-54554c554f-gpwx7 /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@deploy-xmcc-secret-54554c554f-gpwx7 /]# cd /secret/config/
[root@deploy-xmcc-secret-54554c554f-gpwx7 config]# ll
total 0
lrwxrwxrwx 1 root root 15 Sep 20 16:08 password -> ..data/password
lrwxrwxrwx 1 root root 15 Sep 20 16:08 username -> ..data/username
[root@deploy-xmcc-secret-54554c554f-gpwx7 config]# cat username 
xm
[root@deploy-xmcc-secret-54554c554f-gpwx7 config]# cat password 
123456

至此,已经实现了利用secret实现了信息的编码。

有关k8s中配置存储ConfigMap和Secret的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  5. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  6. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  7. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  8. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

  9. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  10. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

随机推荐