一、依赖包

<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->
<dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>kubernetes-client</artifactId>
    <version>5.12.4</version>
</dependency>

二、连接kubernetes集群


2.1、通过admin.conf连接kubernetes集群

        通过kubernetes集群的admin.conf文件连接,admin.conf文件在kubernets集群主节点的/etc/kubernetes目录下,然后拷贝到项目的src/main/resources目录下即可。

package com.lxk.k8s;

import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodList;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

@Slf4j
public class MainTest {
    public static void main(String[] args) {
        KubernetesClient client = null;
        try {
            System.setProperty(Config.KUBERNETES_KUBECONFIG_FILE,
                    MainTest.class.getClassLoader().getResource("admin.conf").getPath());
            client = new DefaultKubernetesClient();
        } catch (Exception e) {
            e.printStackTrace();
        }

        PodList list = client.pods().inNamespace("default").list();
        List<Pod> items = list.getItems();
        items.stream().forEach(pod -> {
            log.info("{}" , pod.getMetadata().getName());
        });
    }
}

2.2 、通过token连接kubernetes集群

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

package com.lxk.k8s;

import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodList;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import lombok.extern.slf4j.Slf4j;

import java.util.List;


@Slf4j
public class MainTest02 {


    public static void main(String[] args) {
        KubernetesClient client = null;
        String token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkF5V3puNUlFOHhweVRZaVBDN2lPcThuYUhGU21NZWxRVWZkdWpCTklxZW8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlci10b2tlbi1oZndybiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjA4MzM1YzA0LTZhMjMtNGNmMS1iN2RhLTQ5YjMwYjM5YWYxYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpuYW1lc3BhY2UtY29udHJvbGxlciJ9.jpX65fZ9UU7fBBlVv_odx_oKXa9rE81LwEkHLuSAuHq10o7EqCx87DlZBioT11dwHAOwVxo3gENvPkQU704ImW9r5kYwhUltz6RtQMlyyp25Ov4Cd3X83gFRV6IGo58lqc7NgEn-HYxm9aU1PoQOHXH7gi2FGgfcUc7WBzUYyO-l26cfe15-7lQnutzBLt2djjfJs8jDEXlzW5dkyAUe2vYSgXIAfbm24zi2NCltSmdVWgoWwGuDWQ2rAxtMFBF087Z-nuC1sU1AIMidQ79CIX60twTCNgE9hZbovZjns8-mL75ujkcr7HucdvJqIOORTGVPynCjKg4vHuPZNioyQQ";
        try {
            Config build = new ConfigBuilder().withMasterUrl("https://192.168.71.201:6443").withTrustCerts(true).withOauthToken(token).build();
            client = new DefaultKubernetesClient(build);
        } catch (Exception e) {
            e.printStackTrace();
        }

        PodList list = client.pods().inNamespace("default").list();
        List<Pod> items = list.getItems();
        items.stream().forEach(pod -> {
            log.info("{}", pod.getMetadata().getName());
        });

    }
}

三、创建和管理资源

一旦我们连接到了Kubernetes集群,我们可以使用io.fabric8.kubernetes-client来创建、更新和删除Kubernetes资源,例如部署、服务、Pod等。

以下是一个创建和删除Deployment的示例:

public static void main(String[] args) {
        KubernetesClient client = null;
        try {
            System.setProperty(Config.KUBERNETES_KUBECONFIG_FILE,
                    MainTest.class.getClassLoader().getResource("admin.conf").getPath());
            client = new DefaultKubernetesClient();
        } catch (Exception e) {
            e.printStackTrace();
        }

        PodList list = client.pods().inNamespace("default").list();
        List<Pod> items = list.getItems();
        items.stream().forEach(pod -> {
            log.info("{}" , pod.getMetadata().getName());
        });

        // 创建一个Deployment
        Deployment deployment = new DeploymentBuilder()
                .withNewMetadata()
                .withName("my-deployment")
                .addToLabels("app", "my-app")
                .endMetadata()
                .withNewSpec()
                .withReplicas(3)
                .withNewTemplate()
                .withNewMetadata()
                .addToLabels("app", "my-app")
                .endMetadata()
                .withNewSpec()
                .addNewContainer()
                .withName("my-container")
                .withImage("my-image:latest")
                .endContainer()
                .endSpec()
                .endTemplate()
                .endSpec()
                .build();

        client.apps().deployments().createOrReplace(deployment);
        //client.apps().deployments().delete(deployment);

        // 删除Deployment
        client.apps().deployments().withName("my-deployment").delete();

        client.close();
    }

上述代码中,我们使用DeploymentBuilder创建了一个Deployment对象,并使用createOrReplace方法将其创建或更新到集群中。我们还可以使用delete方法删除指定的Deployment。

类似地,可以使用io.fabric8.kubernetes-client来创建和管理其他资源,例如Service、Pod、ConfigMap等。

四、监控和查询集群

// 监听Pod的变化
        final CountDownLatch deleteLatch = new CountDownLatch(1);
        Watch watch = client.pods().withName("pod1").watch(new Watcher<Pod>() {
            @Override
            public void eventReceived(Action action, Pod resource) {
                switch (action) {
                    case DELETED:
                        deleteLatch.countDown();
                }
            }

            @Override
            public void onClose(WatcherException e) {

            }

        });
        deleteLatch.await(10, TimeUnit.MINUTES);

参考:https://github.com/fabric8io/kubernetes-client/blob/master/doc/CHEATSHEET.md#initializing-kubernetes-client

Fabric8操作Kubernetes(一) - 简书

Fabric8操作Kubernetes(二) - 简书

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐