k8s---配置资源管理

内容预知

目录

内容预知

secret资源配置

secert的几种模式

pod如何来引用secret

陈述式创建secret

声明式+base64编码配置secret

将secret用vlumes的方式挂载到pod中

传参的方式将环境变量导入pod

如何通过secret加密方式获取仓库密码

configmap的资源配置

陈述式创建configmap资源配置

声明式配置configmap资源

如何在pod引用?

数据卷使用configmap(挂载方式实现configmap)

configmap的热更新

总结

secret和configMap的区别


secret资源配置

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

secert的几种模式

复制代码
[root@master01 opt]# kubectl create secret 
docker-registry  generic          tls   

docker-registry:存储docker仓库认证信息,以及docker组件认证信息。(私有)

generic:是secret的默认模式,Opaque base64 加密编码的secret。用户自定义密码,密钥等等。    

tls:TLS/SSL  用于存储证书和私钥,https

系统自建:kubernetes.io/service-account-token用来访问系统的apiserver。pod会默认使用这个kubernetes.io/service-account-token创建的secret和apiserver通信。自动挂载到pod的/run/secret/kubernetes.io/service-account

pod如何来引用secret

3种方式:

  • 1.挂载方式,secret挂载到pod当中的一个或者多个容器上的卷 里面。
  • 2.把secret作为容器的环境变量
  • 3.docker-registry可以作为集群拉取镜像时使用。使用secret可以实现免密登录。

陈述式创建secret

复制代码
echo "zzr" > username.txt
echo "123" > passwd.txt

kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txt

kubectl get sercet

默认类型的加密方式: Opaque

声明式+base64编码配置secret

复制代码
echo username.txt | base64
echo password.txt | base64
复制代码
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  passwd: cGFzc3dkLnR4dAo=

将secret用vlumes的方式挂载到pod中

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    volumeMounts:
    - name: secret
      mountPath: "/etc/secrets"
      readOnly: false
  volumes:
  - name: secrets
    secret:
      secretName: mysecret1

传参的方式将环境变量导入pod

复制代码
-----------创建mysecret1---------------------
echo username.txt | base64
echo username1.txt | base64
vim sec.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  username1: dXNlcm5hbWUxLnR4dAo=
wq
------------创建完毕---------------------------



----------将环境变量引入-----------------------

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    env:
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username
      - name: USER1
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username1

我给nginx1.22这个容器里面传了两个环境变量,这两个变量的值从secret来,分别是两条mysecret1的加密信息。
wq
-------------------

进入容器观察

如何通过secret加密方式获取仓库密码

复制代码
kubectl create secret docker-registry myharbor --docker-server=20.0.0.64 --docker-username=admin --docker-password=123456

kubectl describe secrets myharbor
复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
  - name: nginx1
    image: hub.zzr.com/v1/nginx:zzr
  imagePullSecrets:
  - name: myharbor
  nodeName: master01
  
wq
kubectl apply -f sec3.yaml

configmap的资源配置

保存的是不需要加密的信息。configmap是1.2引入的功能,应用程序会从配置文件,命令参数,以及环境变化中读取配置信息。

configmap在创建容器中,给他注入我们需要的配置信息。即可以是单个的属性也可以整个容器的配置文件。

陈述式创建configmap资源配置

复制代码
cd /opt
mkdir configmap
cd configmap

vim game.txt
emo=123
kda=445

vim abc.txt
zzr=123
hj=456

kubectl create configmap game --from-file=/opt/configmap/game.txt --from-file=/opt/configmap/abc.txt

声明式配置configmap资源

复制代码
apiVerdion: v1
kind: ConfigMap
metadata:
  name: game
data:
  hj: aaa
  zzr: bbb
data里面要键值对形式

如何在pod引用?

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx1
      image: nginx:1.22
      env:
        - name: USER1
          valueFrom:
            configMapKeyRef:
              name: game
              key: zzr
        - name: USER2
          valueFrom:
            configMapKeyRef:
              name: game
              key: hj

数据卷使用configmap(挂载方式实现configmap)

复制代码
cd /opt
mkdir nginx-configmap
cd nginx-configmap

vim nginx.conf
kubectl create configmap nginx-conf --from-file=/opt/nginx-configmap/nignx.conf

kubectl get cm
kubectl describe nginx-conf
复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  labels:
    app: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx:1.22
        ports:
        - containerPort: 8081
        volumeMounts:
          - name: nginx-config
            mountPath: /etc/nginx
          - name: nginx-mount
            mountPath: /usr/share/nginx/html
      volumes:
      - name: nginx-config
        configMap:
          name: nginx-conf
      - name: nginx-mount
        hostPath:
          path: /opt/html
          type: DirectoryOrCreate

          
wq

由于configmap的热更新机制,可以直接对文件进行修改

复制代码
kubectl edit cm nginx-conf

location
root /usr/share/nginx/html

kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/confgi": "20240116"}}}}}'

更新完配置文件重启更新

configmap的热更新

1.我们通过数据卷的形式,把配置文件传给了pod内部容器。

2.config的热更新,在pod运行的情况下,对configmap的配置信息进行修改,直接生效(反应到容器当中)

3.configmap的热更新不会触发pod的滚动更新机制(deployment)

version/config来触发滚动更新。

复制代码
kubectl patch deployments.apps nginx1 --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20240116"}}}}}'

kubectl get pod

总结

secert:主要作用是保存加密文件,主要的使用方式就是挂载方式

comfigmap:把配置信息传给容器。主要方式也是挂载方式。

configmap的热更新:热更新可以直接反应到容器的内部,也不会触发pod的更新机制。如果不是需要重启的配置,都可以直接生效

version/config来触发热更新

需要重启的,可以重启pod

在工作中configMap就是将配置信息传递给容器。通过键值对形式保存的非加密信息。

更新:就是把配置信息重新传到容器内,重启也是一样。

secret和configMap的区别

secret是加密的信息。

configMap是非加密信息。可以传递配置信息给容器

相关推荐
慌糖3 小时前
微服务介绍
微服务·云原生·架构
高山莫衣8 小时前
Docker Desktop导致存储空间不足时的解决方案
docker·容器·eureka
鹏大师运维9 小时前
在银河麒麟V10 SP1上手动安装与配置高版本Docker的完整指南
linux·运维·docker·容器·麒麟·统信uos·中科方德
Ahlson9 小时前
【fnNAS】docker的nginx配置html
nginx·docker·容器·fnnas
LuckyLay9 小时前
Compose 常用命令详解——AI教你学Docker
docker·容器·eureka
阿里云云原生9 小时前
阿里云可观测 2025 年 6 月产品动态
云原生
阿里云云原生9 小时前
30 秒锁定黑客攻击:SLS SQL 如何从海量乱序日志中“揪”出攻击源
云原生
moppol9 小时前
容器化 vs 虚拟机:什么时候该用 Docker?什么时候必须用 VM?
运维·docker·容器
没有名字的小羊9 小时前
7.可视化的docker界面——portainer
docker·容器·eureka
斯普信专业组11 小时前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl