Kubernetes Volume

Kubernetes对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后,仍然可以使用之前的数据。不过,存储资源和计算资源(PU/内存)的管理方式完全不同。 为了能够屏蔽底层存储实现的细节,让用户方便使用,同时能让管理员方便管理,Kubernetes从v1.0版本就引入了PersistentVolumePersistentVolumelian两个资源对象来实现对存储的管理子系统

在同一个Pod中的多个容器能够共享Pod级别的存储卷Volume。Volume可以被定义为各种类型,多个容器各自进行挂载操作,将一个Volume挂载为容器内部需要的目录 !(media/15319904934331/15357008075657.jpg)

例子:Pod内包含两个容器:tomcat和busybox,在Pod级别设置Volume "app-logs",用于tomcat向其中写日志文件,busybox读日志文件

[root@master test]# cat abcdocker_volume.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: abcdocker-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: abcdocker-tomcat-dockerr
        image: daocloud.io/library/tomcat:8.5.21-jre8-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: app-logs
          mountPath: /usr/local/tomcat/logs
      - name: abcdocker-busybox-docker
        image: busybox
        imagePullPolicy: IfNotPresent
        command:
          - "sh"
          - "-c"
          - "tail -f /logs/catalina*.log"
        ports:
        - containerPort: 7777
        volumeMounts:
        - name: app-logs
          mountPath: /logs
      volumes:
      - name: app-logs
        emptyDir: {}

配置解释 这里设置的Volume名为app-logs,类型为emptyDir (也可以设置其他类型 K8s企业实践使用storageclass实现动态存储)。挂载到tomcat容器内的/usr/local/tomcat/logs目录,同时挂载到busybox容器内的/logs目录。tomcat容器在启动后会向/usr/local/tomcat/logs目录中写文件,busybox容器就可以读取其中的文件了。

busybox容器启动命令为tailf -f /logs/catalina*.log 我们可以通过kubectl logs命令查看busybox容器的内容 -w1079 -w1100

busybox log目录下对应的文件就是tomcat容器的/usr/local/tomcat/logs

通过 kubectl exec -it Pod名称 -c 容器名称 -- ls /usr/local/tomcat/logs 查看容器内部日志kubectl exec -it Pod -c 容器名称 -- tail -f /usr/local/tomcat/logs/catalina.2018-08-31.log

-w1100


Volume 是Pod能够被多个容器访问的共享存储。Kubneretes的Volume概念、用途和目的与Docker的Volume比较类似,但两者不能等价

Kubernetes中Volume定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,当容器停止或者容器时,Volume中的数据不会丢失

使用Volume需要在Pod上声明,然后在容器里引用该Volume并Mount到容器的某个目录。

例子:给tomcat Pod增加一个名为datavol的Volume,并且Mount到容器的/mydata-data目录上 volu

要使用Volume,pod需要指定Volume的类型和内容(spec.volumes字段),和映射到容器的位置(spec.containers.volumeMounts字段)

Copyright © i4t.com 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-04-26 21:31:27

results matching ""

    No results matching ""