zoukankan      html  css  js  c++  java
  • kubernetes文件配置管理

    kubernetes文件配置管理

    包括两个部分,分别是Secret&ConfigmapSecret主要应用于保存镜像仓库认证信息、凭证、https证书。Configmap主要应用于存储应用程序配置文件

    Secret

    作用是将数据加密并存放到etcd中,让pod容器以挂载volume方式访问,主要的应用场景就是保存凭据,像是保存私有仓库的凭据信息,还有就是保存证书,用的都是这个。主要使用有两个方面,一个是存储一定的值能保存到容器中当作环境变量,另一种以文件的形式挂载进去给程序使用

    手动创建Secret

    [root@k8s01 ~]# echo -n 'admin' > ./username.txt
    [root@k8s01 ~]# echo -n '123456' >./password.txt
    [root@k8s01 ~]# kubectl create secret generic db-user-pass --from-file=username.txt --from-file=password.txt 
    secret/db-user-pass created
    [root@k8s01 ~]# kubectl get secrets 
    NAME                                 TYPE                                  DATA   AGE
    db-user-pass                         Opaque                                2      22s
    default-token-bv97f                  kubernetes.io/service-account-token   3      5h26m
    nfs-client-provisioner-token-vfjf7   kubernetes.io/service-account-token   3      5h10m
    [root@k8s01 ~]# kubectl describe secrets db-user-pass 
    Name:         db-user-pass
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    password.txt:  6 bytes
    username.txt:  5 bytes
    [root@k8s01 ~]# 
    

    这里看到的数据都不是明文的,所以无法看都他的信息,为了保证数据的安全性

    yaml文件创建

    先通过base64位创建用户和密码

    [root@k8s01 ~]# echo -n 'admin' |base64
    YWRtaW4=
    [root@k8s01 ~]# echo -n '12345' |base64
    MTIzNDU=
    

    再编写yaml文件

    [root@k8s01 ~]# cat secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: MTIzNDU=
    
    [root@k8s01 ~]# kubectl create -f secret.yaml
    secret/mysecret created
    [root@k8s01 ~]# kubectl get secrets 
    NAME                                 TYPE                                  DATA   AGE
    db-user-pass                         Opaque                                2      4m58s
    default-token-bv97f                  kubernetes.io/service-account-token   3      5h31m
    mysecret                             Opaque                                2      5s
    nfs-client-provisioner-token-vfjf7   kubernetes.io/service-account-token   3      5h15m
    [root@k8s01 ~]# 
    

    容器中以变量引用Secret

    [root@k8s01 ~]# cat secret-var.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - name: nginx
        image: nginx
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: username
          - name: SECRET_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: password
    

    env来定义Pod的环境变量,name: SECRET_USERNAME为之个key: username值来设置这个环境变量的名字,这个值来自于name: mysecret里面,key: username这个key是name: mysecret的用户名,另一个name同上。

    [root@k8s01 ~]# kubectl create -f secret-var.yaml 
    pod/mypod created
    
    

    进入容器查看变量

    [root@k8s01 ~]# kubectl exec -it mypod /bin/bash
    root@mypod:/# echo $SECRET_USERNAME 
    admin
    root@mypod:/# echo $SECRET_PASSWORD 
    12345
    root@mypod:/# 
    

    以数据卷形式挂载到容器中

    [root@k8s01 ~]# cat secret-vol.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: foo
          mountPath: "/etc/foo"
          readOnly: true
      volumes:
      - name: foo
        secret:
          secretName: mysecret
    

    定义一个pod,通过volumeMountsvolumes挂载到/etc/foo下面,会将mysecretusernamepassword作为文件名,创建后到容器看一下,

    [root@k8s01 ~]# kubectl create -f secret-vol.yaml 
    pod/mypod created
    [root@k8s01 ~]# 
    

    查看变量

    [root@k8s01 ~]# kubectl exec -it mypod /bin/bash
    root@mypod:/# ls -l /etc/foo/
    total 0
    lrwxrwxrwx 1 root root 15 Jun  7 13:33 password -> ..data/password
    lrwxrwxrwx 1 root root 15 Jun  7 13:33 username -> ..data/username
    root@mypod:/# cat /etc/foo/username;echo ''
    admin
    root@mypod:/# cat /etc/foo/password;echo ''
    12345
    root@mypod:/# 
    

    ConfigMap

    他和secret相似,主要存储不需要加密的数据,一般是用来保存配置文件,和secret一样可以通过``kubectlyaml创建,他也是两种主要的用法,一种以变量的形式导入到pod中,另一个是以volumes`挂载,如果通过目录创建会让里面的所以的文件保存到不同的文件名,如果是文件他只保存里面的文件数据

    kubectl创建

    [root@k8s01 ~]# cat redis.properties 
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456
    [root@k8s01 ~]# kubectl create configmap redis-config --from-file=redis.properties 
    configmap/redis-config created
    [root@k8s01 ~]# kubectl get con
    configmaps                controllerrevisions.apps  
    [root@k8s01 ~]# kubectl get configmaps 
    NAME           DATA   AGE
    redis-config   1      8s
    [root@k8s01 ~]# kubectl describe cm redis-config 
    Name:         redis-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    redis.properties:
    ----
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456
    
    Events:  <none>
    

    可以看到这里的数据是明文的,具体怎么用,还是有两种办法,一个是以volume的形式挂载进去,还有一个就是变量,既然是配置文件,最好是挂volume

    volume挂载

    [root@k8s01 ~]# cat cm.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: busybox
          image: busybox
          command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: redis-config
      restartPolicy: Never
    

    数据卷的来源就是configMap,挂载到了/etc/config目录下

    [root@k8s01 ~]# kubectl create -f cm.yaml 
    pod/mypod created
    [root@k8s01 ~]# kubectl logs mypod 
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456
    [root@k8s01 ~]# 
    

    yaml创建

    [root@k8s01 ~]# cat myconfig.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfig
      namespace: default
    data:
      special.level: info
      special.type: hello
    [root@k8s01 ~]# kubectl create -f myconfig.yaml 
    configmap/myconfig created
    [root@k8s01 ~]# kubectl get cm
    NAME           DATA   AGE
    myconfig       2      4s
    redis-config   1      9m26s
    [root@k8s01 ~]# 
    

    以变量挂载

    [root@k8s01 ~]# cat config-var.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: busybox
          image: busybox
          command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
          env:
            - name: LEVEL
              valueFrom:
                configMapKeyRef:
                  name: myconfig
                  key: special.level
            - name: TYPE
              valueFrom:
                configMapKeyRef:
                  name: myconfig
                  key: special.type
      restartPolicy: Never
    [root@k8s01 ~]# kubectl create -f config-var.yaml
    pod/mypod created
    [root@k8s01 ~]# kubectl logs mypod 
    info hello
    [root@k8s01 ~]# 
    
  • 相关阅读:
    把office文档转换为html过程中的一些坑
    Win10内置应用恢复初始状态
    HTTP 错误 500.23
    关于Application.Lock和Lock(obj) 转 http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html
    正则表达式 细节
    Python常用内置函数总结
    将Python脚本封装成exe可执行文件 转
    爬虫技能
    python之map、filter、reduce、lambda函数 转
    小细节
  • 原文地址:https://www.cnblogs.com/opesn/p/13208967.html
Copyright © 2011-2022 走看看