Kubernetes 中的几种存储
一个运行中的容器,缺省情况下,对文件系统的写入,都是发生在其分层文件系统的可写层的,一旦容器运行结束,所有写入都会被丢弃。因此需要对持久化支持。
Kubernetes 中通过 Volume 的方式提供对存储的支持。下面对一些常见的存储概念进行一点简要的说明。
EmptyDir
顾名思义,EmptyDir是一个空目录,他的生命周期和所属的 Pod 是完全一致的,可能读者会奇怪,那还要他做什么?EmptyDir的用处是,可以在同一 Pod 内的不同容器之间共享工作过程中产生的文件。
缺省情况下,EmptyDir 是使用主机磁盘进行存储的,也可以设置emptyDir.medium 字段的值为Memory,来提高运行速度,但是这种设置,对该卷的占用会消耗容器的内存份额。
apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: gcr.io/google_containers/test-webserver name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {}
HostPath
这种会把宿主机上的指定卷加载到容器之中,当然,如果 Pod 发生跨主机的重建,其内容就难保证了。
这种卷一般和DaemonSet搭配使用,用来操作主机文件,例如进行日志采集的 FLK 中的 FluentD 就采用这种方式,加载主机的容器日志目录,达到收集本主机所有日志的目的。
apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: gcr.io/google_containers/test-webserver name: test-container volumeMounts: - mountPath: /test-pd name: test-volume volumes: - name: test-volume hostPath: # directory location on host path: /data
NFS/GlusterFS/CephFS/AWS/GCE 等等
作为一个容器集群,支持网络存储自然是重中之重了,Kubernetes 支持为数众多的云提供商和网络存储方案。
各种支持的方式不尽相同,例如 GlusterFS 需要创建 Endpoint,Ceph/NFS 之流就没这么麻烦了。
各种个性配置可移步参考文档。
ConfigMap 和 Secret
镜像使用的过程中,经常需要利用配置文件、启动脚本等方式来影响容器的运行方式,如果仅有少量配置,我们可以使用环境变量的方式来进行配置。然而对于一些较为复杂的配置,例如 Apache 之类,就很难用这种方式进行控制了。另外一些敏感信息暴露在 YAML 中也是不合适的。
ConfigMap 和 Secret 除了使用文件方式进行应用之外,还有其他的应用方式;这里仅就文件方式做一点说明。
例如下面的 ConfigMap,将一个存储在 ConfigMap 中的配置目录加载到卷中。
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "ls /etc/config/" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: # Provide the name of the ConfigMap containing the files you want # to add to the container name: special-config restartPolicy: Never
注意,这里的 ConfigMap 会映射为一个目录,ConfigMap 的 Key 就是文件名,每个 Value 就是文件内容,比如下面命令用一个目录创建一个 ConfigMap:
kubectl create configmap \ game-config \ --from-file=docs/user-guide/configmap/kubectl
创建一个 Secret:
kubectl create secret generic \ db-user-pass --from-file=./username.txt \ --from-file=./password.txt
使用 Volume 加载 Secret:
apiVersion: v1 kind: Pod metadata: name: mypod namespace: myns spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: /etc/foo readOnly: true volumes: - name: foo secret: secretName: mysecret
可以看到 Secret 和 ConfigMap 的创建和使用是很相似的。在 RBAC 中,Secret 和 ConfigMap 可以进行分别赋权,以此限定操作人员的可见、可控权限。
PV & PVC
PersistentVolume 和 PersistentVolumeClaim 提供了对存储支持的抽象,也提供了基础设施和应用之间的分界,管理员创建一系列的 PV 提供存储,然后为应用提供 PVC,应用程序仅需要加载一个 PVC,就可以进行访问。
而 1.5 之后又提供了 PV 的动态供应。可以不经 PV 步骤直接创建 PVC。
本文转自中文社区-Kubernetes 中的几种存储
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes 的证书认证
今天让我们聊聊 Kubernetes 的公私钥和证书认证。 本文内容会提及如何根据需要对 CA、公私钥进行组织并对集群进行设置。 Kubernetes 的组件中有很多不同的地方可以放置证书之类的东西。在进行集群安装的时候,我感觉有一百多亿个不同的命令参数是用来设置证书、密钥的,真不明白是怎么弄到一起工作的。 当然了,没有一百亿那么多的参数,不过的确很多的。比如 API Server 的参数吧,有大概 16 个参数是跟这些东西有关的(下面是节选): --cert-dir string The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. (default "/var/run/kubernetes") --client-ca-file string If set, any request presenting a client certificate signed by one ...
- 下一篇
调查研究 | 2份权威报告分析Kubernetes部署模式
Kubernetes市场的大幅增长是有据可查的。它是目前使用最广泛的编排平台,但不是唯一一个。Kubernetes的广泛使用迫使它加速成熟并且使技术社区迅速革新。随着新的和更多的厂商在云原生空间竞争,它使得市场更为分裂。 容器技术引起了Kubernetes编排平台的提升和发展。现在,容器的最大用户是运行着他们自己的数据中心、超过1000个员工的企业。这些企业也是Kubernetes的最大使用者——市场的力量推动着项目的发展和采用。不过,这些趋势只是说明了一部分。 以面向应用的架构转型已经开始,市场中的许多因素将影响我们如何看待这种变化。他们包含多种组织部署的工作负载类型,组织的规模,用户和供应商为了更大的市场消费如何部署云原生架构。 开发人员正在寻找容器的转变,在这种规模下采用,来理解使用是如何影响了整个市场变成一个复杂的流程。我们自己研究的数据和CNCF最近发表的调查提供了一些Kubernetes用户遇到的成功和挑战,反过来可以说明我们当今更广泛的生态系统的转变。 两份Kubernetes调查报告的数据分析 在CNCF2017年秋季的调查中,764位受访者直接通过与CNCF参与者、社...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题