Kubernetes(K8S)笔记

什么是 Kubernetes?

  • Kubernetes是谷歌开源的容器集群管理系统
  • 可以简化应用程序的工作流,加快开发速度

为什么需要K8S?

  • 真正的生产型应用会涉及多个容器
  • 容器必须跨多个服务器主机进行部署
  • 借助K8S构建跨多个容器的应用服务、跨集群调度、扩展这些容器

K8S的应用

  • 跨多台主机进行容器编排
  • 更加充分地利用硬件,最大程度获取运行企业应用所需的资源
  • 利用自动布局、自动重启、自动复制以及自动扩展功能,对应用实施状况检查和自我修复

K8S相关术语

  • 主机(Master):用于控制Kubernetes节点的计算机。所有任务分配都来自于此。
  • 节点(Node):负责执行请求和分配任务的计算机。由Kubernetes主机负责对节点进行控制。
  • 容器集(Pod):是K8S中的最小单元。被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享一个IP地址、IPC、主机名称及其它资源。
  • 服务(Service):将工作内容与容器集分离。
  • Kubelet:运行在节点上的服务,可读取容器清单(container manifest),确保指定的容器启动并运行。
  • kubectl:Kubernetes的命令行配置工具。

K8S架构图

(API Server为Master节点上的组件) K8S抽象架构图

K8S实际组件分布架构图

PS:个人感觉业务如果不是全容器化的需求,或者业务量不大的话,的确没有必要用K8S。

OAM Kubernetes

什么是 OAM?

OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出。

5分钟带你快速入门和了解 OAM Kubernetes

Kubernetes的二次开发

一般都是基于go语言开发,使用client-go。

什么是client-go?

client-go是Kubernetes官方提供的Go语言的客户端库(SDK),使用该库可以访问Kubernetes API Server,实现对Kubernetes资源(包括CRD)的增删改查操作。

Kubernetes API Group

K8s API分为 核心API命名API,对资源的增删改查可以理解为是对K8s API的请求(REST请求)

client-go封装了请求API所需的鉴权、请求参数以及将返回JSON转化为Go结构体(Unmarshaling)

K8s API Groups Categories

Kubernetes Core API

包括 namespace、service、pods、nodes、configmap、secrets、pv等对象。

Kubernetes Core API

Kubernetes Named API

包括 apps/v1/deployments、app/v1/replicasets 等对象。

k8s_named_api.png

Verify K8s API Request

verify_k8s_api.png

各参数功能说明

kubectl:Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互,可用于部署应用、检查和管理集群资源等各种操作。
get:kubectl 的子命令,用于获取资源信息。在这个命令中,用于获取命名空间资源相关信息。
ns:是 namespaces 的缩写,指定要获取的资源类型为命名空间。Kubernetes 集群可以划分多个命名空间,以实现多租户或不同业务模块的资源隔离等功能。通过这个参数,kubectl 知道要获取的是命名空间相关的信息。
-v6:这是设置日志详细程度的参数。v 代表 verbose(详细),数字 6 表示详细程度级别。Kubernetes 日志详细程度级别从 0 到 9 ,数字越大,输出的日志信息越详细。级别 6 会输出包括请求 URL 等详细信息,有助于调试和深入了解命令执行过程中的各种细节。

理解GVK和GVR

GVK和GVR举例