Uso do volume de armazenamento em Kubernetes

Índice

1. Por que usar volumes de armazenamento?

2. volume de armazenamento vazioDir

1. Conceito

2. Crie Pod vazioDir

3. Verifique o volume de armazenamento vazioDir

 3. volume de armazenamento hostPath

1. Conceito

2. Crie pod hostPath

 3. Verifique o volume de armazenamento hostPath

3. Volume de armazenamento compartilhado nfs

1. Conceito

2. Instale o nfs e configure o serviço nfs

 3.Criar pod

4. Verifique o volume de armazenamento NFS


1. Por que usar volumes de armazenamento?

O ciclo de vida dos arquivos no disco contêiner é de curta duração, o que causa alguns problemas ao executar aplicativos importantes no contêiner. Primeiro, quando um contêiner trava, o kubelet irá reiniciá-lo, mas os arquivos no contêiner serão perdidos - o contêiner será reiniciado em um estado limpo (o estado original da imagem). Em segundo lugar, quando vários contêineres estão sendo executados simultaneamente em um pod, os arquivos geralmente precisam ser compartilhados entre esses contêineres. A abstração de Volume no Kubernetes resolve muito bem esses problemas. Os contêineres no pod compartilham o volume por meio do contêiner Pause.

2. volume de armazenamento vazioDir

1. Conceito

Quando um pod é atribuído a um nó, o volume emptyDir é criado primeiro e existe enquanto o pod estiver em execução no nó. Como indica o nome do volume, ele está inicialmente vazio. Os contêineres em um pod podem ler e gravar os mesmos arquivos no volume emptyDir, embora o volume possa ser montado no mesmo caminho ou em caminhos diferentes em cada contêiner. Quando um pod é removido de um nó por qualquer motivo, os dados em emptyDir são excluídos permanentemente.

2. Crie Pod vazioDir

vim pod-emptydir.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-emptydir
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: nginx:1.14
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    volumeMounts:                              #定义容器挂载详细信息
    - name: html                               #挂载存储卷的名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷
      mountPath: /usr/share/nginx/html/        #挂载到容器中的目录路径
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /data/                        #挂载到容器中的目录路径
    command: ["/bin/sh","-c","while true;do echo $(date) >> /data/index.html;sleep 2;done"]  #执行死循环,向挂载的目录下文件写入数据
  volumes:         #定义存储卷
  - name: html     #定义存储卷名称
    emptyDir: {}   #定义存储卷类型

3. Verifique o volume de armazenamento vazioDir

kubectl apply -f pod-emptydir.yaml
kubectl get pods -o wide

在上面定义了2个容器,其中一个容器是输入日期到index.html中,然后验证访问nginx的html是否可以获取日期。以验证两个容器之间挂载的emptyDir实现共享。
curl 10.244.2.58

 3. volume de armazenamento hostPath

1. Conceito

hostPath permite montar o sistema de arquivos do nó no pod. Se o Pod precisar usar arquivos no Node, hostPath poderá ser usado. Os pods executados no mesmo nó e usando o mesmo caminho no volume hostPath podem ver os mesmos arquivos.

  • O volume hostPath monta arquivos ou diretórios no sistema de arquivos do nó no cluster.
  • hostPath pode obter armazenamento persistente, mas também causará perda de dados quando o nó falhar.

2. Crie pod hostPath

vim pod-hostpath.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-hostpath
spec:
  containers:
  - name: myapp
    image: nginx:1.14
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: false
  volumes:                       #volumes字段定义了paues容器关联的宿主机或分布式文件系统存储卷
  - name: html                   #定义存储卷名称              
    hostPath:                    #定义宿主机存储路径
      path: /data/pod/volume1    #挂载宿主机目录的路径
      type: DirectoryOrCreate    #定义类型,如果宿主机没有此目录则自动创建

 3. Verifique o volume de armazenamento hostPath

kubectl apply -f pod-hostpath.yaml 
kubectl get pods -owide

#在node01节点
echo 'node01.com' > /data/pod/volume1/index.html

curl 10.244.2.60

3. Volume de armazenamento compartilhado nfs

1. Conceito

NFS é a abreviatura de Network File System, que é o sistema de arquivos de rede. No Kubernetes, o NFS pode ser montado em um pod por meio de configuração simples e os dados no NFS podem ser salvos permanentemente. Ao mesmo tempo, o NFS suporta operações de gravação simultâneas.

vazioDir pode fornecer compartilhamento de arquivos entre contêineres diferentes, mas não pode armazená-lo; hostPath pode fornecer compartilhamento e armazenamento de arquivos para contêineres diferentes, mas está sujeito a restrições de nó e não pode ser compartilhado entre nós; nesse caso, armazenamento de rede (NAS) é necessário, ou seja, ambos são convenientes para armazenar contêineres e podem ser acessados ​​​​a partir de qualquer nó do cluster. Este artigo usa o NFS como exemplo para teste.

2. Instale o nfs e configure o serviço nfs

#配置nfs服务
mkdir /data/volumes -p
chmod 777 /data/volumes
echo '<h1> nfs <h1>' > /data/volumes

vim /etc/exports
/data/volumes 192.168.88.0/24(rw,no_root_squash,sync)

systemctl start rpcbind
systemctl start nfs

showmount -e

 3.Criar pod

vim pod-nfs.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-nfs
spec:
  containers:
  - name: myapp
    image: nginx:1.14
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
  - name: html
    nfs:                          #定义nfs存储卷信息
      path: /data/volumes         #挂载nfs服务器的共享目录
      server: 192.168.88.60       #nfs服务器的ip地址

4. Verifique o volume de armazenamento NFS

kubectl apply -f pod-nfs.yaml

curl 10.244.2.61

 

Acho que você gosta

Origin blog.csdn.net/q1y2y3/article/details/132231832
Recomendado
Clasificación