【kubernetes】Java操作k8s-API

这篇具有很好参考价值的文章主要介绍了【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}')

io.kubernetes java 命令,Kubernetes,kubernetes,java,容器

二、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() == 201) {
                messages.put("error", "工作负载创建已重复!");
            } else if (e.getCode() == 401) {
                messages.put("error", "无权限操作!");
            } else {
                messages.put("error", "工作负载创建失败!");
            }
        }

        System.out.println("最终结果----" + messages);
    }

2、删除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;

    /**
     * 删除对应的容器部署
     * 默认命名空间下-default
     *
     */
    public static void deleteDeployment(String deployName) {

        ApiClient client = null;
        try {
            client = Config.defaultClient();
        } catch (IOException e) {
            System.out.println("集群连接失败!!!");
            throw new RuntimeException(e);
        }
        AppsV1Api apiInstance = new AppsV1Api(client);
        Map<String, String> messages = new HashMap<>();

        //deployment 名称    命名空间   控制
        try {
            V1Status v1Status = apiInstance.deleteNamespacedDeployment(deployName, "default", null, null, null, null, null, null);
            System.out.println("v1Status-->>>" + v1Status);
        } catch (ApiException e) {
            System.out.println("e->>>>" + e.getCode());
            if (e.getCode() == 404) {
                messages.put("error", "工作负载删除失败,请检查参数是否正确!");
            } else if (e.getCode() == 409) {
                messages.put("error", "工作负载删除已重复!");
            } else if (e.getCode() == 200) {
                messages.put("success", "工作负载删除成功!");
            } else if (e.getCode() == 201) {
                messages.put("error", "工作负载删除已重复!");
            } else if (e.getCode() == 401) {
                messages.put("error", "无权限操作!");
            } else {
                messages.put("error", "工作负载删除失败!");
            }
        }

    }

3、查询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.V1DeploymentList;
import io.kubernetes.client.util.Config;

import java.io.IOException;

public class K8sDemo {

    public static void main(String[] args) throws IOException {
        try {
            // 加载kubeconfig文件
            ApiClient client = Config.defaultClient();
            Configuration.setDefaultApiClient(client);

            // 创建AppsV1Api实例
            AppsV1Api api = new AppsV1Api();

            // 指定命名空间
            String namespace = "default";

            // 查询指定命名空间下的所有Deployment
            V1DeploymentList deploymentList = api.listNamespacedDeployment(namespace, null, null, null, null, null, null, null, null, null);

            // 输出查询结果
            System.out.println("Deployments in namespace " + namespace + ":");
            deploymentList.getItems().forEach(deployment -> System.out.println(deployment.getMetadata().getName()));

        } catch (ApiException e) {
            System.err.println("Exception when calling AppsV1Api#listNamespacedDeployment: " + e.getMessage());
        }
    }
}

三、Pod

1、创建pod

package com.k8s.k8s_demo_chained.server.csdn;

import com.k8s.k8s_demo_chained.config.Config;
import io.kubernetes.client.custom.Quantity;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.*;

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

public class CodePod2 {


    public static void main(String[] args) throws IOException {
        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);

        CoreV1Api apiInstance = new CoreV1Api(client);

        // 构建选择器
        Map<String, String> selectLabels = new HashMap<>();
        String name = "162-3";
        selectLabels.put("deploy", name);

        // 容器暴漏端口
        List<V1ContainerPort> portList = Arrays.asList(
                new V1ContainerPort().containerPort(8080).protocol("TCP")
        );

        // 资源限制map,--默认会转换成字节
        HashMap<String, Quantity> limitsMap = new HashMap<>();
        limitsMap.put("memory", new Quantity("4Gi"));
        HashMap<String, Quantity> requestsMap = new HashMap<>();
        requestsMap.put("memory", new Quantity("4Gi"));

        // 构建Pod
        V1Pod body = new V1Pod()
                .metadata(new V1ObjectMeta()
                        .name(name) // 名称
                        .namespace("default")   //命名空间
                        .labels(selectLabels))
                .spec(new V1PodSpec()
                        .containers(Arrays.asList(new V1Container()
                                .name("nginxPod")   // 容器名称
                                .image("nginx:latest")   // 镜像名称
                                .imagePullPolicy("IfNotPresent")   // 镜像拉取策略
                                .ports(portList)    //对外暴漏接口
                                .volumeMounts(Arrays.asList(new V1VolumeMount()
                                        .name("声明挂载名称-同下")
                                        .mountPath("挂载到容器内执行目录")))
                                .resources(new V1ResourceRequirements()
                                        .limits(limitsMap)  //限制参数,构建在上面
                                        .requests(requestsMap))  //限制参数,构建在上面
                                .livenessProbe(new V1Probe()
                                        .exec(new V1ExecAction()
                                                .command(Arrays.asList("/bin/sh", "-c", "shell执行结果"))   // 存活探针-shell方式
                                        )
                                        .initialDelaySeconds(300)   // 启动后等待/秒
                                        .periodSeconds(60)         // 探测的时间间隔/秒
                                        .failureThreshold(1)        // 失败次数
                                )
                        ))
                        .restartPolicy("Never") // pod重启策略
                        .volumes(Arrays.asList(new V1Volume()
                                .name("声明挂载名称-同上")
                                .hostPath(new V1HostPathVolumeSource()
                                        .path("宿住机目录"))))   //需挂载宿住机的目录结构
                );


        //定义返回结果
        Map<String, String> messages = new HashMap<>();
        try {
            V1Pod result = apiInstance.createNamespacedPod("default", body, null, null, null);
        } catch (ApiException e) {
            if (e.getCode() == 409) {
                messages.put("error", "Pod创建已重复!");
            } else if (e.getCode() == 200) {
                messages.put("success", "Pod创建成功!");
            } else if (e.getCode() == 201) {
                messages.put("error", "Pod创建已重复!");
            } else if (e.getCode() == 401) {
                messages.put("error", "无权限操作!");
            } else {
                messages.put("error", "Pod创建失败!");
            }
        }

        System.out.println("最终结果----" + messages);
    }

}

2、删除pod

import com.k8s.k8s_demo_chained.config.Config;
import io.kubernetes.client.custom.Quantity;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.*;
import okhttp3.Response;
import okhttp3.ResponseBody;

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

public class DeletePod {
    public static void main(String[] args) throws IOException {
        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);
        CoreV1Api apiInstance = new CoreV1Api(client);
        try {
            // 删除pod    pod名称    命名空间
            apiInstance.deleteNamespacedPodCall("162-3", "default", null, null, null, null, null, null, null).execute();

        } catch (ApiException e) {
        	System.out.println(e);
        }
    }

}

3、查询Pod

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1PodList;
import io.kubernetes.client.util.Config;

import java.io.IOException;

public class K8sDemo {
    public static void main(String[] args) throws IOException {
        try {
            // 加载kubeconfig文件
            ApiClient client = Config.defaultClient();
            Configuration.setDefaultApiClient(client);

            // 创建CoreV1Api实例
            CoreV1Api api = new CoreV1Api();

            // 指定命名空间
            String namespace = "default";

            // 查询指定命名空间下的所有Pod
            V1PodList podList = api.listNamespacedPod(namespace, null, null, null, null, null, null, null, null, null);

            // 输出查询结果
            System.out.println("Pods in namespace " + namespace + ":");
            podList.getItems().forEach(pod -> System.out.println(pod.getMetadata().getName()));
        } catch (ApiException e) {
            System.err.println("Exception when calling CoreV1Api#listNamespacedPod: " + e.getMessage());
        }
    }
}

四、Sevice

1、创建Serivce

import com.k8s.k8s_demo_chained.config.Config;
import io.kubernetes.client.custom.IntOrString;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CodeServe {

    public static void main(String[] args) throws IOException {
        ApiClient client = Config.defaultClient();
        CoreV1Api coreV1Api = new CoreV1Api(client);


        //端口暴露服务的对应的是 Service.Spec.Selector下的值
        Map<String, String> selectLabels = new HashMap<>();
        String name = "162-3";
        String serviceName = "service-162-3";
        selectLabels.put("deploy", name);

// 创建 V1ServicePortBuilder 对象列表
        List<V1ServicePortBuilder> portBuilders = new ArrayList<>();

        // 添加端口构建器到列表中
        portBuilders.add(new V1ServicePortBuilder()
                .withProtocol("TCP")
                .withPort(8080)
                .withTargetPort(new IntOrString(8080))  //目标接口
                .withNodePort(30880));  // 对外网暴漏端口

        // 使用 Stream API 将 portBuilders 列表转换为 servicePorts 列表
        List<V1ServicePort> servicePorts = portBuilders.stream()
                .map(V1ServicePortBuilder::build)
                .collect(Collectors.toList());


        V1Service body = new V1ServiceBuilder()
                .withMetadata(new V1ObjectMetaBuilder()
                        .withName("网络名称") //DNS-1035
                        .withNamespace("default")   //命名空间
                        .build())
                .withSpec(new V1ServiceSpecBuilder()
                        .withType("NodePort") // 设置服务类型为NodePort
                        .withSelector(selectLabels) // 设置选择器
                        .withPorts(servicePorts)
                        .build())
                .build();


        //定义返回结果
        Map<String, String> messages = new HashMap<>();
        try {
            coreV1Api.createNamespacedService("default", body, null, null, null);
            messages.put("success", "网络创建成功!");
        } catch (ApiException e) {
            System.out.println(e);
            if (e.getCode() == 409) {
                messages.put("error", "网络创建已重复!");
            } else if (e.getCode() == 200) {
                messages.put("success", "网络创建成功!");
            } else if (e.getCode() == 201) {
                messages.put("error", "网络创建已重复!");
            } else if (e.getCode() == 401) {
                messages.put("error", "无权限操作!");
            } else {
                messages.put("error", "网络创建失败!");
            }
        }

        System.out.println("最终结果----" + messages);
    }
}

2、删除Serivce

package com.k8s.k8s_demo_chained.server.csdn;

import com.k8s.k8s_demo_chained.config.Config;
import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1Status;

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

public class DeleteService {

    public static void main(String[] args) throws IOException {
        ApiClient client = Config.defaultClient();
        Configuration.setDefaultApiClient(client);
        CoreV1Api apiInstance = new CoreV1Api(client);

        Map<String, String> selectLabels = new HashMap<>();
        String name = "162-3";
        selectLabels.put("deploy", name);
        
        try {
            V1Status v1Status = apiInstance.deleteNamespacedService("service-162-3", "default", null, null, null, null, null, null);
        } catch (ApiException e) {
         System.out.println(e)
        }
    }

}

3、查询Serivce

package com.k8s.k8s_demo_chained.server.csdn;

import io.kubernetes.client.openapi.ApiClient;
import io.kubernetes.client.openapi.ApiException;
import io.kubernetes.client.openapi.Configuration;
import io.kubernetes.client.openapi.apis.CoreV1Api;
import io.kubernetes.client.openapi.models.V1ServiceList;
import io.kubernetes.client.util.Config;

import java.io.IOException;

public class K8sDemo {
    public static void main(String[] args) throws IOException {
        try {
            // 加载kubeconfig文件
            ApiClient client = Config.defaultClient();
            Configuration.setDefaultApiClient(client);

            // 创建CoreV1Api实例
            CoreV1Api api = new CoreV1Api();

            // 指定命名空间
            String namespace = "default";

            // 查询指定命名空间下的所有Service
            V1ServiceList serviceList = api.listNamespacedService(namespace, null, null, null, null, null, null, null, null, null);

            // 输出查询结果
            System.out.println("Services in namespace " + namespace + ":");
            serviceList.getItems().forEach(service -> System.out.println(service.getMetadata().getName()));
        } catch (ApiException e) {
            System.err.println("Exception when calling CoreV1Api#listNamespacedService: " + e.getMessage());
        }
    }
}

四、注意事项

在每次的代码操作之前,都会使用默认的ApiClient对象,并将其设置为全局默认的ApiClient。
具体来说,Config.defaultClient()方法返回一个默认的ApiClient对象,该对象已经配置了与Kubernetes API服务器通信所需的所有参数,例如API版本、认证信息等。然后,通过调用Configuration.setDefaultApiClient(client)方法将这个ApiClient对象设置为全局默认的ApiClient,这样在后续的操作中就不需要每次都创建一个新的ApiClient对象了。
用于初始化Kubernetes Java客户端库,以便在后续的操作中使用它来与Kubernetes API服务器进行交互。
那么,都需要区分开不同操作,构建不同的API,区别如下:文章来源地址https://www.toymoban.com/news/detail-849836.html

  • AppsV1Api:用于管理 Kubernetes 应用程序的 API 对象,如 Deployment、StatefulSet、DaemonSet 和 ReplicaSet 等
  • BatchV1Api:用于管理 Kubernetes 批处理作业的 API 对象,如 Job 和 CronJob 等。
  • CoreV1Api:用于管理 Kubernetes 核心 API 对象,如 Pod、Service、Namespace、Node 和 PersistentVolume 等。

到了这里,关于【kubernetes】Java操作k8s-API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8S)命令指南

    本文提供了一份全面的Kubernetes(K8S)命令指南,旨在帮助用户掌握和运用K8S的各种命令。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云

    2024年04月08日
    浏览(80)
  • 学习 Kubernetes(K8s)、常用命令

    学习 Kubernetes(K8s)是现代云原生应用开发和部署的关键,它提供了一种灵活的、自动化的方式来管理容器化的应用程序。下面是学习 Kubernetes 和一些常见命令的建议: 官方文档 :Kubernetes官方文档是学习的最佳资源之一。它包含了全面的指南、教程和参考文档,从基础概念

    2024年02月20日
    浏览(48)
  • Kind创建k8s - JAVA操作控制

    kind 是 Kubernetes in Docker 的简写,是一个使用 Docker 容器作为 Nodes,在本地创建和运行 Kubernetes 群集的工具。适用于在本机创建 Kubernetes 群集环境进行开发和测试。 官网:https://kind.sigs.k8s.io/ kind 由以下组件构成: Go packages implementing cluster creation, image build, etc. A command line interfac

    2024年02月03日
    浏览(49)
  • 【k8s】Kubernetes技术和相关命令简介

    Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。 在Kubernetes中,我们

    2024年01月18日
    浏览(46)
  • 五、Kubernetes(K8S):Kubectl常用命令详解

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   Kubectl 是Kubernetes命令行工具,用于管理Kubernetes集群资源和应用程序的部署、升级和扩展等。其作用包括但不限于: 1. 创建、更新和删除应

    2024年02月04日
    浏览(45)
  • 【k8s】Kubernetes 声明式 API、命令式

    1. 命令式对象管理∶直接使用命令去操作kubernetes资源 2. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源 3. 声明式对象配置∶通过apply命令和配置文件去操作kubemetes资源 kubectl命令:kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集

    2024年01月17日
    浏览(47)
  • 四、Kubernetes(k8s) 工作中的常用命令

    顾名思义, Namespace 是命名空间的意思,在 Kubernetes 中,“命名空间(Namespace)” 提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一命名空间内的资源名称要唯一,但跨命名空间时没有这个要求。 命名空间作用域仅针对带有命名空间的对象,例如 Deployment、Se

    2024年02月08日
    浏览(68)
  • Kubernetes(K8s)常用命令大全:熟练编排更完美

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(46)
  • Kubernetes技术--k8s核心技术kubectl命令行工具

    (1).概述        kubectl是Kubernetes集群的 命令行工具 , 通过 kubectl 能够对集群本身进行管理 ,并能够在集群上进行容器化应用的安装部署。 (2).语法    Kubectl [command] [type] [name] [flags]   语法参数说明:   command: 指定要对资源执行的操作 ,例如 create、get、describe 和 delete   

    2024年02月10日
    浏览(43)
  • 【云原生 | Kubernetes 系列】K8s 实战 Kubernetes 对象管理之指令式命令管理和配置文件命令式管理

    kubectl 工具能够支持三种对象管理方式: 声明式对象配置 指令式命令 指令式对象配置 前面我使用了两篇文章讲解了 使用配置文件对 Kubernetes 对象进行声明式管理 的相关知识点,本篇文章我将带领大家一起学习剩下的两个Kubernetes 对象管理的指令式命令管理和配置文件命令式

    2023年04月15日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包