1"use strict";(self.webpackChunk_marcnuri_blog_marcnuri_com=self.webpackChunk_marcnuri_blog_marcnuri_com||[]).push([[3354],{99845:function(e,t,n){n.r(t),n.d(t,{default:function(){return m}});var a=n(28453),r=n(96540);function l(e){const t=Object.assign({h2:"h2",p:"p",a:"a",img:"img",ol:"ol",li:"li",strong:"strong",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",code:"code",h3:"h3",pre:"pre",h4:"h4",blockquote:"blockquote",ul:"ul"},(0,a.RP)(),e.components),{KubernetesLogo:n,OpenShiftLogo:l}=t;return n||i("KubernetesLogo",!0),l||i("OpenShiftLogo",!0),r.createElement(r.Fragment,null,r.createElement(t.h2,{id:"introduction"},"Introducción"),"\n",r.createElement(t.p,null,"El ecosistema de ",r.createElement(t.a,{href:"tag#kubernetes"},"Kubernetes")," para desarrolladores ",r.createElement(t.a,{href:"tag#java"},"Java")," está en pleno auge, ofreciendo una variedad de herramientas y recursos para interactuar con tu clúster.\nSi necesitas interactuar con el ",r.createElement(t.a,{href:"https://kubernetes.io/docs/concepts/overview/components/"},"servidor de la API de Kubernetes"),",\nexisten ",r.createElement(t.a,{href:"https://kubernetes.io/docs/reference/using-api/client-libraries/"},"varias bibliotecas de cliente")," disponibles."),"\n",r.createElement(t.p,null,"Como ",r.createElement(t.a,{href:"tag#red-hat"},"RedHatter"),", soy el responsable del mantenimiento del ",r.createElement(t.a,{href:"https://github.com/fabric8io/kubernetes-client"},"Fabric8 Kubernetes Client"),", una potente y ampliamente adoptada biblioteca de Java para trabajar con Kubernetes."),"\n",r.createElement(t.img,{src:"../../images/fabric8/fabric8-logo.png",alt:"The logo of Fabric8 Kubernetes Client"}),"\n",r.createElement(t.p,null,"El ",r.createElement(t.a,{href:"tag#fabric8"},"Fabric8 Kubernetes Client")," es uno de los clientes Java más antiguos y establecidos para Kubernetes.\nA pesar de la aparición del ",r.createElement(t.a,{href:"https://cncf.io"},"cliente Java oficial de la CNCF"),",\nFabric8 sigue siendo muy popular debido a su robusto conjunto de funciones, extensibilidad y API amigable para los desarrolladores."),"\n",r.createElement(t.h2,{id:"key-features-of-the-fabric8-kubernetes-client"},"CaracterÃsticas principales del Fabric8 Kubernetes Client"),"\n",r.createElement(t.p,null,"El Fabric8 Kubernetes Client ofrece una amplia gama de funciones que lo convierten en una excelente opción para los desarrolladores de Java que trabajan con Kubernetes y lo distinguen de sus competidores."),"\n",r.createElement(t.ol,null,"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"DSL rico"),": El cliente ofrece un Lenguaje EspecÃfico de Dominio (DSL) que simplifica las interacciones con la API de Kubernetes."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Extensibilidad"),": Admite varias extensiones, incluidas las de Knative, Tekton e Istio."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Cliente HTTP flexible"),": Desde la ",r.createElement(t.a,{href:"post#fabric8-kubernetes-client-6-0-0-rc1"},"versión 6.0"),", los usuarios pueden configurar el cliente HTTP subyacente, lo que permite una mejor integración con las aplicaciones existentes."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Soporte de Custom Resource"),": El cliente ofrece un excelente soporte para trabajar con Definiciones de Recursos Personalizados (CRDs)."),"\n",r.createElement(t.li,null,r.createElement(t.strong,null,"Compatibilidad nativa"),": Está diseñado para funcionar perfectamente en modo nativo, lo que lo convierte en una excelente opción para proyectos que utilizan frameworks como ",r.createElement(t.a,{href:"tag#quarkus"},"Quarkus"),"."),"\n"),"\n",r.createElement(t.h2,{id:"built-in-support-for-kubernetes-and-openshift"},"Soporte integrado para Kubernetes y OpenShift"),"\n",r.createElement(t.p,null,"El Fabric8 Kubernetes Client ofrece soporte especÃfico para ",r.createElement(t.a,{href:"tag#kubernetes"},"Kubernetes")," y ",r.createElement(t.a,{href:"tag#openshift"},"OpenShift"),"."),"\n",r.createElement(t.table,null,r.createElement(t.thead,null,r.createElement(t.tr,null,r.createElement(t.th,{align:"left"},"Clúster"),r.createElement(t.th,{align:"left"},"Componente/Artefacto"))),r.createElement(t.tbody,null,r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(n,{style:{height:"1.5rem",verticalAlign:"text-bottom"}})," Kubernetes"),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/kubernetes-client/"},"kubernetes-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(l,{style:{height:"1.5rem",verticalAlign:"text-bottom"}})," OpenShift"),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/openshift-client/"},"openshift-client"))))),"\n",r.createElement(t.p,null,"Si bien el artefacto ",r.createElement(t.code,null,"kubernetes-client")," es compatible con cualquier distribución de Kubernetes,\n",r.createElement(t.code,null,"openshift-client")," proporciona capacidades adicionales especÃficas de OpenShift."),"\n",r.createElement(t.h2,{id:"extensions-for-enhanced-functionality"},"Extensiones para funcionalidades mejoradas"),"\n",r.createElement(t.p,null,"El Fabric8 Kubernetes Client también admite un creciente ecosistema de extensiones,\npermitiendo la integración perfecta con herramientas como Cert Manager, Istio, Tekton y muchas más:"),"\n",r.createElement(t.table,null,r.createElement(t.thead,null,r.createElement(t.tr,null,r.createElement(t.th,{align:"left"},"Extensión"),r.createElement(t.th,{align:"left"},"Componente/Artefacto"))),r.createElement(t.tbody,null,r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://cert-manager.io/"},"Cert Manager")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/certmanager-client/"},"certmanager-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://chaos-mesh.org/"},"Chaos Mesh")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/chaosmesh-client/"},"chaosmesh-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://istio.io/"},"Istio")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/istio-client/"},"istio-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://knative.dev/"},"Knative")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/knative-client/"},"knative-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://open-cluster-management.io/"},"Open Cluster Management")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/open-cluster-management-client/"},"open-cluster-management-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://ovn-kubernetes.io/"},"Open Virtual Networking")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/ovn-client/"},"open-cluster-management-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://tekton.dev/"},"Tekton")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/te
1kton-client/"},"tekton-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler/"},"Vertical Pod Autoscaler")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/verticalpodautoscaler-client/"},"verticalpodautoscaler-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://volcano.sh/en/"},"Volcano")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/volcano-client/"},"volcano-client"))),r.createElement(t.tr,null,r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://kubernetes.io/docs/concepts/storage/volume-snapshots/"},"Volume Snapshot")),r.createElement(t.td,{align:"left"},r.createElement(t.a,{href:"https://search.maven.org/artifact/io.fabric8/volumesnapshot-client/"},"volumesnapshot-client"))))),"\n",r.createElement(t.h2,{id:"getting-started-with-fabric8-kubernetes-client"},"Empezando con Fabric8 Kubernetes Client"),"\n",r.createElement(t.p,null,"Vamos a empezar configurando el Fabric8 Kubernetes Client en tu proyecto."),"\n",r.createElement(t.h3,{id:"how-do-i-setup-fabric8-kubernetes-client-in-my-project"},"Cómo configurar Fabric8 Kubernetes Client en mi proyecto"),"\n",r.createElement(t.p,null,"Añadir Fabric8 a tu proyecto es sencillo."),"\n",r.createElement(t.p,null,"Usa la siguiente dependencia para Maven:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-xml",title:"pom.xml"},"<dependency>\n <groupId>io.fabric8</groupId>\n <artifactId>kubernetes-client</artifactId>\n <version>${props.pageContext.siteMetadata.latestFabric8KubernetesClientVersion}</version>\n</dependency>\n")),"\n",r.createElement(t.p,null,"O si tu proyecto está basado en Gradle:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-groovy",title:"build.gradle"},"dependencies {\n implementation 'io.fabric8:kubernetes-client:${props.pageContext.siteMetadata.latestFabric8KubernetesClientVersion}'\n}\n")),"\n",r.createElement(t.h3,{id:"common-operations-with-fabric8-kubernetes-client"},"Operaciones comunes con Fabric8 Kubernetes Client"),"\n",r.createElement(t.p,null,"El cliente Java de Fabric8 deberÃa permitirte realizar al menos las mismas operaciones que puedes ejecutar con ",r.createElement(t.a,{href:"tag#kubectl"},"Kubectl")," o el ",r.createElement(t.a,{href:"tag#go"},"cliente Go")," de Kubernetes."),"\n",r.createElement(t.p,null,"En las siguientes secciones, encontrarás un resumen de las tareas más comunes (generalmente relacionadas con CRUD) que puedes realizar mientras usas el cliente Fabric8."),"\n",r.createElement(t.h4,{id:"retrieving-a-list-of-resources"},"Recuperar una lista de recursos"),"\n",r.createElement(t.p,null,"El siguiente ejemplo devuelve una lista de ",r.createElement(t.code,null,"Pods")," para el namespace especificado:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-java"},'try (KubernetesClient kc = new KubernetesClientBuilder().build()) {\n kc.pods().inNamespace("my-namespace").list().getItems()\n .forEach(pod ->\n System.out.printf("Pod %s%n", pod.getMetadata().getName()));\n}\n')),"\n",r.createElement(t.h3,{id:"retrieving-a-resource-with-a-given-name"},"Recuperar un recurso con un nombre dado"),"\n",r.createElement(t.p,null,"El siguiente ejemplo recupera un ",r.createElement(t.code,null,"Pod")," con el nombre proporcionado del namespace especificado:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-java"},'Pod pod = kc.pods().inNamespace("my-namespace").withName("my-pod").get();\n')),"\n",r.createElement(t.h3,{id:"creating-a-resource"},"Crear un recurso"),"\n",r.createElement(t.p,null,"El siguiente ejemplo crea un ",r.createElement(t.code,null,"ConfigMap")," en el namespace especificado:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-java"},'kc.configMaps().inNamespace("my-namespace").resource(\n new ConfigMapBuilder()\n .withNewMetadata().withName("my-configmap").endMetadata()\n .addToData("data-field", "data-value")\n .build()\n ).create();\n')),"\n",r.createElement(t.h3,{id:"editing-a-resource-with-a-given-name"},"Editar un recurso con un nombre dado"),"\n",r.createElement(t.p,null,"El siguiente ejemplo añade una anotación a un ",r.createElement(t.code,null,"Pod")," con el nombre proporcionado del namespace especificado:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-java"},'kc.pods().inNamespace("my-namespace").withName("my-pod")\n .edit(p -> new PodBuilder(p)\n .editMetadata().addToAnnotations("edited", "true").endMetadata().build());\n')),"\n",r.createElement(t.h3,{id:"deleting-a-named-resource"},"Eliminar un recurso con un nombre dado"),"\n",r.createElement(t.p,null,"El siguiente ejemplo elimina un ",r.createElement(t.code,null,"Pod")," con el nombre proporcionado del namespace especificado y espera 10 segundos a que se complete la operación:"),"\n",r.createElement(t.pre,null,r.createElement(t.code,{className:"language-java"},'kc.pods().inNamespace("my-namespace").withName("my-pod").delete();\nkc.pods().inNamespace("my-namespace").withName("my-pod")\n .waitUntilCondition(Objects::isNull, 10, TimeUnit.SECONDS);\n')),"\n",r.createElement(t.p,null,"Estos ejemplos demuestran la simplicidad y potencia del DSL fluid
1o de Fabric8.\nPara más ejemplos, explora el ",r.createElement(t.a,{href:"https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md'"},"cheatsheet oficial"),"."),"\n",r.createElement(t.h2,{id:"conclusion"},"Conclusión"),"\n",r.createElement(t.p,null,"El Fabric8 Kubernetes Client es una herramienta completa para desarrolladores de Java que trabajan con Kubernetes.\nSus caracterÃsticas, extensiones y API amigable para los desarrolladores lo convierten en una excelente opción para gestionar recursos de Kubernetes de forma programática."),"\n",r.createElement(t.blockquote,{className:"admonition-tip"},"\n",r.createElement(t.p,null,"Para construir operadores y controladores de Kubernetes de alta concurrencia en Java 21+, considera usar ",r.createElement(t.a,{href:"post#java-virtual-threads-project-loom-guia-completa"},"Virtual Threads"),".\nLos Virtual Threads permiten manejar eficientemente miles de watchers y SharedInformers concurrentes sin la sobrecarga de hilos de los platform threads tradicionales."),"\n"),"\n",r.createElement(t.p,null,"Sigue atento a ",r.createElement(t.a,{href:"tag#fabric8"},"más artÃculos")," donde profundizaré en operaciones avanzadas, integración con herramientas como el Mock Server y casos de uso del mundo real."),"\n",r.createElement(t.p,null,"Mientras tanto, puedes explorar los siguientes recursos:"),"\n",r.createElement(t.ul,null,"\n",r.createElement(t.li,null,r.createElement(t.a,{href:"https://github.com/fabric8io/kubernetes-client"},"Official GitHub Repository")),"\n",r.createElement(t.li,null,r.createElement(t.a,{href:"https://github.com/fabric8io/kubernetes-client/tree/master/kubernetes-examples"},"Official Examples Project")),"\n",r.createElement(t.li,null,r.createElement(t.a,{href:"https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md"},"Fabric8 Kubernetes Client Cheatsheet")),"\n"))}var c=function(e){void 0===e&&(e={});const{wrapper:t}=Object.assign({},(0,a.RP)(),e.components);return t?r.createElement(t,e,r.createElement(l,e)):l(e)};function i(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}var o=n(37698);const s=e=>r.createElement(o.TP,{pageContext:e.pageContext},r.createElement(o.n$,Object.assign({comments:e.pageContext.comments,frontmatter:e.pageContext.frontmatter},e)));function m(e){return r.createElement(s,e,r.createElement(c,e))}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.