1
resposta

Persistência de dados no Kubernetes

Amigo boa tarde,

Baseado na configuração abaixo, não entendi para onde é mapeado o path /var/lib/mysql do container. Os dados são persistidos onde? No docker lembro que foi informado o diretório do host e o path do container.

Neste caso só informa o diretório do container, onde fica a persistência?

volumeMounts:

        - name: volume-mysql
          mountPath: /var/lib/mysql
1 resposta

Oi Davi,

Onde realmente fica persistido depende da configuração do volume. Repare que o volume tem o nome e esse nome se repete na seção volumes que possui aquele persistentVolumeClaim:

apiVersion: apps/v1beta1
kind: StatefulSet
//... configurações omitidas
    spec:
      containers:
        - name: container-mysql
          image: mysql:5.7.19
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_DATABASE
              value: "loja"
            - name: MYSQL_USER
              value: "root"
            - name: MYSQL_ALLOW_EMPTY_PASSWORD
              value: "1"
          volumeMounts:
            - name: volume-mysql
              mountPath: /var/lib/mysql
      volumes:
       - name: volume-mysql
         persistentVolumeClaim:
           claimName: configuracao-mysql

O claim por sua vez define detalhes sobre a permissão e tamanho. Onde realmente fica essa pasta no cluster o Kubernetes abstrai por vc.

Existem varias outros tipos de volumes. No exemplo abaixo (copiado da documentação) é usado EBS Volume da Amazon (sem ter um claim):

apiVersion: v1
kind: Pod
metadata:
  name: test-ebs
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-ebs
      name: test-volume
  volumes:
  - name: test-volume
    # This AWS EBS volume must already exist.
    awsElasticBlockStore:
      volumeID: <volume-id>
      fsType: ext4

Ou seja, nesse exemplo o volume será um Elastic Block Store na nuvem da Amazon.

Tudo bem?

abs, Nico