k8s 数据存储相关

k8s 数据存储相关


  • ConfigMap 存储

    • 1、创建方式

    • 2、configmap 数据作为环境变量

    • 3、configmap 和容器挂载的结合

  • Secret 存储

  • Volume 存储

    • 1、emptyDir 类型

    • 2、hostpath 类型

  • PersistentVolumeClaim(PVC)存储


ConfigMap 存储

ConfigMap 是 Kubernetes 中用于存储配置信息的一种资源,允许你将配置信息从应用代码中分离出来。ConfigMap 可以用来存储单个属性、配置文件或者 JSON、XML 文件格式的配置数据

1、创建方式

1.1、文件方式创建

  • 指定文件夹:目录下所有文件被用在 configmap 里面创建一个键值对,文件名为 key、文件内容为 value

  • 指定文件:文件名为 key、文件内容为 value

    kubectl create configmap lqhcm1 --from-file=../configmap/ -n space01
k8s 数据存储相关

1.2、文本参数方式创建

  • 指定参数--from-literal参数指定 key、value

    kubectl create configmap lqhcm3 --from-literal=key1=value1 --from-literal=key2=value2 -n space01
k8s 数据存储相关

1.3、标准 yaml 文件

  • 指定 yaml 文件:使用提前写好的标准 configmap 的 yaml 文件创建

    kubectl apply -f configmap.yaml

2、configmap 数据作为环境变量

  • 新建一个 pod(configmap-env-test)打印一下上面 configMap 的数据
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-test #这个pod的名字
labels:
namespace: space01 #声明一个新的命名空间

spec:
containers:
- name: redis01 #容器名
image: redis #镜像名字
command: [ "/bin/sh", "-c", "env" ]
imagePullPolicy: IfNotPresent # 指定拉取镜像的策略,默认是Always,每次尝试拉去新的, IfNotPresent表示每本的的再去拉
env:
- name: env1
valueFrom:
configMapKeyRef:
name: lqhcm1
key: file1.txt
- name: env2
valueFrom:
configMapKeyRef:
name: lqhcm1
key: file2.txt

- name: nginx01 #容器名
image: nginx #镜像名字
command: [ "/bin/sh", "-c", "env" ]
imagePullPolicy: IfNotPresent
envFrom: #导入lqhcm3这个configmap所有的key-value
- configMapRef:
name: lqhcm3
restartPolicy: Never
  • 验证截图
k8s 数据存储相关
k8s 数据存储相关

3、configmap 和容器挂载的结合

  • 新建一个挂载 configmap 的 deployment,一个 configmap 的所有 key 会成为容器内部挂载目录的文件名字,对应的 value 会成为文件名对应的文件内容。

  • kubectl edit configmap lqhcm3 -n space01可以编辑配置进行热更新,pod 内容器会跟着改。(注意:使用该 ConfigMap 挂载的 Env 不会同步更新)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: configmap-deployment-test #这个pod的名字
    labels:
    namespace: space01 #声明一个新的命名空间

    spec:
    replicas: 1
    selector:
    matchLabels:
    cdtestk: cdtestv
    template:
    metadata:
    labels:
    cdtestk: cdtestv
    spec:
    volumes: #和containerst同级
    - name: config-volume1
    configMap:
    name: lqhcm3 #configMap的名字
    - name: config-volume2
    configMap:
    name: lqhcm2 #configMap的名字

    containers:
    - name: redis01 #容器名
    image: redis #镜像名字
    volumeMounts:
    - name: config-volume1
    mountPath: /etc/config #容器内挂载的目录
    imagePullPolicy: IfNotPresent

    - name: nginx01 #容器名
    image: nginx #镜像名字
    volumeMounts:
    - name: config-volume2
    mountPath: /etc/config #容器内挂载的目录
    imagePullPolicy: IfNotPresent
  • 验证截图

k8s 数据存储相关

Secret 存储

Secret 是 Kubernetes 中用于存储敏感信息如密码、OAuth 令牌和 SSH 密钥等的一种资源。与 ConfigMap 类似,Secret 让你能够将敏感配置与容器镜像分离,以便更安全地管理和传输这些信息。Secret 的数据在 Kubernetes 内部是加密的,这为敏感数据的使用提供了一个更安全的方式。

  • 和 ConfigMap 没什么区别,也是 key-value,只是这种类型存储的内容 value 是加密的,在读的时候会自动给你解密。

Volume 存储

在 Kubernetes 中,Volume 是用来存储容器运行时数据的一个抽象概念。它与 Docker 卷类似,但是具有更多的功能。Volume 可以持久化数据,跨多个容器共享数据,并且可以在 Pod 的生命周期内保持状态。Volume 的使用可以解决容器存储的两个主要问题:数据的非持久化容器间共享文件

1、emptyDir 类型

  • 一个简单的空目录,用于存储临时数据。它在 Pod 被分配到节点时创建,并且只要该 Pod 在节点上运行就会一直存在。当 Pod 被删除时,emptyDir 中的数据也会被永久删除。

  • 新建一个两个容器共享一个数据卷的 deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: emptydir-deployment-test #这个pod的名字
    labels:
    namespace: space01 #声明一个新的命名空间

    spec:
    replicas: 1
    selector:
    matchLabels:
    edtestk: edtestv
    template:
    metadata:
    labels:
    edtestk: edtestv
    spec:
    volumes: #和containerst同级
    - name: emptydir-volume
    emptyDir: {}
    containers:
    - name: redis01 #容器名
    image: redis #镜像名字
    volumeMounts:
    - name: emptydir-volume
    mountPath: /lqh-empty-dir #容器内挂载的目录
    imagePullPolicy: IfNotPresent

    - name: nginx01 #容器名
    image: nginx #镜像名字
    volumeMounts:
    - name: emptydir-volume
    mountPath: /lqh-empty-dir #容器内挂载的目录
    imagePullPolicy: IfNotPresent
  • 验证截图

k8s 数据存储相关

2、hostpath 类型

  • 需要制定本地 node 的目录,master 节点新建 Pod 时如果本地没有这个目录会报错。这也是他的缺点,无法知道新建 pod 会被指派到哪个 node,要所有 node 都要新建这个目录。hostpath 的生命周期是脱离 Kubernetes 管理的,如果 Pod 被删除,存储在 hostpath 的数据依然存在。hostPath 通常只在单节点集群中使用,因为如果 Pod 被调度到其他节点后,它将访问不到原有节点的 hostPath,所以也做不到持久化存储。

  • 新建一个两个容器共享/nodepath 这个目录的 deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: hostpath-deployment-test #这个pod的名字
    labels:
    namespace: space01 #声明一个新的命名空间

    spec:
    replicas: 1
    selector:
    matchLabels:
    edtestk: edtestv
    template:
    metadata:
    labels:
    edtestk: edtestv
    spec:
    volumes: #和containerst同级
    - name: hostpath-volume
    hostPath:
    path: /nodepath #确保node节点有这个目录,不然新建pod报错
    type: Directory
    containers:
    - name: redis01 #容器名
    image: redis #镜像名字
    volumeMounts:
    - name: hostpath-volume
    mountPath: /lqh-hostpath #容器内挂载的目录
    imagePullPolicy: IfNotPresent

    - name: nginx01 #容器名
    image: nginx #镜像名字
    volumeMounts:
    - name: hostpath-volume
    mountPath: /lqh-hostpath #容器内挂载的目录
    imagePullPolicy: IfNotPresent
  • 验证截图

k8s 数据存储相关

PersistentVolumeClaim(PVC)存储

PersistentVolumeClaim (PVC) 是 Kubernetes 中用于请求存储资源的一种资源对象。在 Kubernetes 中,存储资源被抽象化并以两种主要资源对象的形式存在:PersistentVolume (PV) 和 PVC。

PersistentVolume (PV): PV 是集群中的一块存储,由管理员预先配置或由 Kubernetes 通过 StorageClass 动态创建。它相当于一块网络硬盘,可以是 NFS、iSCSI、云服务商提供的存储。

PersistentVolumeClaim (PVC): PVC 是用户对存储的请求。它允许用户不用关心底层存储的具体细节,只需要声明所需的存储大小和存取模式(比如,读写一次或只读多个节点等)。然后,Kubernetes 会自动处理在后端找到一个符合要求的 PV 或者动态创建一个 PV。

  • 创建一个 PersistentVolumeClaim (PVC) 且没有指定 storageClassName 属性,Kubernetes 的动态供给系统会自动使用默认 StorageClass 来创建一个 PersistentVolume,并将其与 PVC 绑定。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
namespace: dev
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
namespace: dev
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: kedacom@123
- name: MYSQL_DATABASE
value: bogelihai
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
  • 验证截图
k8s 数据存储相关


原文始发于微信公众号(给爷整笑辣):k8s 数据存储相关

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206868.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!