配置管理原理:

●当需要修改很多配置文件时,创建一个配置资源,将配置资源挂载到各个pod当中,给pod所使用,这样就只要修改配置资源就可以了
在这里插入图片描述

Secret

●Secret(机密):

  • 加密数据并存放在Etcd中,让Pod的容器以挂载Volume方式访问

●应用场景:

  • 凭据
https://kubernetes.io/docs/concepts/configuration/secret/

方式一:基于文件形式

1.创建用户名和密码文件

[root@master ~]# echo -n 'admin' > username.txt    ##创建username文件存放用户名admin;-n:不转行输出
[root@master ~]# echo -n '123456' > password.txt   ##创建password文件存放密码123456

在这里插入图片描述
2.查看资源

[root@master ~]# kubectl create secret generic db-user-pass --from-file=username.txt --from-file=password.txt    ##创以数据库形式的资源,以文件形式导入凭据存放
secret/db-user-pass created
[root@master ~]# kubectl get secret     ##查看secret资源

在这里插入图片描述
[root@master ~]# kubectl describe secret db-user-pass ##查看资源详细信息
在这里插入图片描述

方式二:基于参数创建secret

1.创建变量参数

[root@master ~]# echo -n 'admin' | base64    ##基于用户名生成64位编码
YWRtaW4=   ##生成的编码
[root@master ~]# echo -n '123456' | base64   ##基于密码生成64位编码
MTIzNDU2    ##生成的编码

2.创建yaml文件

[root@master ~]# cd demo/
[root@master demo]# vim secret.yaml
apiVersion: v1
kind: Secret   ##资源格式
metadata:
  name: mysecret   ##资源名称
type: Opaque   ##opa凭证类型
data:  
  username: YWRtaW4=    ##复制生成的用户名编码
  password: MTIzNDU2    ##复制生成的密码编码

3.创建secret资源并查看信息

[root@master demo]# kubectl create -f secret.yaml     ##创建了配置资源
secret/mysecret created
[root@master demo]# kubectl get secret

在这里插入图片描述
用法:
1.使用secret中的变量导入到pod中

[root@master demo]# vim secret-var.yaml
apiVersion: v1
kind: Pod   ##类型为pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx    ##名字为nginx
    image: nginx   ##镜像为nginx
    env:     ##环境代理
      - name: SECRET_USERNAME   ##username赋值给SECRET_USERNAME
        valueFrom:   ##值来自于谁
          secretKeyRef:
            name: mysecret     ##值来自于mysecret资源
            key: username   ##资源的值:username
      - name: SECRET_PASSWORD  ##password 赋值给SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
[root@master demo]# kubectl apply -f secret-var.yaml   ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods    ##查看pod资源
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          29s
[root@master demo]# kubectl exec -it mypod bash    ##进入资源
root@mypod:/# echo $SECRET_USERNAME    ##输出username变量
admin
root@mypod:/# echo $SECRET_PASSWORD   ##输出PASSWORD变量
123456

2.以volume的形式挂载到pod的某个目录下

[root@master demo]# vim secret-vol.yaml    ##编写secret-vol文件
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:  ##容器卷挂载
    - name: foo    ##指明挂载卷的名称
      mountPath: "/etc/foo"   ##挂载的路径在容器中的/etc/foo
      readOnly: true   ##设置权限为只读模式
  volumes:   ##被挂载的外部资源
  - name: foo    ##创建挂载卷名称
    secret:
      secretName: mysecret     ## secret资源
[root@master demo]# kubectl delete -f secret-var.yaml       ##删除之前的secret资源
pod "mypod" deleted
[root@master demo]# kubectl create -f secret-vol.yaml      ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods    ##查看资源
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          50s   ##创建成功
[root@master ~]# kubectl exec -it mypod bash   ##进入mypod资源
root@mypod:/# ls /etc/foo
password  username    ##挂载成功
root@mypod:/# cat /etc/foo/password 
123456     ##看到password对应的值
root@mypod:/etc/foo# cat username 
admin     ##看到username对应的值

ConfigMap

●ConfigMap

  • 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息

●应用场景

  • 应用配置

方式一:基于kubectl形式

[root@master demo]# vim redis.properties    ##创建redis的配置文件中需要的参数文件
redis.host=127.0.0.1    ##主机地址
redis.port=6379     ##端口
redis.password=123456    ##密钥
[root@master demo]# kubectl create configmap redis-config --from-file=redis.properties  ##创建configmap资源,名称为redis-config文件来自于redis.properties文件
configmap/redis-config created
[root@master demo]# kubectl get configmap    ##查看资源
NAME           DATA   AGE
redis-config   1      69s
[root@master demo]# kubectl get cm    ##缩写查看资源
NAME           DATA   AGE
redis-config   1      95s
[root@master demo]# kubectl describe cm redis-config    ##查看参数信息

在这里插入图片描述
创建mypod资源查看文件导入

[root@master demo]# kubectl delete pod/mypod   ##先将原先创建的mypod资源删除
pod "mypod" deleted
[root@master demo]# vim cm.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox  
      image: busybox     ##镜像为linux最小内核
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]   ##执行在pod中查看 /etc/config/redis.properties文件中的数据信息
      volumeMounts:
      - name: config-volume    ##使用指定资源的标签
        mountPath: /etc/config    ##挂载点
  volumes:  
    - name: config-volume   ##指定资源标签
      configMap:
        name: redis-config    ##指定的资源名称
  restartPolicy: Never
[root@master demo]# kubectl apply -f cm.yaml    ##创建资源
pod/mypod created
[root@master demo]# kubectl get pods    ##查看pod资源
NAME    READY   STATUS      RESTARTS   AGE
mypod   0/1     Completed   0          25s   ##执行完任务状态就为Completed
[root@master demo]# kubectl logs mypod     ##查看mypod的日志信息
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

方式二:基于变量参数形式

[root@master demo]# vim myconfig.yaml    ##创建变量资源
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info     ##定义两个键值
  special.type: hello
[root@master demo]# kubectl create -f myconfig.yaml    ##创建资源
configmap/myconfig created

创建mypod使用configmap资源输出变量参数

[root@master demo]# vim config-var.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]    ##输出LEVEL和TYPE两个变量
      env:     ##定义环境变量
        - name: LEVEL     ##定义LEVEL变量
          valueFrom:    ##值来自于
            configMapKeyRef:   ##来自于configMap类型资源
              name: myconfig    ##创建的configMap的资源
              key: special.level    ##key来自于configMap中的special.level
        - name: TYPE    ##定义TYPE变量
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never
[root@master demo]# kubectl delete pod mypod     ##删除重复的名称的资源
pod "mypod" deleted
[root@master demo]# kubectl apply -f config-var.yaml    ##创建mypod资源
pod/mypod created
[root@master demo]# kubectl logs mypod    ##通过查看日志查看变量的输出
info hello
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐