Implante um aplicativo em contêiner com o NetApp storage persistente
Implante um aplicativo em contêiner no seu cluster do vSphere Kubernetes Service usando o NetApp ONTAP storage persistente. Os exemplos a seguir demonstram como implantar um banco de dados PostgreSQL usando storage NAS (ontap-nas) ou storage SAN iSCSI (ontap-san).
A seguinte configuração YAML define POSTGRES_USER / POSTGRES_PASSWORD diretamente no manifesto. Em produção, recomenda-se usar os Segredos do Kubernetes para gerenciar informações sensíveis, como credenciais de banco de dados.
Você pode implantar um aplicativo de contêiner PostgreSQL com suporte em um volume persistente NFS provisionado pelo driver ontap-nas. O exemplo a seguir demonstra como criar um PersistentVolumeClaim (PVC) e uma implantação para o PostgreSQL.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
storageClassName: sc-nas # Specify the StorageClass for dynamic provisioning
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
securityContext:
fsGroup: 999 # Ensures proper permissions for the mounted volume (PostgreSQL default user is 999)
containers:
- name: postgres
image: postgres:15
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 999 # PostgreSQL default user ID
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
env:
- name: POSTGRES_DB
value: "postgres"
- name: POSTGRES_USER
value: "<username>"
- name: POSTGRES_PASSWORD
value: "<password>"
- name: PGDATA
value: "/var/lib/postgresql/data/pgdata"
ports:
- containerPort: 5432
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-storage
subPath: postgres-data # Ensures data is stored in a subdirectory to avoid permission issues
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
selector:
app: postgres
Use o seguinte arquivo YAML para implantar um aplicativo de contêiner PostgreSQL com suporte em um volume persistente iSCSI provisionado pelo driver ontap-san. A estratégia de implantação Recreate garante que o pod seja completamente encerrado antes que um novo seja iniciado, o que é necessário para volumes iSCSI ReadWriteOnce e evita corrupção de dados durante reinicializações do pod. Essa configuração oferece suporte à persistência de dados em casos de exclusão e recriação de pods e é compatível com snapshots de volume do Trident e operações de backup e restauração.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-block-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: sc-iscsi # Must map to an ontap-san driver
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-block-app
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
# 1. POD LEVEL SECURITY CONTEXT
securityContext:
runAsNonRoot: true
runAsUser: 999 # Official Postgres image default user ID
runAsGroup: 999 # Official Postgres image default group ID
fsGroup: 999
seccompProfile:
type: RuntimeDefault
containers:
- name: postgres
image: postgres:15
# 2. CONTAINER LEVEL SECURITY CONTEXT
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
env:
- name: POSTGRES_DB
value: "postgres"
- name: POSTGRES_USER
value: "<username>"
- name: POSTGRES_PASSWORD
value: "<password>"
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
name: postgres
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-block-storage
subPath: postgres-data
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: postgres-block-storage
persistentVolumeClaim:
claimName: postgres-block-pvc
---
apiVersion: v1
kind: Service
metadata:
name: postgres-service
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432
selector:
app: postgres
Valide a implantação do banco de dados
Após implantar a aplicação, verifique se os pods estão em execução e se o banco de dados está operacional. Use os seguintes comandos para verificar o status dos pods, PVCs e serviços. Certifique-se de que os pods estão em execução e que os PVCs estão vinculados aos volumes apropriados.
kubectl get all -n <namespace>
kubectl get pvc -n <namespace>
Dependendo do protocolo utilizado, o storage de back-end é um volume, qtree ou LUN. Você pode verificar o storage provisionado no sistema ONTAP descrevendo o PersistentVolume (PV) para recuperar o nome interno do volume e, em seguida, usá-lo nos comandos da CLI do ONTAP para obter os detalhes do storage. Use o seguinte comando para descrever o PV e recuperar o nome interno do volume:
kubectl describe pv/<pv-name>
Copie o nome do volume interno da saída e execute o seguinte comando para obter os detalhes do storage a partir da CLI do ONTAP.
Para volumes NAS:
volume show -vserver <vserver> -volume <internal-volume-name>
Para LUNs SAN, execute o seguinte comando para obter os detalhes da LUN a partir da CLI do ONTAP:
lun show -vserver <vserver> -volume <internal-volume-name>
Se você utilizou `nconnect`opções de montagem na classe de storage NAS ou NAS Economy, você pode verificar o número de conexões TCP ativas do nó de trabalho para o servidor de storage.
Primeiro, liste as configurações do back-end do Trident para encontrar o nome do back-end e, em seguida, descreva-o para recuperar o nome do vserver e o LIF de dados:
kubectl get tbc -n trident
kubectl describe tbc <backend-name> -n trident
Em seguida, faça login no cluster ONTAP e execute o seguinte comando, substituindo o LIF de dados da saída acima:
network connections active show -local-address <data-lif> -local-port 2049
Após os pods estarem em execução, conecte-se ao banco de dados e verifique as operações de dados.
-
Encaminhe a porta do serviço PostgreSQL para sua máquina local:
kubectl port-forward svc/postgres-service 5432:5432 -n <namespace> -
A partir de um terminal diferente, conecte-se ao banco de dados usando psql:
psql "postgresql://<username>:<password>@127.0.0.1:5432/postgres" -
Crie um banco de dados e uma tabela e, em seguida, preencha a tabela com dados:
CREATE DATABASE employee;Alterne para o novo banco de dados (metacomando psql):
\c employeeCrie a tabela, insira uma linha e consulte os resultados:
CREATE TABLE employees ( id SERIAL PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, department VARCHAR(50), hire_date DATE DEFAULT CURRENT_DATE, salary NUMERIC(10, 2) ); INSERT INTO employees (first_name, last_name, email, department, salary) VALUES ('John', 'Doe', 'john.doe@example.com', 'Engineering', 85000.00); SELECT * FROM employees;
Demonstração em vídeo
O vídeo a seguir demonstra a instalação do Trident em um cluster Kubernetes vSphere e a implantação de um banco de dados PostgreSQL com storage persistente usando o Trident.