云原生技术 --- k8s节点组件之kubelet的学习与理解

节点

Kubernetes 通过将容器放入在节点(Node)上运行的 Pod 中来执行你的工作负载。 节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pod 所需的服务,比如相关的sc资源、网络资源等等,这些节点由 控制面 负责管理。

节点上的组件包括 kubelet、 kube-proxy等。

节点的组件

kubelet

kubelet不管理非Kubernetes创建的容器,直接使用docker run的容器是无法加入k8s集群的
Kubelet是工作节点上的主要服务,定期从kube-apiserver组件接收新的或修改的Pod规范,并确保Pod及其容器在期望规范下运行。同时该组件作为工作节点的监控组件,向kube-apiserver汇报主机的运行状况。

kubelet是在每个节点上运行的主要“节点代理”。它可以使用以下方法之一向apiserver注册节点:

  • hostname,默认加载的主机名称
  • 覆盖主机名的名称,通过 ./bin/kubelet --hostname-override=xx启动时进行配置
  • 云提供商的特定逻辑。
    注意:名称需要在集群内是唯一的
    kubelet按照PodSpec工作。PodSpec是描述pod的YAML或JSON对象。kubelet采用一组通过各种机制(主要是通过apiserver)提供的PodSpec,并确保这些PodSpecs中描述的容器运行正常。
    除了来自apiserver的PodSpec之外,还有三种方式可以将容器清单提供给Kubelet。
  • 文件:在命令行上作为标志传递的路径。将定期监视此路径下的文件以进行更新。监控周期默认为20秒,可通过标志进行配置。
  • HTTP端点:在命令行上作为参数传递的HTTP端点。此端点每20秒检查一次(也可以使用标志进行配置)。
  • HTTP服务器:kubelet还可以监听HTTP并响应一个简单的API(目前尚不明确)来提交一个新的清单。

kubelet.conf

该文件位于 /etc/kubernetes 目录下,目录结构如图,其中pki为k8s集群内部通信证书
云原生技术 --- k8s节点组件之kubelet的学习与理解_第1张图片
kubelet.conf 内容如下

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EY3hNekEwTkRBME5Wb1hEVE15TURjeE1EQTBOREEwTlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y01BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTlJRCmxsWkZndzFVaFN5TFJIYk01UnpNYXN2eTNKL1ZOK1lISE5DT1lqeDJNODNCOFZzc09jaGw4S1hOdjJKckMrL3EKUVRNcXl4U0hhNHltZWg3SXI3d2dUTjFJTTNqdEdyZk5ONHhJQ1k2ZTlMWnVuSlB6V3FHQTdnOXF2M0ViN29FMAplQyt3MEtaRGcwazB1VGx4bUhTWFp0a1Z3eEtCSkdmV2xabDdZVDdXK2lXT0h6SVdpVTM2bWRUdGVJclhqbksxClBKeFl1VWE5TEVRSWltSGVBMk9zVk01YjMxbE9mVDVsdVptWWRjYWxZYUNmMlEwMWtJa2NBQmtnTHRSbFhQTXUKNk5MN2dqRFFueTVGbjlmUWRCN0tyWEFsVWEwS2hrMitiM2VhdGNZVmw2TG1DbTFTTkhQUjhLclM3bDdPUU9IVAo3MThtZ0luUENkVWNUNFI2dUVVQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFENllXaWJIdkVmS09IZGxFVllTZS9TbjVFc0gKWDVyOGhuOHZFQ3l5bVR0bEk1N0JrY1VJL3pTWXJCMjdZRXVlbm54N2dneFJ3OTJVbzNBUUdSV2llVUVWVjlBNwpteFg2ZDNDWnNCNnExM1lLUnFMTXdnb2RaaGh1bVpoY0dyOHhubE1xS3hFdkZRcFlLbkVUdzRoWXlnZmZsUkRhCnNMaXM2WHNlczI3VjZhbVhVTDhpUFM5bTk1OEdJa3lWaEF3K25ZbVRJTHdieHBoTEZtKzJBK3hlRkdWbnJMWHkKMjNZUFVLdGI5THd3M29GQUFNa3VBOTFPc0p0VndLTDN3VHR4anU3TGhjZFpTYnpJbmZSNi9RWThnbE9JS3MzcQpJdXpMOU1ESHVIMW40TEcwamZwUGVqMnhqZUdhOUdyWHNEQVVlaU1URE1YOUxUMjVHdXo2NkwzdEN6az0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    server: https://172.18.30.198:6443 # api-server 所在地址
  name: default-cluster
contexts:
- context:
    cluster: default-cluster
    namespace: default
    user: default-auth
  name: default-context
current-context: default-context
kind: Config
preferences: {}
users:
- name: default-auth
  user:
    client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
    client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

节点自注册

当 kubelet 标志 --register-node 为 true(默认)时,它会尝试向 API 服务注册自己。API-SERVER的地址是配置文件中配置的,这是首选模式,被绝大多数发行版选用。

对于自注册模式,kubelet 使用下列参数启动:
--kubeconfig - 用于向 API 服务器执行身份认证所用的凭据的路径。
--cloud-provider - 与某云驱动 进行通信以读取与自身相关的元数据的方式。
--register-node - 自动向 API 服务注册。
--register-with-taints - 使用所给的污点列表 (逗号分隔的 =:)注册节点。当 register-node 为 false 时无效。
--node-ip - 节点 IP 地址。
--node-labels - 在集群中注册节点时要添加的标签。 (参见 NodeRestriction 准入控制插件所实施的标签限制)。
--node-status-update-frequency - 指定 kubelet 向控制面发送状态的频率。

值得说明的一点

在二进制安装k8s时候,当你需要新增node时,实际上就是自己去搞定kubelet.conf,然后在新机器上使用一个新的node名称,然后启动kubeletkube-proxykube-rbac-proxy即可

查看node的基本信息

云原生技术 --- k8s节点组件之kubelet的学习与理解_第2张图片
云原生技术 --- k8s节点组件之kubelet的学习与理解_第3张图片
有以下几项是值得注意的

Address

这些字段的用法取决于你的云服务商或者物理机配置。

  • HostName:由节点的内核报告。可以通过 kubelet 的 --hostname-override 参数覆盖。
  • ExternalIP:通常是节点的可外部路由(从集群外可访问)的 IP 地址。
  • InternalIP:通常是节点的仅可在集群内部路由的 IP 地址。

Conditions

conditions 字段描述了所有 Running 节点的状况。状况的示例包括:

节点状况 描述
Ready 如节点是健康的并已经准备好接收 Pod 则为 True;False 表示节点不健康而且不能接收 Pod;Unknown 表示节点控制器在最近 node-monitor-grace-period 期间(默认 40 秒)没有收到节点的消息
DiskPressure True 表示节点存在磁盘空间压力,即磁盘可用量低, 否则为 False
MemoryPressure True 表示节点存在内存压力,即节点内存可用量低,否则为 False
PIDPressure True 表示节点存在进程压力,即节点上进程过多;否则为 False
NetworkUnavailable True 表示节点网络配置不正确;否则为 False

如果 Ready 状况的 status 处于 Unknown 或者 False 状态的时间超过了 pod-eviction-timeout 值(一个传递给 kube-controller-manager 的参数),节点控制器会对节点上的所有 Pod 触发 API 发起的驱逐。 默认的逐出超时时长为 5 分钟。

容量(Capacity)与可分配(Allocatable)

这两个值描述节点上的可用资源:CPU、内存和可以调度到节点上的 Pod 的个数上限。
capacity 块中的字段标示节点拥有的资源总量。
allocatable 块指示节点上可供普通 Pod 消耗的资源量。

你可能感兴趣的:(云原生,云计算,笔记,kubernetes,云原生,学习)