【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在线修改内容不会进行更新
相关推荐
东风微鸣1 小时前
Grafana将弃用AngularJS-我们该如何迁移
docker·云原生·kubernetes·可观察性
开心码农1号3 小时前
当一个 HTTP 请求发往 Kubernetes(K8s)部署的微服务时,整个过程流转时怎样的?
http·微服务·kubernetes
细心的莽夫4 小时前
Docker学习笔记
运维·笔记·后端·学习·docker·容器
诗句藏于尽头5 小时前
BT面板docker搭建excalidraw遇到的问题
运维·docker·容器
弧襪5 小时前
解决 Docker Swarm 集群节点故障:从问题剖析到修复实战
docker·容器
云攀登者-望正茂6 小时前
通过AWS EKS 生成并部署容器化应用
云原生·kubernetes·aws
kennygu7 小时前
jenkins项目发布-安装k8s(rancher)客户端kubectl
kubernetes·jenkins·rancher
被一米六支配的恐惧12 小时前
k8s部署grafana
容器·kubernetes·grafana
搬砖天才、14 小时前
日常记录-群晖nas的docker注册表被墙,用Mac电脑的docker拉取镜像并安装到nas中
macos·docker·容器
遇见火星14 小时前
Docker新型容器镜像构建技术,如何正确高效的编写Dockerfile
docker·容器·dockerfile·容器镜像