【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在线修改内容不会进行更新
相关推荐
巅峰程序12 小时前
[docker]拉取镜像失败
docker·容器·eureka
MonkeyKing_sunyuhua13 小时前
sudo docker ps才能查看,docker ps不能查看问题
docker·容器·eureka
小龙在山东13 小时前
使用Docker快速部署FastAPI Web应用
docker·容器·fastapi
苏格拉真没有底13 小时前
docker配置代理解决不能拉镜像问题
运维·docker·容器
A ?Charis17 小时前
我来讲一下-Service Mesh.
云原生·service_mesh
ciao-lk17 小时前
docker desktop运行rabittmq容器,控制台无法访问
docker·容器
严格要求自己19 小时前
nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
云原生·容器·kubernetes
少吃一口就会少吃一口19 小时前
k8s笔记
云原生·容器·kubernetes
葡萄皮Apple19 小时前
[CKS] K8S ServiceAccount Set Up
服务器·容器·kubernetes
星海幻影20 小时前
云原生-docker安装与基础操作
网络·安全·docker·云原生·容器