k8s配置资源管理

1.Secret

存储密钥信息资源

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。

Secret 有四种类型:
●kubernetes.io/service-account-token:由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录中;
●Opaque :base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型;
●kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息。
●kubernetes.io/tls :用来存储 TLS 证书和私钥信息。

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:
●作为挂载到一个或多个容器上的卷 中的文件。
●作为容器的环境变量。
●由 kubelet 在为 Pod 拉取镜像时使用

1.1 Opaque的创建、使用

复制代码
kubectl create -n xy101 secret generic liliang-cecret --from-file=./username.txt --from-file=./password.txt


复制代码
kubectl create secret -n xy101 generic li-secret --from-file=demo/
复制代码
kubectl create -n xy101 secret generic scj-secret --from-literal=myname=scj --from-literal=myclass=xy101

挂载方式引用Opaque

复制代码
 vim demo1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo1-pod
  name: demo1-pod
  namespace: xy101
spec:
  volumes:
  - name: secret-vol
    secret:
      secretName: liliang-cecret
  containers:
  - image: nginx
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: secret-vol
      mountPath: /mnt
  dnsPolicy: ClusterFirst
  restartPolicy: Always

环境变量方式引用

diff 复制代码
vim demo2-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo2-pod
  name: demo2-pod
  namespace: xy101
spec:
  containers:
  - image: nginx
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    env:
    - name: MYSCHOOL
      valueFrom:
        secretKeyRef:
          name: scj-secret
          key: myname
    envFrom:
    - secretRef:
        name: scj-secret
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

2.ConfigMap

存储配置资源

与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。
ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
应用场景:应用配置

2.1 创建 ConfigMap

方法1:

复制代码
只要指定为一个文件就可以从单个文件中创建 ConfigMap
--from-file 这个参数可以使用多次,即可以使用两次分别指定上个实例中的那两个配置文件

kubectl create cm demo-cm --from-file=chen.cfg --from-file=tan.cfg
复制代码
--from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容
kubectl create cm demo1-cm --from-file=configmap/

方法2:

复制代码
使用文字值创建,利用 --from-literal 参数传递配置信息
kubectl create cm kv-cm --from-literal=myname=scj --from-literal=myclass=xy101 --from-literal=mylove=tangjun

2.2 Pod 中使用 ConfigMap

作为数据卷挂载使用

复制代码
vim demo1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo-pod
  name: demo-pod
spec:
  volumes:
  - name: cm-vol       #定义存储卷名称
    configMap:        
      name: demo-cm    #指定cm资源名称
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:      #指定挂载容器信息
    - name: cm-vol
      mountPath: /mnt
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

作为环境变量引用使用

复制代码
vim demo2-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo2-pod
  name: demo2-pod
spec:
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    env:               #指定环境变量
    - name: MYNAME  
      value: tc
    - name: MYCLASS 
      valueFrom:         #变量值从什么地方而来
        configMapKeyRef:
          name: kv-cm
          key: myclass
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
复制代码
vim demo3-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo3-pod
  name: demo3-pod
spec:
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    envFrom:
    - configMapRef:
        name: kv-cm
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

补充

复制代码
kubectl create cm web-cm --from-file=./

vim demo4-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo4-pod
  name: demo4-pod
spec:
  volumes:
  - name: web-vol
    configMap:
      name: web-cm
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    volumeMounts:
    - name: web-vol
      mountPath: /usr/share/nginx/html
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}


kubectl apply -f demo4-pod.yaml 


复制代码
kubectl edit cm web-cm   修改其中的chen.html为tc

通过数据卷挂载使用的支持热更新


复制代码
vim demo3-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: demo3-pod
  name: demo3-pod
spec:
  containers:
  - image: soscscs/myapp:v1
    name: myapp
    ports:
    - containerPort: 80
    resources: {}
    envFrom:
    - configMapRef:
        name: kv-cm
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
复制代码
kubectl edit cm kv-cm

需改其中myclass为xy102


环境变量引用的方式使用configmap在线修改内容不会进行更新

挂载时如何不覆盖原本目录的内容进行挂载?

此种方法也不支持热更新

相关推荐
孔令飞8 分钟前
Go:终于有了处理未定义字段的实用方案
人工智能·云原生·go
玄明Hanko28 分钟前
Quarkus+Docker最全面完整教程:手把手搞定Java云原生
后端·docker·云原生
SimonLiu0091 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器
高峰君主4 小时前
Docker容器持久化
docker·容器·eureka
能来帮帮蒟蒻吗4 小时前
Docker安装(Ubuntu22版)
笔记·学习·spring cloud·docker·容器
言之。8 小时前
别学了,打会王者吧
java·python·mysql·容器·spark·php·html5
秦始皇爱找茬11 小时前
docker部署Jenkins工具
docker·容器·jenkins
hoho不爱喝酒14 小时前
微服务Nacos组件的介绍、安装、使用
微服务·云原生·架构
樽酒ﻬق15 小时前
Kubernetes 常用运维命令整理
运维·容器·kubernetes
Golinie16 小时前
Docker底层原理浅析 | namespace+cgroups+文件系统
docker·容器·文件系统·cgroups·unionfs