【go】interface接口是什么?底层结构体源码

控制平面 : 管理集群中的工作节点Pod
节点 : 一组工作机器,称为节点,每个集群至少有一个节点
pod :节点会托管podpod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合
![[Pasted image 20230514120922.png]]
接下来我们细说一下其中的控制平面中的组件

控制平面组件(Control Plane Components)

控制全局,比如创建pod,调度资源等等

1. kube-apiserver

公开 Kubernetes API,负责接受请求

2.kube-scheduler

负责调度节点,监视节点

3.etcd

一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。

4.kube-controller-manager

负责管理运行控制器

控制器

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点分片控制器(EndpointSlice controller):填充端点分片对象(以提供 Service 和 Pod 之间的链接)。
  • 服务账号控制器(ServiceAccount controller):为新的命名空间创建默认的服务账号(ServiceAccount)。

5.cloud-controller-manager

云控制器管理器,将集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

节点(Node) 组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境

1. kubelet

kubelet会在集群中的每个节点中运行,保证每个容器运行在pod中, kubelet只会管理由k8s创建的容器

2.kube-proxy(代理)

指集群中每个节点上所运行的代理,维护节点上的网络规则

3. 容器运行时(Container Runtime)

负责运行容器的软件

插件(Addons)

DNS

集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。

Web 界面## interface 是什么?

interface 是一种抽象类型,它是一组方法的集合,用于描述一个对象或类型的行为

interface 源码

interface 分为两种类型ifaceefaceiface 表示非空接口,eface表示空接口,我们先从简单的eface说起

eface

type eface struct {
    
    
	_type *_type 
	data unsafe.Pointer 
}

data 指向对象信息的指针而另一个是_type的指针

_type

type _type struct {
    
    
    // 类型大小
    size       uintptr
    ptrdata    uintptr
    // 类型的 hash 值
    hash       uint32
    // 类型的 flag,和反射相关
    tflag      tflag
    // 内存对齐相关
    align      uint8
    fieldalign uint8
    // 类型的编号,有bool, slice, struct 等等等等
    kind       uint8
    alg        *typeAlg
    // gc 相关
    gcdata    *byte
    str       nameOff
    ptrToThis typeOff
}

包括数据类型大小,内存对齐,hash值,gc相关

iface

与eface不同的是,iface 是非空接口,意味着结构体要包含方法,所以内部是使用了itab封装了type,增加了interfacetype指针

type iface struct {
    
    
    tab  *itab            // 表示类型和接口之间的映射
    data unsafe.Pointer  // 表示接口的值(实际类型的指针)
}

type itab struct {
    
    
    inter  *interfacetype // 接口类型
    _type  *_type         // 实际类型
    link   *itab          // 链接到其他itab,以支持多重继承
    hash   uint32         // 用于类型判断的哈希值
    bad    bool           // 实际类型是否实现了接口
    inhash bool           // 是否已将该itab添加到哈希表中
    unused [2]byte
    fun    [1]uintptr    // 存储实际类型方法的指针
}

type interfacetype struct {
    
    
    typ     _type        // 接口类型的元数据
    pkgpath name         // 包路径
    mhdr    []imethod    // 接口方法集合
}

用户可以管理集群中运行的应用程序以及集群本身, 并进行故障排除

猜你喜欢

转载自blog.csdn.net/csxylrf/article/details/130725841