2020-08-06 Volume(数据卷)

1. Volume

  • Kubernetes中的Volume提供了在容器中挂载外部存储的能力
  • Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可以使用相应的Volume

2. emptyDir

创建一个空卷,挂载到Pod中的容器。Pod删除该卷也会被删除。
应用场景:Pod中容器之间数据共享。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: write
    image: centos
    command: ["bash","-c","for i in {1..100};do echo $i >> /data/hello;sleep 1;done"]
    volumeMounts:
    - name: data    ---使用的数据卷名称,跟volumes:name要能匹配上
      mountPath: /data

  - name: read
    image: centos
    command: ["bash","-c","tail -f /data/hello"]
    volumeMounts:
    - name: data
      mountPath: /data

volumes:    ---定义数据卷来源,支持定义多个数据卷
  - name: data
    emptyDir: {}

3. hostPath

挂载Node文件系统上文件或者目录到Pod中的容器。
应用场景:Pod中容器需要访问宿主机文件。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 36000
    volumeMounts:
    - name: data
      mountPath: /data    ---容器上的/data目录
  volumes:
  - name: data
    hostPath:
      path: /tmp    ---宿主机上的/tmp目录
      type: Directory    ---挂载的是一个目录

4. NFS(网络存储)

安装服务端(最好另外找一台机器专门做存储)

yum install nfs-utils -y
vi /etc/exports
/data/nfs *(rw,no_root_squash)    ---暴露/data/nfs 目录,支持所有的IP来访问,支持读写权限
systemctl start nfs

安装客户端(node节点都要安装)

yum install nfs-utils -y
systemctl start nfs

nfs.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html    ---网站根目录
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        nfs:
          server: 192.168.9.61   ---nfs服务地址
          path: /data/nfs    ---nfs暴露的目录

kubectl apply -f nfs.yaml ---创建nfs的pod

你可能感兴趣的:(2020-08-06 Volume(数据卷))