Kubernetes 之 Volume

网友投稿 844 2022-10-23

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Kubernetes 之 Volume

当一个容器崩溃了,kubelet将会尝试重启它,但是之前容器中的文件将会丢失。另外, 一个Pod中多个容器之间共享文件也是必需的。Kubernetes提供了一个Volume抽象概念来解决这些问题。

Volume的生命周期

Volume的生命周期与Pod一致。当Pod停止,Volume也将停止。

比Pod中的任何容器存活时间长。容器如果意外退出后,可能会自动重启。

如何使用Volume

通过 .spec.volumes字段为Pod指定一组Volume。

通过 .spec.containers[*].volumeMounts为某一个容器挂在一组Volume。

示例:创建一个Nginx的deployment并暴露出去,在浏览器中请求该服务,显示"Hello World!"

apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: selector: app: nginx-app ports: - port: 80 targetPort: 80--- apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: selector: matchLabels: app: nginx-app template: metadata: labels: app: nginx-app spec: containers: - name: nginx-app image: nginx ports: - containerPort: 80 volumeMounts: - mountPath: /usr/share/nginx/html name: web-dir initContainers: - name: busybox image: busybox command: - "sh" - "-c" - "echo 'Hello World!'> /web/index.html" volumeMounts: - mountPath: /web name: web-dir volumes: - name: web-dir emptyDir: {}

执行命令:

kubectl apply -f https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/volumes/example-01.yamlkubectl proxy --port 8081

在浏览器打开http://localhost:8081/api/v1/namespaces/default/services/nginx-service/proxy/就可以看见 HelloWorld!

Volume的类型

Kubenetes支持的Volume很多,详细的可以看https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes。

我大致将其分为如下四类:

云提供者提供的存储资源: awsElasticBlockStore、 azureDisk、 azureFile、 gcePersistentDisk、 vsphereVolume(vSphere)和 cinder(OpenStack)。Kubernetes对象和集群中的存储资源: configMap、 secret、 downwardAPI、 emptyDir、 projected、 local、 hostPath和 persistentVolumeClaim。其他外部存储资源: cephfs、 fc(fibre channel)、 flocker、 gitRepo(deprecated)、 glusterfs、 iscsi、 nfs、 portworxVolume、 quobyte、 rbd、 scaleIO 和 storageos。插件: ContainerStorageInterface(CSI) 和 FlexVolume

emptyDir

该类型的Volume是一个临时的空间,主要用来临时存储数据。当Pod被删除(被kubelet驱逐,手动删除等)时,在该类型Volume上的数据会被永久清除。

configMap、secret和downwardAPI

ConfigMap 和 Secret 是Kubernetes对象。ConfigMap用于存储配置信息,Secret用来存储敏感信息(比如密码),这两种资源可以挂载到Pod上作为Volume。downwardAPI类型的Volume用来使应用程序可以使用下行的API数据。

如果一个应用程序需要很多很多配置信息和敏感信息,如果直接挂载Pod上会很麻烦。projected可以帮助我们将多个volume映射到同一个目录下。

上一篇:小马智行与四维图新达成战略合作
下一篇:匈牙利总理:反对向乌派遣国际维和部队
相关文章

 发表评论

暂时没有评论,来抢沙发吧~