• configmap&secrets基本操作


    一,configmap简介:

    ConfigMap是一种API对象,用来将非加密数据保存到键值对中,如etcd中。

    可以用作环境变量、命令行参数或者存储卷中的配置文件。

    ConfigMap可以将 环境变量 配置信息和容器镜像解耦,便于应用配置的修改。

    如果需要存储加密信息时可以使用Secret对象。

    1,configmap的创建:

    [root@k8s-master configmap]# kubectl create configmap --help
    查看帮助如何创建 configmap常用两种创建方式:

    (1.1)第一种:基于文件的方式进行创建,–from-file:指明文件名称,名称为键,文件内容为值。也可以指明多个文件。

    语法: kubectl create configmap my-config --from-file=path/to/bar

    示例:基于向nginx注入配置文件。

    [root@k8s-master configmap]# cat www.conf    创建一个nginx配置文件。
    server {
           server_name myapp.shuo.com;
           listen 80;
           root /data/web/html/;
    }
    [root@k8s-master configmap]# kubectl create configmap nginx-www --from-file=www.conf 创建一个configmap名称为nginx-www,键为www.conf,值为文件内容。
    configmap/nginx-www created
    
    [root@k8s-master configmap]# kubectl get cm    查看configmap
    NAME               DATA   AGE
    kube-root-ca.crt   1      43d
    nginx-www          1      10s
    [root@k8s-master configmap]# 
    [root@k8s-master configmap]# kubectl describe cm nginx-www       查看创建的configmap详细信息。
    Name:         nginx-www
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    www.conf:----
    server {
           server_name myapp.shuo.com;
           listen 80;                       
           root /data/web/html/;
    }
    
    
    Events:  <none>
    
    创建一个pod,使用configmap类型挂载卷
    [root@k8s-master configmap]# vim pod-configmap-3.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-cm-3
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations:
        mingyuanyun/create: "yanss"
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: nginxconf
          mountPath: /etc/nginx/conf.d/ 挂载到这个nginx资源路径下,为nginx提供资源。
          readOnly: true      不允许pod容器对配置文件修改
      volumes: 
      - name: nginxconf
        configMap:
          name: nginx-www
    
    [root@k8s-master configmap]# kubectl apply -f pod-configmap-3.yaml
    pod/pod-cm-3 created
    [root@k8s-master configmap]# kubectl get pods -o wide
    NAME          READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
    pod-cm-3      1/1     Running   0          9m47s   10.244.1.11   k8s-node1   <none>           <none>
    
    [root@k8s-master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
    / # cd /etc/nginx/conf.d/
    /etc/nginx/conf.d # ls           可以看到我们创建的confimap,nginx-www中的键。
    www.conf
    /etc/nginx/conf.d # cat www.conf 
    server {
           server_name myapp.shuo.com;
           listen 80;
           root /data/web/html/;
    }
    
    /etc/nginx/conf.d # 
    /etc/nginx/conf.d # nginx -T              查看nginx加载的配置文件。
    # configuration file /etc/nginx/conf.d/www.conf:
    server {
           server_name myapp.shuo.com;
           listen 80;
           root /data/web/html/;
    }
    
    
    /etc/nginx/conf.d # mkdir -p /data/web/html                   构建nginx资源访问路径。
    /etc/nginx/conf.d # vi /data/web/html/index.html
    /etc/nginx/conf.d # 
    /etc/nginx/conf.d # cat /data/web/html/index.html 
    weclome nginx
    
    验证测试: node1上访问,如果想要通过域名访问,那么需要修改node1上hosts文件
    [root@k8s-node1 ~]# curl 10.244.1.11
    weclome nginx
    
    修改configmap  nginx-www中监听的端口号,看看nginx配置文件会不会生效
    因为我们通过存储卷挂载的方式进行同步,时间有点慢。
    [root@k8s-master configmap]# kubectl edit cm nginx-www      修改configmap文件中监听端口为8080
    configmap/nginx-www edited
    [root@k8s-master configmap]# kubectl exec -it pod-cm-3 -- /bin/sh
    /data/web/html # cd /etc/nginx/conf.d/
    /etc/nginx/conf.d # ls
    www.conf
    /etc/nginx/conf.d # cat www.conf 
    server {
           server_name myapp.shuo.com;
           listen 8080;
           root /data/web/html/;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112

    (1.2)基于键值对进行创建configmap

    语法:kubectl create configmap my-config --from-literal=key1=config1
    –from-literal=key2=config2

    示例:向pod中注入环境变量

    [root@k8s-master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=Yan.com.cn
    configmap/nginx-config created
    [root@k8s-master ~]# kubectl get cm
    NAME               DATA   AGE
    kube-root-ca.crt   1      43d
    nginx-config       2      6s
    
    [root@k8s-master ~]# kubectl describe cm nginx-config
    Name:         nginx-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    nginx_port:              定义的键
    ----
    80                             键的值
    server_name:
    ----
    Yan.com.cn
    Events:  <none>
    
    [root@k8s-master configmap]# cat pod-configmap.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations: 
        mingyuanyun/create: "yanss"
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        env:
        - name: NGINX_SERVER_PORT              定义变量名称
          valueFrom:                值的来源
            configMapKeyRef:             
              name: nginx-config      configmap的名称
              key: nginx_port             configmap中的键
        - name: NGINX_SERVER_NAME
          valueFrom:
            configMapKeyRef:
              name: nginx-config
              key: server_name
    
    [root@k8s-master configmap]# kubectl apply -f pod-configmap.yaml 
    pod/pod-cm-1 created
    [root@k8s-master configmap]# kubectl get pods
    NAME          READY   STATUS    RESTARTS   AGE
    pod-cm-1      1/1     Running   0          9s
    [root@k8s-master configmap]# kubectl exec -it pod-cm-1 -- /bin/sh     进入pod查看变量。
    NGINX_SERVER_PORT=80
    NGINX_SERVER_NAME=Yan.com.cn
    
    2,通过存储卷的方式加载,这是键为文件名,内容为值。
    [root@k8s-master configmap]# kubectl exec -it pod-cm-1 -- /bin/sh     进入pod查看变量。
    NGINX_SERVER_PORT=80
    NGINX_SERVER_NAME=Yan.com.cn
    
    [root@k8s-master configmap]# vim pod-configmap-2.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-cm-2
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations:
        mingyuanyun/create: "yanss"
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: nginxconf
          mountPath: /etc/nginx/config.d/
          readOnly: true              不允许pod容器对配置文件修改
      volumes:
      - name: nginxconf
        configMap:
          name: nginx-config
      
    [root@k8s-master configmap]# kubectl apply -f pod-configmap-2.yaml 
    pod/pod-cm-2 created
    [root@k8s-master configmap]# kubectl get pods 
    NAME          READY   STATUS    RESTARTS   AGE
    pod-cm-2      1/1     Running   0          7s
    [root@k8s-master configmap]# kubectl exec -it pod-cm-2 -- /bin/sh
    / # ls
    bin    etc    lib    mnt    root   sbin   sys    usr
    dev    home   media  proc   run    srv    tmp    var
    / # cd /etc/nginx/conf
    conf.d/    config.d/
    / # cd /etc/nginx/config.d/
    /etc/nginx/config.d # ls
    nginx_port   server_name
    /etc/nginx/config.d # cat nginx_port 
    /etc/nginx/config.d # cat nginx_port 
    /etc/nginx/config.d # cat server_name 
    Yan.com.cn/etc/nginx/config.d # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114

    secrets:不同于confimap在于加密存储数据,不是明文存储。

    三中类型:
    docker-registry 创建一个给 Docker registry 使用的 secret       这个类型是存储登录私有仓库需要认证的账号密码
    generic         从本地 file, directory 或者 literal value 创建一个 secret,例如存储Mysql账号和密码。
    tls             创建一个 TLS secret          这个类型是存储相关认证秘钥的secret。保存的是私钥和证书
    
    [root@k8s-master configmap]# kubectl create secret generic mysql-root-password --from-literal=password=Myp@ss123   创建一个通用类型的secret,键为password,值为密码。
    secret/mysql-root-password created
    [root@k8s-master configmap]# kubectl get secret
    NAME                  TYPE                                  DATA   AGE
    default-token-2rtnx   kubernetes.io/service-account-token   3      48d
    mysql-root-password   Opaque                                1      14s
    
    [root@k8s-master configmap]# kubectl describe secret mysql-root-password    查看值是加密的。
    Name:         mysql-root-password
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    password:  9 bytes
    [root@k8s-master configmap]# 
    
    [root@k8s-master configmap]# kubectl get secret mysql-root-password -o yaml
    apiVersion: v1
    data:
      password: TXlwQHNzMTIz
    kind: Secret
    metadata:
      creationTimestamp: "2022-07-26T08:57:25Z"
      name: mysql-root-password
      namespace: default
      resourceVersion: "5523531"
      uid: 24b481cc-55e5-423e-9026-7fd30fefd8fc
    type: Opaque
    [root@k8s-master configmap]# echo TXlwQHNzMTIz | base64 -d               通过base64解码可以查看密码
    Myp@ss123[root@k8s-master configmap]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    总结:configmap和secret基本操作完成,区别在于一个明文存储一个加密存储数据。

  • 相关阅读:
    [C国演义] 第十五章
    【开源】JAVA+Vue.js实现医院门诊预约挂号系统
    两数之和
    瑞士军刀Netcat
    Python:pandas库的使用
    为什么很多人赚不到钱?赚了钱又存不了钱呢
    第五章 数据库设计和事务 ② 代码
    Visual Studio Code(vs code) 安装c# .net环境 solution
    力扣刷题-数组-双指针法总结-移除元素
    SpringBoot-Web开发-拦截器
  • 原文地址:https://blog.csdn.net/yurun_house/article/details/126015846