Este artículo describe cómo usar flexVolume para montar la carpeta compartida de Windows, el clúster k8s está construido por rke
flexVolume
FlexVolume es una interfaz de complemento fuera del árbol que ha estado en Kubernetes desde la versión 1.2 (antes de CSI). Utiliza un modelo basado en exec para interactuar con el controlador. El usuario debe instalar el archivo ejecutable del controlador FlexVolume en el complemento de volumen predefinido en cada nodo (en algunos casos, el nodo maestro).
Pod interactúa con el controlador Flexvolume a través del complemento flexvolume en árbol. Por favor, consulte aquí para más detalles .
juliohm / cifs
El complemento de volumen basado en Flexvolume permite a los clústeres montar volúmenes CIFS (recursos compartidos de samba), consulte aquí para más detalles
Como usar
-
Instale cifs-utils en cada nodo para montar directorios compartidos
sudo apt-get install -y cifs-utils
-
Instale el complemento juliohm / cifs en cada nodo
Aquí puede usar DaemonSet para implementar automáticamente en el nodo:
git clone https://github.com/juliohm1978/kubernetes-cifs-volumedriver.git
cd kubernetes-cifs-volumedriver
make install
El pod montará el directorio / usr / libexec / kubernetes / kubelet-plugins / volume / exec / del nodo y copiará los archivos
Prueba
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
nodeSelector:
mediatek/role: app
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "juliohm/cifs"
fsType: "cifs"
options:
opts: username=[user_name],password=[pass_word],domain=[domain],file_mode=0755,dir_mode=0755
server: [ip_or_host_name]
share: [share_folder]
Ocultar información confidencial
En el uso real, la información confidencial, como la contraseña del nombre de usuario, no debe colocarse directamente en las opciones, sino que puede colocarse en secreto:
---
apiVersion: v1
data:
password: dXNlcjEyMw==
username: cGFzczEyMw==
kind: Secret
metadata:
name: my-secret
type: juliohm/cifs
---
...
options:
opts: domain=Foo
server: 10.0.0.114
share: /publico
secretRef:
name: my-secret
depurar
En uso real, encontré algunos problemas:
- El volumen no se puede montar y el pod de descripción encuentra un error: el tiempo de espera expiró esperando que los volúmenes se adjunten
ps. Después de actualizar k8s a 1.17.x con rke, se imprimirá un mensaje más detallado:
Incapaz de adjuntar o montar volúmenes: volúmenes desmontados = [xxx], volúmenes no adjuntos = [xxx default-token-rcxrw]: no se pudo obtener el complemento de volumeSpec para el volumen "xxx" err = ningún complemento de volumen coincide
Imprima el registro del contenedor de kubelet, sugiriendo que no se puede encontrar el complemento, enable-controller-attach-detach: false y extra_binds: - "/ usr / libexec / kubernetes / kubelet-plugins: / var / lib / kubelet / volumeplugins" se han configurado, Y compruebe que el directorio de complementos en el pod existe, este problema me ha preocupado durante mucho tiempo.
Finalmente, mire cuidadosamente la documentación de flexvolume y encuentre tal pasaje
El directorio de complementos predeterminado es / usr / libexec / kubernetes / kubelet-plugins / volume / exec /. Se puede cambiar en kubelet mediante el indicador --volume-plugin-dir, y en el administrador del controlador mediante el indicador --flex-volume-plugin-dir.
Tenga en cuenta que el directorio de complementos mencionado aquí es / usr / libexec / kubernetes / kubelet-plugins / volume / exec / en lugar de / var / lib / kubelet / volumeplugins, y luego intente pasar los parámetros de inicio a kubelet:
services:
kubelet:
extra_args:
volume-plugin-dir: /var/lib/kubelet/volumeplugins/volume/exec
Después de reiniciar kubelet!