【Kubernetes】k8s集群配置资源管理

目录

一.Secret

1.Secret概念

[2.Secret 的类型:](#2.Secret 的类型:)

3.Opaque的创建、使用

1)挂载方式引用Opaque

2)环境变量方式引用

二、ConfigMap

1.概念

[2.创建 ConfigMap](#2.创建 ConfigMap)

[3.Pod 中使用 ConfigMap](#3.Pod 中使用 ConfigMap)

1)作为数据卷挂载使用

2)作为环境变量引用使用

4.补充知识


一.Secret

1.Secret概念

Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或

者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。

2.Secret 的类型:

1)kubernetes.io/service-account-token:由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录中;

2)Opaque :base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型;

3)kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息。

4)kubernetes.io/tls :用来存储 TLS 证书和私钥信息。

Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret:

  • 作为挂载到一个或多个容器上的卷 中的文件。
  • 作为容器的环境变量。
  • 由 kubelet 在为 Pod 拉取镜像时使用

3.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

1)挂载方式引用Opaque

将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下

 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

2)环境变量方式引用

将 Secret 导出到环境变量中

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: {}

二、ConfigMap

1.概念

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

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

应用场景:应用配置

2.创建 ConfigMap

方法一

只要指定为一个文件就可以从单个文件中创建 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/

方法二

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

3.Pod 中使用 ConfigMap

1)作为数据卷挂载使用

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: {}

2)作为环境变量引用使用

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: {}

4.补充知识

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在线修改内容不会进行更新
相关推荐
drebander4 小时前
Docker 安全基础:权限、用户、隔离机制
安全·docker·容器
Marcel1116 小时前
WSL2使用Kind创建K8S集群时出现IPV6网络创建失败
云原生·kubernetes·kind
柳鲲鹏8 小时前
docker push镜像到阿里云
阿里云·docker·容器
猪萌萌9 小时前
关于如何利用群晖Docker搭建Project Zomboid(僵尸毁灭工程)私人服务器-保姆级教程
服务器·docker·容器·僵尸世界大战·游戏服务器搭建
剩下了什么9 小时前
统信服务器操作系统V20 1070A 安装docker新版本26.1.4
运维·docker·容器
呱牛do it11 小时前
【系列专栏】银行IT的云原生架构-云单元架构 12
云原生·金融·架构
zxzy_org11 小时前
轻松上手:2025年微服务教程
算法·微服务·云原生·架构
格桑阿sir13 小时前
Kubernetes控制平面组件:etcd(二)
kubernetes·etcd·raft·mvcc·boltdb·watch机制·treeindex
安全检测中14 小时前
关于docker及容器的了解学习记录
学习·docker·容器
power-辰南14 小时前
微服务线上发布稳定性解决方案
微服务·云原生·架构·无损上线·无损下线