Kubernetes 技术分享

编程入门 行业动态 更新时间:2024-10-23 23:25:47

Kubernetes <a href=https://www.elefans.com/category/jswz/34/1770192.html style=技术分享"/>

Kubernetes 技术分享

Kubernetes 技术分享

基本介绍

Kubernetes 是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它的目标是简化应用程序的部署和管理,提供高可用性、可伸缩性和自愈能力。

Kubernetes 架构包括 Master 节点和 Worker 节点。Master 节点负责集群的管理和控制,包括调度、监控和控制器等组件;Worker 节点用于运行应用程序的容器。

  1. Kubernetes 基本类型介绍
    • Pod 是 Kubernetes 中最基本的调度和运行单位,可以包含一个或多个容器。Pod 提供了容器之间的紧密协作和共享网络和存储等资源的能力。
    • Deployment 是用于管理 Pod 的副本集的资源对象。它确保指定数量的 Pod 副本在集群中运行,并提供了滚动更新和回滚等功能,以便无缝地更新应用程序。
    • Service 用于暴露应用程序内部的网络服务,提供稳定的访问入口。它可以将请求负载均衡到后端 Pod。
    • Namespace 用于逻辑上隔离和组织集群中的资源,可以将不同的资源划分到不同的命名空间中,以便更好地管理和隔离应用程序。
  2. Deployment 和 DaemonSet /di:mo/的区别
    • Deployment 用于管理无状态应用程序的副本集。它允许 Pod 在集群中进行动态分布和更新,可以根据负载的变化自动调整副本数量。
    • DaemonSet 用于在每个节点上运行一个副本的 Pod,常用于运行守护进程或系统级服务。当有新节点加入集群时,会自动为新节点创建相应的 Pod 实例。
  3. Event 的使用场景
    • Event 是 Kubernetes 中的事件对象,用于记录集群中发生的重要事件。它可以帮助监控和故障排除。
    • 一些常见的 Event 使用场景包括 Pod 创建失败、节点故障、调度问题等。通过查看事件,可以了解集群中发生的问题并采取相应的措施。
  4. Watch:
    • Watch 是一种机制,用于实时监听和接收 Kubernetes 资源的变化。
    • 通过 Watch,客户端可以订阅某个资源的事件,并在事件发生时接收通知。
    • Watch 可以用于持续监听资源的新增、修改和删除等操作,并及时采取相应的处理。
    • 客户端通过建立与 Kubernetes API Server 的连接,并发送 Watch 请求来启动 Watch 机制。
    • Watch 机制利用底层的 HTTP 长连接,在资源变化时主动推送变化的事件给客户端,而不需要客户端去读取 Event。
  5. Fabric8 中的 Watch 使用方式
    • Fabric8 Kubernetes Client 是一个用于与 Kubernetes API 交互的 Java 客户端库。
    • Watch 是 Fabric8 Kubernetes Client 提供的功能之一,用于监听 Kubernetes 资源的变化。
    • 使用 Fabric8 Watch,您可以订阅并接收有关 Pod、Deployment 等资源的事件通知。通过监听事件,可以

使用方法java-client

Kubernetes(K8s)官方 API 和 Fabric8 是用于与 Kubernetes 集群交互的两种不同方式。

  1. Kubernetes 官方 API:

    • Kubernetes 官方 API 是 Kubernetes 提供的原生 REST API 接口,用于与 Kubernetes 集群进行通信和管理。
    • 官方 API 提供了丰富的资源类型和操作,可以执行各种集群管理任务,如创建和管理 Pod、Deployment、Service 等。
    • 官方 API 是 Kubernetes 官方文档所定义的接口规范,支持多种编程语言和工具的集成。
    • 文档地址:/
  2. Fabric8 /‘fabrlk’/(适用于 Kubernetes 和 OpenShift 的 Java 客户端):

    • Fabric8 是一个开源的 Kubernetes 客户端库,提供了用于与 Kubernetes 集群交互的高级功能和工具。
    • Fabric8 提供了对 Kubernetes API 的封装和简化,使开发者可以更轻松地使用 Java 或其他 JVM 语言与 Kubernetes 进行交互。
    • Fabric8 提供了一组方便的 API 和工具,用于创建、管理和监视 Kubernetes 资源,以及执行各种集群操作。
    • Fabric8 还提供了许多附加功能,如集成的事件监听(Watch)、自动化部署、流水线工作流和 Kubernetes 配置的声明式管理等。
    • github地址:

区别:

  • Kubernetes 官方 API 是 Kubernetes 官方提供的原生接口,可以使用不同的编程语言直接与 Kubernetes 进行交互,具有广泛的兼容性和稳定性。
  • Fabric8 是基于官方 API 的高级客户端库,提供了更便捷的 API 封装和额外的功能,可以简化与 Kubernetes 的交互和开发工作,适用于使用 Java 或其他 JVM 语言的开发者。
//k8s 官方api包<dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifactId><version>15.0.1</version></dependency>//fabric8<dependency><groupId>io.fabric8</groupId><artifactId>kubernetes-client</artifactId><version>5.7.1</version></dependency>//openshift api<dependency><groupId>io.fabric8</groupId><artifactId>openshift-client</artifactId><version>6.3.1</version></dependency>

示例

官方api
 		ApiClient defaultClient = Configuration.getDefaultApiClient();defaultClient.setBasePath("url");//关闭证书验证defaultClient.setVerifyingSsl(false);ApiKeyAuth bearerToken = (ApiKeyAuth) defaultClient.getAuthentication("BearerToken");bearerToken.setApiKey("Bearer+ {token}); // 此处替换token//AppsV1Api 主要用于应用程序控制器相关的资源,提供了对 Deployment、StatefulSet、DaemonSet 等资源的访问方法。                      AppsV1Api apiInstance = new AppsV1Api(defaultClient);//CoreV1Api 则用于集群中的核心资源,提供了对 Pod、Service、Namespace、Node 等资源的访问方法。CoreV1Api coreV1Api = new CoreV1Api(defaultClient);//获取所有的 namespaceV1NamespaceList nsList = coreV1Api.listNamespace(null, null, null,null, null,null,null, null, null,null);//获取所有的 deploymentV1DeploymentList deployList=apiInstance.listDeploymentForAllNamespaces(null, null, null, null,null, null, null, null, null, null);//获取指定ns下面的deployment                       V1Deployment v1Deployment =apiInstance.readNamespacedDeployment("{deploymentName}", "{nsName}", null);//获取所有event                        CoreV1EventList eventList= coreV1Api.listEventForAllNamespaces(null, null, null, null,null, null,null, null, null, null);..................
fabric8
 		String token ="{token}";Config config =new ConfigBuilder().withMasterUrl("{url}").withOauthToken(token) //此处token不需要加 Bearer .withTrustCerts(true) //关闭 https验证.build();//DefaultOpenShiftClient同时实现KubernetesClient&OpenShiftClient接口OpenShiftClient osClient = new KubernetesClientBuilder().build().adapt(OpenShiftClient.class);//openshift 获取所有deploymentosClient.apps().deployments().list()KubernetesClient client = new DefaultKubernetesClient(config);// 获取Deployment列表DeploymentList deploymentList = client.apps().deployments().list();//获取所有podsList<Pod> pods = client.pods().inAnyNamespace().list().getItems();// 获取DaemonSet列表DaemonSetList daemonSetList = client.apps().daemonSets().list();// watch 使用 示例为监听 pod 也可以监听 ns deployment 等client.pods().inNamespace("rasp-public").watch(new Watcher<Pod>() {@Overridepublic void eventReceived(Action action, Pod pod) {switch (action) {case ADDED:// 处理新增Pod的逻辑System.out.println("Pod added: " + pod.getMetadata().getName());break;case MODIFIED:// 检查Pod是否发生重启boolean restarted = hasRestarted(pod);break;case DELETED:// 处理删除Pod的逻辑System.out.println("Pod deleted: " + pod.getMetadata().getName());break;}}@Overridepublic void onClose() {System.err.println("Watcher closed");}@Overridepublic void onClose(WatcherException e) {System.out.println("报错了"+e.getMessage());e.printStackTrace();}});}

源码中已经添加前缀

CCE华为云的容器引擎服务 CCE(Cloud Container Engine)

多云容器平台(MCP)和华为云的CCE(Cloud Container Engine)是两个不同的容器服务产品,具有一些区别。

  1. 所属平台和范围:

    • MCP 是由某个特定云服务提供商(如华为云、阿里云、腾讯云等)提供的容器服务平台,旨在为用户提供跨多个云提供商的统一管理和操作界面。它允许用户在多个云环境中轻松部署和管理容器化应用。
    • CCE 是华为云提供的托管式 Kubernetes 服务,专注于在华为云平台上提供容器化应用的部署、管理和运维。它是华为云平台的一部分,针对华为云用户提供了与原生 Kubernetes API 兼容的接口。
  2. 功能和特性:

    • MCP 提供了跨多个云提供商的统一管理和操作界面,可以帮助用户在不同的云环境中管理和迁移容器化应用。它通常提供了诸如集群管理、应用部署、自动伸缩、监控和日志等功能。
    • CCE 则专注于华为云平台上的容器服务,提供了基于原生 Kubernetes 的托管式容器引擎。它提供了与标准 Kubernetes 兼容的 API 接口,并具有自动伸缩、弹性网络、负载均衡等特性。
  3. 云服务商支持:

    • MCP 是一个跨云服务商的容器平台,支持多个云服务提供商。您可以选择将容器部署在不同的云环境中,而不受特定云服务商的限制。
    • CCE 是华为云平台上的容器服务,仅支持在华为云环境中部署和管理容器化应用。

在华为云的CCE(Cloud Container Engine)中,名称与原生的Kubernetes中的概念有一些差异,但本质上是相同的。

  1. Namespace(命名空间):在CCE中,Namespace被称为"Project"(项目),用于隔离和组织容器资源。一个项目可以包含多个容器应用。因此,"Project"在CCE中扮演了与Kubernetes中Namespace相似的角色。
  2. Pod(容器组):CCE中的容器组概念类似于Kubernetes中的Pod,都是用于运行容器应用的基本单位。CCE中的容器组被称为"Container Group"(容器组),它包含了一个或多个容器实例。在CCE中,容器组提供了更加灵活的配置选项,例如可以指定容器实例之间的关联性和依赖关系。
  3. CCE中的Application用于管理容器应用的部署、扩缩容、滚动更新等操作,与Kubernetes中的Deployment具有类似的功能。

Fabric8 提供了适配不同云厂商的 Kubernetes 客户端实现,其中包括了华为云 CCE 的支持。通过 Fabric8,您可以使用华为云 CCE 提供的原生 Kubernetes API 进行与集群的交互和管理。

import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;public class CCEExample {public static void main(String[] args) {// 创建 Kubernetes Client 配置Config config = new ConfigBuilder().withMasterUrl("https://cce-api.<region>.myhuaweicloud") // 替换为 CCE API Server 地址.withNamespace("your-namespace") // 替换为您的命名空间.withUsername("your-username") // 替换为您的华为云账号用户名.withPassword("your-password") // 替换为您的华为云账号密码.build();// 创建 Kubernetes Clienttry (KubernetesClient client = new DefaultKubernetesClient(config)) {// 使用 Fabric8 提供的 API 调用 CCE 平台client.pods().inNamespace("your-namespace").list().getItems().forEach(System.out::println);// 其他操作...}}}

更多推荐

Kubernetes 技术分享

本文发布于:2024-03-11 16:59:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729443.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:技术   Kubernetes

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!