k8s的配置资源管理

Secret

Secret用来保存密码、token密钥以及一些敏感的k8s资源。这类数据虽然可以存放在镜像当中,但是放在secret当中可以更方便控制。减少暴露的风险。

Secret的作用:保存加密的信息

Secret的类型

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/serect/kubernetes.io/service-account

如何创建secret?

1、指定文件提取信息

陈述式的创建方式:

bash 复制代码
kubectl create secret generic mysecret --from-file=/opt/username.txt --from-file=/opt/passwd.txt
#创建命令

kubectl get secrets
#查看有哪些secret文件

kubectl describe secrets mysecret
#查看指定secret的详细信息

echo username.txt | base64
#以base64的加密方式生成文件内部数据
echo passwd.txt | base64

陈述式需要指定资源创建

默认类型的加密方式:Opaque加密类型

声明式的创建方式:

bash 复制代码
[root@master01 configmap]# echo "zyg" | base64
enlnCg==
[root@master01 configmap]# echo "hmbb" | base64
aG1iYgo=
#将格式转换为base64格式


创建yaml文件
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: dXNlcm5hbWUudHh0Cg==
  password: cGFzc3dkLnR4dAo=

data内保存的是加密的内容

pod如何来引用Secret?

1、 挂载方式。将secret挂载到pod当中的一个或者多个容器上的卷里面。

2、 把secret作为容器的环境变量

3、 docker-registry可以作为集群拉取镜像时使用。使用secret可以实现免密登录。

挂载的方式来实现

实验举例:

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    volumeMounts:
    - name: secrets
      mountPath: "/etc/secret"
      readOnly: false
  volumes:
  - name: secrets
    secret:
      secretName: mysecret1
#将创建好的mysecret内的加密内容和容器内的指定目录进行挂载。

kubectl apply -f secret-pod.yaml

kubectl exec -it mypod bash

root@mypod:/etc/secret# cat username
zyg
root@mypod:/etc/secret# cat username1 
hmbb

保存内容是加密内容,容器内部可以解密直接引用

把secret作为容器的环境变量

bash 复制代码
[root@master01 opt]# echo "章鱼哥" | base64
56ug6bG85ZOlCg==
[root@master01 opt]# echo "海绵宝宝" | base64
5rW357u15a6d5a6dCg==

创建secret:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type:
  Opaque
data:
  username: 56ug6bG85ZOlCg==
  username1: 5rW357u15a6d5a6dCg==

创建pod:
  apiVersion: v1
kind: Pod
metadata:
  name: mypod1
spec:
  containers:
  - name: nginx
    image: nginx:1.22
    env:
      - name: USER
        valueFrom:
          secretKeyRef:
            name: mysecret1
#这里的name指的是secret的名称。
#表示需要用哪个secret来赋值给USER
            key: username
      - name: USER1
        valueFrom:
          secretKeyRef:
            name: mysecret1
            key: username1
#给nginx:1.22这个容器里面传了两个环境变量。这两个变量的值从secret来。分别是两条mysecret1的加密信息

docker-registry

bash 复制代码
kubectl create secret docker-registry myharbor --docker-server=20.0.0.36 --docker-username=admin --docker-password=123456
#创建docker-registry。指向harbur仓库的IP主机以及账号密码

kubectl describe secrets myharbor
#查看docker-registry的详细信息

apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx2
      image: hub.test.com/library/nginx:v1
  imagePullSecrets:
  - name: myharbor
  nodeName: node01
#指定node不走调度策略

ConfigMap

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

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

陈述式

bash 复制代码
kubectl create configmap game --from-file=/opt/configmap/zyg.txt --from-file=/opt/configmap/hmbb.txt
#创建configmap

kubectl get cm
#查看configmap有多少个
kubectl describe cm game
#查看指定configmap的详细信息

指定文件创建,可以是一个,也可以是多个。

声明式

bash 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: bqb
data:
  zyg: shuai
  hmbb: sao
#configmap是键值对形式。一个键对应一个值

kubectl describe cm game
#查看详细信息

引用方式

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod2
spec:
  containers:
    - name: nginx2
      image: nginx:1.22
      env:
        - name: USER1
          valueFrom:
            configMapKeyRef:
              name: bqb
#这里的name是configmap的名称
              key: zyg
        - name: USER2
          valueFrom:
            conigfMapKeyRef:
              name: bqb
              key: hmbb

挂载的方式

数据卷使用comfigmap

bash 复制代码
准备一个nginx.conf的配置文件

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

创建yaml文件

开始修改nginx的html访问页面

使用version/config触发滚动更新机制

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

实现重启容器

configmap的热更新

热更新的特点:

1、 通过数据卷的形式将配置文件传给pod内的容器

2、 在pod运行的情况下对configmap的配置信息进行修改。直接生效反应到容器当中。

热更新pod不会重启。如果有pod有副本都会一并更改。

3、 configmap的热更新不会触发pod的滚动更新机制。

version/config触发滚动更新机制

bash 复制代码
kubectal patch deployment nginx1 --path '{"spec": {"template":{"metadata": {"annotations": {"version/config": "20240116"}}}}}'

通过命令触发pod滚动更新,将pod重新拉起,将修改过的configmap重新传递给pod内重新拉起的容器。

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

configMap:把配置信息传递给容器。主要使用方式也是挂载。

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

可以通过version/config的方式来触发滚动更新机制

需要重启的,可以重启pod

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

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

secret和configMap的区别

secret是加密的信息。

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

相关推荐
胖毁青春,瘦解百病17 分钟前
Docker镜像源设置不生效问题排查
docker·容器
CloudPilotAI20 分钟前
15条 Karpenter 最佳实践,轻松掌握弹性伸缩
kubernetes·弹性伸缩·karpenter
会飞的土拨鼠呀28 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
ether-lin1 小时前
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)
ci/cd·kubernetes·devops
Carry_NJ3 小时前
docker-compose样例
运维·docker·容器
勇-子3 小时前
K8s 常用资源介绍
云原生·容器·kubernetes
大G哥3 小时前
k8s创建单例redis设置密码
数据库·redis·云原生·容器·kubernetes
勇-子5 小时前
K8s DaemonSet的介绍
云原生·容器·kubernetes
孟里啥都有.5 小时前
12.24 k8s yaml文件类型和介绍
云原生·容器·kubernetes
花晓木5 小时前
最新版本 - 二进制安装k8s1.29.2 集群
云原生·容器·kubernetes