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在线修改内容不会进行更新

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

此种方法也不支持热更新

相关推荐
m0_646429976 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
我不是阵雨8 小时前
微服务幂等性深度解剖
微服务·云原生·架构
吴声子夜歌8 小时前
Docker入门与实战——实战案例(Web服务与应用)
docker·容器
a5986529 小时前
Docker云手机搭建挂机环境,外网远程访问完整实操
docker·容器·智能手机·云手机
郭老二10 小时前
【docker】使用阿里云的容器镜像服务(ACR)构建自己的容器仓库
阿里云·docker·容器
code_slave(码畜)11 小时前
微服务架构落地:消息队列架构设计(上篇)——异步解耦、削峰填谷,看懂业务事件流转本质
spring boot·spring cloud·微服务·云原生·架构
code_slave(码畜)15 小时前
微服务架构落地:消息队列架构设计(下篇)——消息堆积、死信治理与集群监控告警实战
spring boot·spring cloud·微服务·云原生·中间件·架构
灯澜忆梦15 小时前
【docker】#2 | 基础命令
docker·容器·eureka
sbjdhjd19 小时前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全