Conectando um Servidor SMB no CCE
V1.0 – Agosto 2024
Versão | Autor | Descrição |
---|---|---|
V1.0 – 2024-08-01 | Gustavo Scovini 50037306 | Versão Inicial |
Introdução
Este guia o guiará pelas etapas para conectar e montar um servidor SMB existente em um pod Kubernetes usando o Cloud Container Engine (CCE) da Huawei Cloud.
Pré-requisitos
- Servidor Linux SMB implantado. Neste guia, será usado o Ubuntu 22.04:
https://ubuntu.com/tutorials/install-and-configure-samba#1-overview
- Kubectl:
https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/
- Compra de um EIP:
https://support.huaweicloud.com/intl/en-us/qs-eip/eip_qs_0001.html
- CCE (padrão) implantado no HWC com um EIP:
https://support.huaweicloud.com/intl/en-us/qs-cce/cce_qs_0008.html
- Nó criado no CCE:
https://support.huaweicloud.com/intl/en-us/api-cce/cce_02_0242.html
OBS: Todos os recursos neste guia são implantados na mesma rede (192.168.0.0/16). Se você planeja implantá-los em redes separadas, certifique-se de que haja conectividade adequada entre o servidor SMB e o ambiente CCE.
CONFIGURAÇÃO
Conectando ao cluster usando kubectl
Na página da instância CCE, clique em Visão Geral>EIP>Vincular
Agora, clique em kubectl > Configurar, copie o conteúdo do arquivo YAML e cole-o no arquivo .kube/config.
Instalando o Helm 3
Para instalar o driver CSI, usaremos o gerenciador de pacotes Helm. Siga estas etapas para concluir a instalação:
Windows (Chocolatey)
choco install kubernetes-helm
Linux (Script)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Instalando o Driver SMB CSI para Kubernetes
O driver SMB CSI permite que o Kubernetes acesse servidores SMB em nós Linux e Windows. Ele suporta o provisionamento dinâmico de Volumes Persistentes (PVs) por meio de Declarações de Volume Persistentes (PVCs), criando novos subdiretórios no servidor SMB. Para mais detalhes, visite a página do driver SMB CSI no GitHub.
helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.15.0 --set linux.kubelet=" /mnt/paas/kubernetes/kubelet"
OBS: O parâmetro –set linux.kubelet=” /mnt/paas/kubernetes/kubelet” é obrigatório aqui
Crie um segredo para armazenar credenciais SMB
kubectl create secret generic smbcreds --from-literal username=USERNAME --from-literal password="PASSWORD"
Crie um PV vinculado ao compartilhamento SMB
Crie um Arquivo pv-smb.yaml e edite source em volumeAttributes:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: smb.csi.k8s.io
name: pv-smb
spec:
capacity:
storage: 40Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: smb
mountOptions:
- dir_mode=0777
- file_mode=0777
csi:
driver: smb.csi.k8s.io
# volumeHandle format: {smb-server-address}#{sub-dir-name}#{share-name}
# make sure this value is unique for every share in the cluster
volumeHandle: smb-server.default.svc.cluster.local/share##
volumeAttributes:
source: //192.168.0.93/sambashare
nodeStageSecretRef:
name: smbcreds
namespace: default
Execute e crie o PV:
kubectl create -f pv-smb.yaml
Crie um PVC
Crie um arquivo pvc-smb-static.yaml:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-smb
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
volumeName: pv-smb
storageClassName: smb
Execute e crie o PVC:
kubectl create -f pvc-smb-static.yaml
Criar uma implantação web-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.5
ports:
- containerPort: 80
volumeMounts:
- name: nginx-storage
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-storage
persistentVolumeClaim:
claimName: pvc-smb
Executar e Crie a implantação:
kubectl create -f web-demo.yaml
Efetue login no contêiner e verifique o volume montado:
kubectl get pods
kubectl exec -it <container-name> -- df -h