AIOps 一场颠覆传统运维的盛筵
844
2022-10-23
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映射到同一个目录下。
发表评论
暂时没有评论,来抢沙发吧~