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节点上的组件)
PS:个人感觉业务如果不是全容器化的需求,或者业务量不大的话,的确没有必要用K8S。
OAM Kubernetes
什么是 OAM?
OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出。
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)
Kubernetes Core API
包括 namespace、service、pods、nodes、configmap、secrets、pv等对象。
Kubernetes Named API
包括 apps/v1/deployments、app/v1/replicasets 等对象。
Verify K8s API Request
各参数功能说明
kubectl:Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互,可用于部署应用、检查和管理集群资源等各种操作。
get:kubectl 的子命令,用于获取资源信息。在这个命令中,用于获取命名空间资源相关信息。
ns:是 namespaces 的缩写,指定要获取的资源类型为命名空间。Kubernetes 集群可以划分多个命名空间,以实现多租户或不同业务模块的资源隔离等功能。通过这个参数,kubectl 知道要获取的是命名空间相关的信息。
-v6:这是设置日志详细程度的参数。v 代表 verbose(详细),数字 6 表示详细程度级别。Kubernetes 日志详细程度级别从 0 到 9 ,数字越大,输出的日志信息越详细。级别 6 会输出包括请求 URL 等详细信息,有助于调试和深入了解命令执行过程中的各种细节。