【kubernetes】Java操作k8s-API

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

在K8s平台上,我们可以使用kubectl命令对Deployment、pod、Service等资源进行增删改查。本文章将提供一些Java代码操作API方式实现与集群交互,来创建、更新、删除和查询资源。


一、准备工作

1、Maven依赖

        <!--k8s集群依赖-->
        <dependency>
            <groupId>io.kubernetes</groupId>
            <artifactId>client-java</artifactId>
            <version>7.0.0</version>
        </dependency>

        <dependency>
            <groupId>io.kubernetes</groupId>
            <artifactId>client-java-api</artifactId>
            <version>7.0.0</version>
        </dependency>

2、配置文件

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.util.ClientBuilder;
import io.kubernetes.client.util.credentials.AccessTokenAuthentication;

import java.io.IOException;

public class KubernetesConfig {
   
    // 返回client,默认使用这个方法
    public static ApiClient defaultClient() throws IOException {
   

        /*
         * 机器配置
         * */

		// IP:默认端口
        String master = "https://192.168.0.200:6443";
        // 会很长
        String oauthToken = "eyJhbXXX...............XXXXXXXXXXXXXXXXX";

        ApiClient apiClient = new ClientBuilder()
                //设置 k8s 服务所在 ip地址
                .setBasePath(master)
                //是否开启 ssl 验证
                .setVerifyingSsl(false)
                //插入访问 连接用的 Token
                .setAuthentication(new AccessTokenAuthentication(oauthToken))
                .build();
        io.kubernetes.client.openapi.Configuration.setDefaultApiClient(apiClient);
        return apiClient;
    }
}

2.1、tonken获取

可以借助dashboard用户token,获取同样的结果

# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system

# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

# # 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

在这里插入图片描述

二、deployMent

1、创建deployment

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.AppsV1Api;
import io.kubernetes.client.openapi.models.*;
import io.kubernetes.client.util.Config;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class createNamespacedDeployment {
   

    public static void createNamespacedDeployment() throws IOException {
   

        // 连接交互
        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);
        AppsV1Api apiInstance = new AppsV1Api(client);

        //命名空间
        String namespace = "default";
        String name = "depDemo";

        // Service.Spec.Selector下的值
        Map<String, String> selectLabels = new HashMap<>();
        selectLabels.put("app", name);

        // 构建deployment
        V1Deployment body = new V1DeploymentBuilder()
                .withMetadata(new V1ObjectMetaBuilder()
                        .withName(name) // 容器名称
                        .withNamespace(namespace)   // 命名空间
                        .withLabels(selectLabels)   // 标签参数
                        .build())
                .withSpec(new V1DeploymentSpecBuilder()
                        .withReplicas(1)    // 设置默认副本数
                        //设置选择器
                        .withSelector(new V1LabelSelectorBuilder()
                                .withMatchLabels(selectLabels)
                                .build())
                        .withTemplate(new V1PodTemplateSpecBuilder()
                                .withMetadata(new V1ObjectMetaBuilder()
                                        .withLabels(selectLabels)   //选择器
                                        .build())
                                .withSpec(new V1PodSpecBuilder()
                                        .withContainers(new V1ContainerBuilder()
                                                .withName("redisDeployment")  //设置docker名
                                                .withImage("redis:latest")    //docker镜像名
                                                .withImagePullPolicy("IfNotPresent")    // 镜像拉取策略
                                                .build())
                                        .build())
                                .build())
                        .build())
                .build();

        //定义返回结果
        Map<String, String> messages = new HashMap<>();

        try {
   
            // 发送请求
            V1Deployment result = apiInstance.createNamespacedDeployment(namespace, body, null, null, null);//调用createNamespacedDeployment方法创建容器部署
            System.out.println(result);
        } catch (ApiException e) {
   

            if (e.getCode() == 409) {
   
                messages.put("error", "工作负载创建已重复!");
            } else if (e.getCode() == 200) {
   
                messages.put("success", "工作负载创建成功!");
            } else if (e.getCode() ==
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值