Mi objetivo es configurar el mapa de configuración y luego usar el archivo de configuración en la aplicación Spark. Aquí están los detalles:
Tengo un archivo de configuración (test_config.cfg) que se ve así:
[test_tracker] url = http://localhost:8080/testsomething/ username = TEST password = SECRETCreé el mapa de configuración ejecutando el siguiente comando:
kubectl create configmap testcfg1 --from-file test_config.cfgAhora, tengo un archivo YAML (testprog.yaml) con especificaciones de SparkApplication que se ven así:
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: testprog namespace: default spec: type: Python pythonVersion: "3" mode: cluster image: "<ip-url>:5000/schemamatcher/schemamatcher-spark-py:latest" imagePullPolicy: Always mainApplicationFile: local:///opt/spark/dependencies/testprog.py arguments: ['s3a://f1.parquet', 's3a://f2.parquet', '--tokenizer-type', 'param'] sparkVersion: "3.0.0" restartPolicy: type: OnFailure onFailureRetries: 3 onFailureRetryInterval: 10 onSubmissionFailureRetries: 5 onSubmissionFailureRetryInterval: 20 driver: cores: 1 coreLimit: "1200m" memory: "16g" labels: version: 3.0.0 serviceAccount: default configMaps: - name: testcfg1 path: /mnt/config-maps executor: cores: 1 instances: 2 memory: "20g" labels: version: 3.0.0 hadoopConf: "fs.s3a.access.key": minio "fs.s3a.secret.key": minio123 "fs.s3a.endpoint": http://<ip-url>:9000Ahora, puedo ejecutar el programa usando:
kubectl apply -f testprog.yamlel pod simplemente funciona bien y no arroja ningún error. Pero no puedo ver mi archivo de configuración en la ruta dada y no entiendo por qué. Cuando el pod se está ejecutando, hago:
kubectl exec --stdin --tty test-driver -- /bin/bashy trato de buscar el archivo de configuración en la ruta /mnt/config-maps no veo nada. Intenté un par de cosas pero no tuve suerte. Además, parte de la documentación dice que el webhook de mutación debe configurarse y creo que el tipo anterior lo hizo, pero no estoy seguro de cómo verificarlo (pero creo que está ahí).
Cualquier ayuda sería genial ya que soy nuevo y todavía estoy aprendiendo sobre k8s.
Actualización: también he intentado actualizar las especificaciones de esta manera y ejecutar y aún no he tenido suerte.
volumes: - name: config configMap: name: testcfg1 driver: cores: 1 coreLimit: "1200m" memory: "16g" labels: version: 3.0.0 serviceAccount: default volumeMounts: - name: config mountPath: /opt/spark executor: cores: 1 instances: 2 memory: "20g" labels: version: 3.0.0 volumeMounts: - name: config mountPath: /opt/sparkNo estoy seguro de si este problema se resolvió en Spark v3.0.0 (que parece estar usando), pero hubo un error en Spark en Kubernetes que impedía que ConfigMaps se montara correctamente. Vea esta discusión: https://stackoverflow.com/a/58508313/8570169
Prueba esto:
kubectl apply -f manifest/spark-operator-with-webhook.yamlEsto habilitará la mutación de webhooks de admisión. Esto creará una implementación denominada sparkoperator y un servicio denominado spark-webhook para el webhook en el espacio de nombres spark-operator .