Я пишу интеграционные тесты с использованием библиотеки ScalaTest.Для настройки среды я использую Spark оператор в Kubernetes.Для работы с API K8s я использую библиотеку java-client .Я хочу создать Spark оператор в beforeAll методе и подписаться, чтобы посмотреть его статус.В событии AfterAll я хочу удалить модуль.Проблема в том, что когда я пытаюсь извлечь статус модуля с помощью java-клиента, я получаю Pending.В то время как команда kubectl get pods -w
дает такие результаты:
spark-example-driver 0/1 Pending 0 0s
spark-example-driver 0/1 Pending 0 0s
spark-example-driver 0/1 Init:0/1 0 0s
spark-example-driver 0/1 Init:ErrImageNeverPull 0 4
Так что состояние модуля инициализации не отображается даже через некоторое время.Что может быть причиной такого поведения?
Код:
val namespace = "default"
val watchPodsCalls = createWatchOnPodsCalls()
def createWatchOnPodsCalls() = {
client.getHttpClient.setReadTimeout(0, TimeUnit.MILLISECONDS)
val watch: Watch[V1Namespace] = Watch.createWatch(client,
coreApi.listNamespacedPodCall(namespace, "true", null, null, false, null, 0, null, 0, true, null, null),
new TypeToken[Watch.Response[V1Namespace]]{}.getType)
watch
}
override def beforeAll(): Unit = {
val body = convertYamlToJson()
val sparkAppCreation = apiInstance.createNamespacedCustomObject(group, version, namespace, plural, body,"true")
println(sparkAppCreation)
val watchPodsCallsIterator = createWatchOnPodsCalls()
while(watchPodsCallsIterator.hasNext){
println("Pod status: " + watchPodsCallsIterator.next().`object`.getStatus.getPhase)
}
override def afterAll(): Unit = {
val name = "spark-example"
val deleteOptions = new V1DeleteOptions
watchPodsCalls.close()
val sparkAppTeardown = apiInstance.deleteNamespacedCustomObject(group, version, namespace, plural, name, deleteOptions, 0, false, "Foreground")
println(sparkAppTeardown)
}