Search in sources :

Example 71 with Kafka

use of io.strimzi.api.kafka.model.Kafka in project strimzi by strimzi.

the class KafkaUtils method waitForKafkaStatusUpdate.

/**
 * Waits for the Kafka Status to be updated after changed. It checks the generation and observed generation to
 * ensure the status is up to date.
 *
 * @param namespaceName Namespace name
 * @param clusterName   Name of the Kafka cluster which should be checked
 */
public static void waitForKafkaStatusUpdate(String namespaceName, String clusterName) {
    LOGGER.info("Waiting for Kafka status to be updated");
    TestUtils.waitFor("KafkaStatus update", Constants.GLOBAL_POLL_INTERVAL, Constants.GLOBAL_STATUS_TIMEOUT, () -> {
        Kafka k = KafkaResource.kafkaClient().inNamespace(namespaceName).withName(clusterName).get();
        return k.getMetadata().getGeneration() == k.getStatus().getObservedGeneration();
    });
}
Also used : Kafka(io.strimzi.api.kafka.model.Kafka)

Example 72 with Kafka

use of io.strimzi.api.kafka.model.Kafka in project strimzi by strimzi.

the class KafkaCluster method generateJmxSecret.

/**
 * Generate the Secret containing the username and password to secure the jmx port on the Kafka brokers.
 *
 * @param currentSecret The existing Secret with the current JMX credentials. Null if no secret exists yet.
 *
 * @return The generated Secret
 */
public Secret generateJmxSecret(Secret currentSecret) {
    if (isJmxAuthenticated) {
        PasswordGenerator passwordGenerator = new PasswordGenerator(16);
        Map<String, String> data = new HashMap<>(2);
        if (currentSecret != null && currentSecret.getData() != null) {
            data.put(SECRET_JMX_USERNAME_KEY, currentSecret.getData().computeIfAbsent(SECRET_JMX_USERNAME_KEY, (key) -> Util.encodeToBase64(passwordGenerator.generate())));
            data.put(SECRET_JMX_PASSWORD_KEY, currentSecret.getData().computeIfAbsent(SECRET_JMX_PASSWORD_KEY, (key) -> Util.encodeToBase64(passwordGenerator.generate())));
        } else {
            data.put(SECRET_JMX_USERNAME_KEY, Util.encodeToBase64(passwordGenerator.generate()));
            data.put(SECRET_JMX_PASSWORD_KEY, Util.encodeToBase64(passwordGenerator.generate()));
        }
        return createJmxSecret(KafkaResources.kafkaJmxSecretName(cluster), data);
    } else {
        return null;
    }
}
Also used : VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) ExternalTrafficPolicy(io.strimzi.api.kafka.model.template.ExternalTrafficPolicy) KafkaClusterSpec(io.strimzi.api.kafka.model.KafkaClusterSpec) KafkaExporterResources(io.strimzi.api.kafka.model.KafkaExporterResources) Storage(io.strimzi.api.kafka.model.storage.Storage) HTTPIngressPath(io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath) Rack(io.strimzi.api.kafka.model.Rack) ServicePort(io.fabric8.kubernetes.api.model.ServicePort) Annotations(io.strimzi.operator.common.Annotations) IngressTLS(io.fabric8.kubernetes.api.model.networking.v1.IngressTLS) PodDisruptionBudget(io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget) Collections.singletonList(java.util.Collections.singletonList) NetworkPolicyIngressRule(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyIngressRule) Route(io.fabric8.openshift.api.model.Route) IngressRule(io.fabric8.kubernetes.api.model.networking.v1.IngressRule) KafkaResources(io.strimzi.api.kafka.model.KafkaResources) IngressTLSBuilder(io.fabric8.kubernetes.api.model.networking.v1.IngressTLSBuilder) KafkaClusterTemplate(io.strimzi.api.kafka.model.template.KafkaClusterTemplate) Map(java.util.Map) ContainerBuilder(io.fabric8.kubernetes.api.model.ContainerBuilder) JsonObject(io.vertx.core.json.JsonObject) ContainerEnvVar(io.strimzi.api.kafka.model.ContainerEnvVar) KafkaSpec(io.strimzi.api.kafka.model.KafkaSpec) Affinity(io.fabric8.kubernetes.api.model.Affinity) IngressBuilder(io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder) ProbeBuilder(io.strimzi.api.kafka.model.ProbeBuilder) Probe(io.strimzi.api.kafka.model.Probe) StatusUtils(io.strimzi.operator.common.operator.resource.StatusUtils) SubjectBuilder(io.fabric8.kubernetes.api.model.rbac.SubjectBuilder) RouteBuilder(io.fabric8.openshift.api.model.RouteBuilder) ListenersUtils.isListenerWithOAuth(io.strimzi.operator.cluster.model.ListenersUtils.isListenerWithOAuth) Set(java.util.Set) RoleRefBuilder(io.fabric8.kubernetes.api.model.rbac.RoleRefBuilder) HasMetadata(io.fabric8.kubernetes.api.model.HasMetadata) Collectors(java.util.stream.Collectors) CruiseControlResources(io.strimzi.api.kafka.model.CruiseControlResources) RoleRef(io.fabric8.kubernetes.api.model.rbac.RoleRef) List(java.util.List) Labels(io.strimzi.operator.common.model.Labels) StrimziPodSet(io.strimzi.api.kafka.model.StrimziPodSet) Collections.addAll(java.util.Collections.addAll) Ingress(io.fabric8.kubernetes.api.model.networking.v1.Ingress) PasswordGenerator(io.strimzi.operator.common.PasswordGenerator) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) Secret(io.fabric8.kubernetes.api.model.Secret) NetworkPolicyPeerBuilder(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyPeerBuilder) Condition(io.strimzi.api.kafka.model.status.Condition) ClusterOperatorConfig(io.strimzi.operator.cluster.ClusterOperatorConfig) Uuid(org.apache.kafka.common.Uuid) ClusterRoleBinding(io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) GenericKafkaListener(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListener) Container(io.fabric8.kubernetes.api.model.Container) Subject(io.fabric8.kubernetes.api.model.rbac.Subject) HashMap(java.util.HashMap) LocalObjectReference(io.fabric8.kubernetes.api.model.LocalObjectReference) CertAndKey(io.strimzi.certs.CertAndKey) Function(java.util.function.Function) MetricsAndLogging(io.strimzi.operator.common.MetricsAndLogging) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) SecurityContext(io.fabric8.kubernetes.api.model.SecurityContext) KafkaAuthorization(io.strimzi.api.kafka.model.KafkaAuthorization) InlineLogging(io.strimzi.api.kafka.model.InlineLogging) ListenersUtils.isListenerWithCustomAuth(io.strimzi.operator.cluster.model.ListenersUtils.isListenerWithCustomAuth) Collections.singletonMap(java.util.Collections.singletonMap) Service(io.fabric8.kubernetes.api.model.Service) NetworkPolicyBuilder(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyBuilder) KafkaSpecChecker(io.strimzi.operator.cluster.operator.resource.KafkaSpecChecker) Volume(io.fabric8.kubernetes.api.model.Volume) NetworkPolicyIngressRuleBuilder(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyIngressRuleBuilder) CertAndKeySecretSource(io.strimzi.api.kafka.model.CertAndKeySecretSource) CruiseControlConfigurationParameters(io.strimzi.operator.cluster.operator.resource.cruisecontrol.CruiseControlConfigurationParameters) KafkaAuthorizationKeycloak(io.strimzi.api.kafka.model.KafkaAuthorizationKeycloak) KafkaListenerAuthenticationCustom(io.strimzi.api.kafka.model.listener.KafkaListenerAuthenticationCustom) IOException(java.io.IOException) StatefulSet(io.fabric8.kubernetes.api.model.apps.StatefulSet) KafkaListenerAuthenticationOAuth(io.strimzi.api.kafka.model.listener.KafkaListenerAuthenticationOAuth) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) AffinityBuilder(io.fabric8.kubernetes.api.model.AffinityBuilder) ContainerPort(io.fabric8.kubernetes.api.model.ContainerPort) Logging(io.strimzi.api.kafka.model.Logging) Reconciliation(io.strimzi.operator.common.Reconciliation) JsonArray(io.vertx.core.json.JsonArray) IngressRuleBuilder(io.fabric8.kubernetes.api.model.networking.v1.IngressRuleBuilder) Util(io.strimzi.operator.common.Util) KafkaListenerType(io.strimzi.api.kafka.model.listener.arraylistener.KafkaListenerType) NetworkPolicyPeer(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyPeer) NetworkPolicy(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy) CruiseControlSpec(io.strimzi.api.kafka.model.CruiseControlSpec) Kafka(io.strimzi.api.kafka.model.Kafka) CRUISE_CONTROL_METRIC_REPORTER(io.strimzi.operator.cluster.model.CruiseControl.CRUISE_CONTROL_METRIC_REPORTER) HTTPIngressPathBuilder(io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPathBuilder) Collections(java.util.Collections) HashMap(java.util.HashMap) PasswordGenerator(io.strimzi.operator.common.PasswordGenerator)

Example 73 with Kafka

use of io.strimzi.api.kafka.model.Kafka in project strimzi by strimzi.

the class KafkaReconciler method scaleDown.

/**
 * Scales down the Kafka cluster if needed. Kafka scale-down is done in one go.
 *
 * @return  Future which completes when the scale-down is finished
 */
protected Future<Void> scaleDown() {
    if (currentReplicas != 0 && currentReplicas > kafka.getReplicas()) {
        // The previous (current) number of replicas is bigger than desired => we should scale-down
        LOGGER.infoCr(reconciliation, "Scaling Kafka down from {} to {} replicas", currentReplicas, kafka.getReplicas());
        if (featureGates.useStrimziPodSetsEnabled()) {
            Set<String> desiredPodNames = new HashSet<>(kafka.getReplicas());
            for (int i = 0; i < kafka.getReplicas(); i++) {
                desiredPodNames.add(kafka.getPodName(i));
            }
            return strimziPodSetOperator.getAsync(reconciliation.namespace(), kafka.getName()).compose(podSet -> {
                if (podSet == null) {
                    return Future.succeededFuture();
                } else {
                    List<Map<String, Object>> desiredPods = podSet.getSpec().getPods().stream().filter(pod -> desiredPodNames.contains(PodSetUtils.mapToPod(pod).getMetadata().getName())).collect(Collectors.toList());
                    StrimziPodSet scaledDownPodSet = new StrimziPodSetBuilder(podSet).editSpec().withPods(desiredPods).endSpec().build();
                    return strimziPodSetOperator.reconcile(reconciliation, reconciliation.namespace(), kafka.getName(), scaledDownPodSet).map((Void) null);
                }
            });
        } else {
            return stsOperator.scaleDown(reconciliation, reconciliation.namespace(), kafka.getName(), kafka.getReplicas()).map((Void) null);
        }
    } else {
        // desired replicas => no need to scale-down
        return Future.succeededFuture();
    }
}
Also used : IngressV1Beta1Operator(io.strimzi.operator.common.operator.resource.IngressV1Beta1Operator) Storage(io.strimzi.api.kafka.model.storage.Storage) StrimziPodSetOperator(io.strimzi.operator.common.operator.resource.StrimziPodSetOperator) Date(java.util.Date) Annotations(io.strimzi.operator.common.Annotations) KafkaException(org.apache.kafka.common.KafkaException) PodDisruptionBudget(io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget) ClusterRoleBindingOperator(io.strimzi.operator.common.operator.resource.ClusterRoleBindingOperator) KafkaResources(io.strimzi.api.kafka.model.KafkaResources) Ca(io.strimzi.operator.cluster.model.Ca) PodDisruptionBudgetV1Beta1Operator(io.strimzi.operator.common.operator.resource.PodDisruptionBudgetV1Beta1Operator) StrimziPodSetBuilder(io.strimzi.api.kafka.model.StrimziPodSetBuilder) Map(java.util.Map) PodOperator(io.strimzi.operator.common.operator.resource.PodOperator) ResourceOperatorSupplier(io.strimzi.operator.cluster.operator.resource.ResourceOperatorSupplier) AbstractModel(io.strimzi.operator.cluster.model.AbstractModel) StatefulSetOperator(io.strimzi.operator.cluster.operator.resource.StatefulSetOperator) KafkaVersionChange(io.strimzi.operator.cluster.model.KafkaVersionChange) ModelUtils(io.strimzi.operator.cluster.model.ModelUtils) ListenersUtils(io.strimzi.operator.cluster.model.ListenersUtils) ListenerAddress(io.strimzi.api.kafka.model.status.ListenerAddress) SecretOperator(io.strimzi.operator.common.operator.resource.SecretOperator) Set(java.util.Set) ClientsCa(io.strimzi.operator.cluster.model.ClientsCa) HasMetadata(io.fabric8.kubernetes.api.model.HasMetadata) NodeUtils(io.strimzi.operator.cluster.model.NodeUtils) Future(io.vertx.core.Future) Collectors(java.util.stream.Collectors) ListenerStatus(io.strimzi.api.kafka.model.status.ListenerStatus) List(java.util.List) KafkaConfiguration(io.strimzi.operator.cluster.model.KafkaConfiguration) Labels(io.strimzi.operator.common.model.Labels) StrimziPodSet(io.strimzi.api.kafka.model.StrimziPodSet) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) Secret(io.fabric8.kubernetes.api.model.Secret) RouteOperator(io.strimzi.operator.common.operator.resource.RouteOperator) AdminClientProvider(io.strimzi.operator.common.AdminClientProvider) ClusterCa(io.strimzi.operator.cluster.model.ClusterCa) PodDisruptionBudgetOperator(io.strimzi.operator.common.operator.resource.PodDisruptionBudgetOperator) PlatformFeaturesAvailability(io.strimzi.operator.PlatformFeaturesAvailability) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings) ClusterOperatorConfig(io.strimzi.operator.cluster.ClusterOperatorConfig) IntStream(java.util.stream.IntStream) ClusterRoleBinding(io.fabric8.kubernetes.api.model.rbac.ClusterRoleBinding) KafkaStatus(io.strimzi.api.kafka.model.status.KafkaStatus) GenericKafkaListener(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListener) BackOff(io.strimzi.operator.common.BackOff) IngressOperator(io.strimzi.operator.common.operator.resource.IngressOperator) NetworkPolicyOperator(io.strimzi.operator.common.operator.resource.NetworkPolicyOperator) HashMap(java.util.HashMap) ListenerAddressBuilder(io.strimzi.api.kafka.model.status.ListenerAddressBuilder) LocalObjectReference(io.fabric8.kubernetes.api.model.LocalObjectReference) Function(java.util.function.Function) Supplier(java.util.function.Supplier) FeatureGates(io.strimzi.operator.cluster.FeatureGates) StorageDiff(io.strimzi.operator.cluster.model.StorageDiff) MetricsAndLogging(io.strimzi.operator.common.MetricsAndLogging) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) ServiceOperator(io.strimzi.operator.common.operator.resource.ServiceOperator) CompositeFuture(io.vertx.core.CompositeFuture) KafkaCluster(io.strimzi.operator.cluster.model.KafkaCluster) ServiceAccountOperator(io.strimzi.operator.common.operator.resource.ServiceAccountOperator) ConfigMapOperator(io.strimzi.operator.common.operator.resource.ConfigMapOperator) ANNO_STRIMZI_IO_KAFKA_VERSION(io.strimzi.operator.cluster.model.KafkaCluster.ANNO_STRIMZI_IO_KAFKA_VERSION) KafkaRoller(io.strimzi.operator.cluster.operator.resource.KafkaRoller) Admin(org.apache.kafka.clients.admin.Admin) ReconcileResult(io.strimzi.operator.common.operator.resource.ReconcileResult) ConcurrentDeletionException(io.strimzi.operator.cluster.operator.resource.ConcurrentDeletionException) Node(io.fabric8.kubernetes.api.model.Node) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage) ReconciliationLogger(io.strimzi.operator.common.ReconciliationLogger) NodeOperator(io.strimzi.operator.common.operator.resource.NodeOperator) Promise(io.vertx.core.Promise) Vertx(io.vertx.core.Vertx) Pod(io.fabric8.kubernetes.api.model.Pod) PodSetUtils(io.strimzi.operator.cluster.model.PodSetUtils) StorageClassOperator(io.strimzi.operator.common.operator.resource.StorageClassOperator) StatefulSet(io.fabric8.kubernetes.api.model.apps.StatefulSet) PvcOperator(io.strimzi.operator.common.operator.resource.PvcOperator) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) ExecutionException(java.util.concurrent.ExecutionException) Reconciliation(io.strimzi.operator.common.Reconciliation) ImagePullPolicy(io.strimzi.operator.cluster.model.ImagePullPolicy) ANNO_STRIMZI_IO_STORAGE(io.strimzi.operator.cluster.model.AbstractModel.ANNO_STRIMZI_IO_STORAGE) Util(io.strimzi.operator.common.Util) Kafka(io.strimzi.api.kafka.model.Kafka) StrimziPodSet(io.strimzi.api.kafka.model.StrimziPodSet) StrimziPodSetBuilder(io.strimzi.api.kafka.model.StrimziPodSetBuilder) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) HashSet(java.util.HashSet)

Example 74 with Kafka

use of io.strimzi.api.kafka.model.Kafka in project strimzi by strimzi.

the class EntityOperatorTest method testImagePullSecretsFromCo.

@ParallelTest
public void testImagePullSecretsFromCo() {
    LocalObjectReference secret1 = new LocalObjectReference("some-pull-secret");
    LocalObjectReference secret2 = new LocalObjectReference("some-other-pull-secret");
    List<LocalObjectReference> secrets = new ArrayList<>(2);
    secrets.add(secret1);
    secrets.add(secret2);
    Kafka resource = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout)).editSpec().withNewEntityOperator().withTopicOperator(entityTopicOperatorSpec).withUserOperator(entityUserOperatorSpec).endEntityOperator().endSpec().build();
    EntityOperator eo = EntityOperator.fromCrd(new Reconciliation("test", resource.getKind(), resource.getMetadata().getNamespace(), resource.getMetadata().getName()), resource, VERSIONS, true);
    Deployment dep = eo.generateDeployment(true, null, secrets);
    assertThat(dep.getSpec().getTemplate().getSpec().getImagePullSecrets().size(), is(2));
    assertThat(dep.getSpec().getTemplate().getSpec().getImagePullSecrets().contains(secret1), is(true));
    assertThat(dep.getSpec().getTemplate().getSpec().getImagePullSecrets().contains(secret2), is(true));
}
Also used : LocalObjectReference(io.fabric8.kubernetes.api.model.LocalObjectReference) Reconciliation(io.strimzi.operator.common.Reconciliation) ArrayList(java.util.ArrayList) Kafka(io.strimzi.api.kafka.model.Kafka) Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Example 75 with Kafka

use of io.strimzi.api.kafka.model.Kafka in project strimzi by strimzi.

the class EntityOperatorTest method testFromCrdNoUserOperatorInEntityOperator.

@ParallelTest
public void testFromCrdNoUserOperatorInEntityOperator() {
    EntityOperatorSpec entityOperatorSpec = new EntityOperatorSpecBuilder().withNewTopicOperator().endTopicOperator().build();
    Kafka resource = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout)).editSpec().withEntityOperator(entityOperatorSpec).endSpec().build();
    EntityOperator entityOperator = EntityOperator.fromCrd(new Reconciliation("test", resource.getKind(), resource.getMetadata().getNamespace(), resource.getMetadata().getName()), resource, VERSIONS, true);
    assertThat(entityOperator.topicOperator(), is(notNullValue()));
    assertThat(entityOperator.userOperator(), is(nullValue()));
}
Also used : EntityOperatorSpec(io.strimzi.api.kafka.model.EntityOperatorSpec) Reconciliation(io.strimzi.operator.common.Reconciliation) Kafka(io.strimzi.api.kafka.model.Kafka) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) EntityOperatorSpecBuilder(io.strimzi.api.kafka.model.EntityOperatorSpecBuilder) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Aggregations

Kafka (io.strimzi.api.kafka.model.Kafka)913 KafkaBuilder (io.strimzi.api.kafka.model.KafkaBuilder)703 ParallelTest (io.strimzi.test.annotations.ParallelTest)452 Reconciliation (io.strimzi.operator.common.Reconciliation)448 Test (org.junit.jupiter.api.Test)347 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)332 ResourceUtils (io.strimzi.operator.cluster.ResourceUtils)304 GenericKafkaListenerBuilder (io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder)295 KafkaVersionTestUtils (io.strimzi.operator.cluster.KafkaVersionTestUtils)294 ResourceOperatorSupplier (io.strimzi.operator.cluster.operator.resource.ResourceOperatorSupplier)292 Map (java.util.Map)278 Checkpoint (io.vertx.junit5.Checkpoint)264 CoreMatchers.is (org.hamcrest.CoreMatchers.is)262 Labels (io.strimzi.operator.common.model.Labels)252 Future (io.vertx.core.Future)234 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)230 VertxTestContext (io.vertx.junit5.VertxTestContext)228 List (java.util.List)228 VertxExtension (io.vertx.junit5.VertxExtension)226 AfterAll (org.junit.jupiter.api.AfterAll)220