前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes中Master和Node的概念

Kubernetes中Master和Node的概念

作者头像
公众号: 云原生生态圈
发布2021-11-15 16:16:10
发布2021-11-15 16:16:10
2.2K00
代码可运行
举报
文章被收录于专栏:云原生生态圈云原生生态圈
运行总次数:0
代码可运行

kubernetes之master和node

Kubernetes中的包含了很多如 NodePodReplicationControllerServiceDeployment“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查等操作并将其保存在 etcd-v3中持久化存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

kubernetes资源对象可以通过kubectl的子命令 api-resources查看。

代码语言:javascript
代码运行次数:0
运行
复制
☸️  devcluster🔥 monitor  ~  🐳 👉 kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                      true         Binding
componentstatuses                 cs                                          false        ComponentStatus
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
limitranges                       limits                                      true         LimitRange
...

在介绍资源对象之前,我们先了解一下Kubernetes集群的两种管理角色:MasterNode

Master

Kubernetes里的Master指的是集群控制节点,每一个Kubernetes集群里都必须要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它来负责具体的执行过程,我们后面执行的所有命令基本都是在Master节点上运行的。我们通常会把Master部署在一个独立的服务器上,如何高可用部署建议用3台服务器,master也可以扩展副本数,来获取更好的可用性和冗余。其主要原因是它太重要了,是整个集群的“首脑brain”,如果宕机或者不可用,那么对集群内容器应用的管理都将失效。

Master节点上运行着以下一组关键进程。

  • KubernetesAPIServer(kube-apiserver):提供了 HTTP Rest 接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。查看具体的哪些API:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#-strong-api-overview-strong-
  • KubernetesControllerManager(kube-controller-manager):Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。
  • KubernetesScheduler(kube-scheduler):负责资源调度(Pod调度)的进程,安排哪些服务的pod运行在哪些节点上。

另外,在Master节点上还需要启动一个etcd服务,正如前面讲到的,Kubernetes里的所有资源对象的数据全部是保存在etcd中的。

Node

除了Master,Kubernetes集群中的其他机器被称为Node节点,在较早的版本中也被称为Minion。与Master一样,Node节点可以是一台物理主机或者是虚拟机。Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些应用程序服务以及云工作流,在有些时候,Master节点上也会 "安排"一些服务运行,或者说是一些Docker容器,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。

每个Node节点上都运行着以下一组关键进程。

  • kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
  • DockerEngine(docker):Docker引擎,负责本机的容器创建和管理工作。

Node节点可以在运行期间动态增加到Kubernetes集群中,前提是这个节点上已经正确安装、配置和启动了上述关键进程,在默认情况下kubelet会向Master注册自己,这也是Kubernetes推荐的Node管理方式。一旦Node被纳入集群管理范围,kubelet进程就会定时向Master节点汇报自身的情报,例如操作系统、Docker版本、机器的CPU和内存情况,以及当前有哪些Pod在运行等,这样Master可以获知每个Node的资源使用情况,并实现高效均衡等资源调度策略。而某个Node超过指定时间不上报信息时,会被Master判断为“失联”,Node的状态被标记为不可用(Not Ready),随后Master会触发“工作负载大转移”的自动流程。

我们可以执行下述命令查看集群中有多少个Node:

代码语言:javascript
代码运行次数:0
运行
复制
☸️  devcluster🔥 monitor  ~  🐳 👉 kubectl get nodes
NAME                  STATUS   ROLES    AGE    VERSION
dev-k8s-01.kubemaster.top   Ready    master   141d   v1.16.3
dev-k8s-02.kubemaster.top   Ready    <none>   141d   v1.16.3
dev-k8s-03.kubemaster.top   Ready    <none>   141d   v1.16.3
dev-k8s-04.kubemaster.top   Ready    <none>   141d   v1.16.3
dev-k8s-05.kubemaster.top   Ready    <none>   141d   v1.16.3

然后,通过kubectl describe node 来查看某个Node的详细信息:

代码语言:javascript
代码运行次数:0
运行
复制
☸️  devcluster🔥 monitor  ~  🐳 👉 kubectl describe node dev-k8s-01.kubemaster.top
Name:               dev-k8s-01.kubemaster.top
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/fluentd-ds-ready=true
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=dev-k8s-01.kubemaster.top
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"16:3b:67:9e:13:e5"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 172.16.132.231
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Fri, 15 Nov 2019 21:19:02 +0800
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  dev-k8s-01.kubemaster.top
  AcquireTime:     <unset>
  RenewTime:       Sun, 05 Apr 2020 09:52:38 +0800
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Sun, 05 Apr 2020 09:52:25 +0800   Fri, 15 Nov 2019 21:18:59 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Sun, 05 Apr 2020 09:52:25 +0800   Fri, 15 Nov 2019 21:18:59 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Sun, 05 Apr 2020 09:52:25 +0800   Fri, 15 Nov 2019 21:18:59 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Sun, 05 Apr 2020 09:52:25 +0800   Fri, 15 Nov 2019 21:39:54 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  172.16.132.231
  Hostname:    dev-k8s-01.kubemaster.top
Capacity:
  cpu:                4
  ephemeral-storage:  71645Mi
  hugepages-2Mi:      0
  memory:             8009252Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  67612704657
  hugepages-2Mi:      0
  memory:             7906852Ki
  pods:               110
System Info:
  Machine ID:                 a9621c1d226d401b979d2e25c6677a95
  System UUID:                422A08DE-A266-F7C1-914D-B73AA9A79176
  Boot ID:                    6b74915e-ed6e-4e0a-90e2-46e285807893
  Kernel Version:             3.10.0-957.21.3.el7.x86_64
  OS Image:                   CentOS Linux 7 (Core)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://18.9.9
  Kubelet Version:            v1.16.3
  Kube-Proxy Version:         v1.16.3
PodCIDR:                      10.244.0.0/24
PodCIDRs:                     10.244.0.0/24
Non-terminated Pods:          (11 in total)
  Namespace                   Name                                           CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                           ------------  ----------  ---------------  -------------  ---
  kube-system                 coredns-5644d7b6d9-hvl2c                       100m (2%)     0 (0%)      70Mi (0%)        170Mi (2%)     37d
  kube-system                 etcd-dev-k8s-01.kubemaster.top                       0 (0%)        0 (0%)      0 (0%)           0 (0%)         141d
  kube-system                 kube-apiserver-dev-k8s-01.kubemaster.top             250m (6%)     0 (0%)      0 (0%)           0 (0%)         141d
  kube-system                 kube-controller-manager-dev-k8s-01.kubemaster.top    200m (5%)     0 (0%)      0 (0%)           0 (0%)         141d
  kube-system                 kube-flannel-ds-amd64-cjh4s                    100m (2%)     100m (2%)   50Mi (0%)        50Mi (0%)      141d
  kube-system                 kube-proxy-h2ltx                               0 (0%)        0 (0%)      0 (0%)           0 (0%)         141d
  kube-system                 kube-scheduler-dev-k8s-01.kubemaster.top             100m (2%)     0 (0%)      0 (0%)           0 (0%)         141d
  kube-system                 traefik-ingress-controller-546496659b-jzc5l    1 (25%)       2 (50%)     2Gi (26%)        2Gi (26%)      25d
  kubernetes-dashboard        kubernetes-dashboard-b65488c4-j2gc2            0 (0%)        0 (0%)      0 (0%)           0 (0%)         37d
  logging                     fluentd-es-glnpb                               100m (2%)     0 (0%)      200Mi (2%)       500Mi (6%)     9d
  monitor                     node-exporter-mswv7                            150m (3%)     0 (0%)      0 (0%)           0 (0%)         75d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests      Limits
  --------           --------      ------
  cpu                2 (50%)       2100m (52%)
  memory             2368Mi (30%)  2768Mi (35%)
  ephemeral-storage  0 (0%)        0 (0%)
Events:              <none>

上述命令展示了Node的如下关键信息。

  • Node基本信息:名称、标签、创建时间等。
  • Node当前的运行状态,Node启动以后会做一系列的自检工作,比如磁盘是否满了,如果满了就标注OutOfDisk=True,否则继续检查内存是否不足(如果内存不足,就标注MemoryPressure=True),最后一切正常,就设置为Ready状态(Ready=True),该状态表示Node处于健康状态,Master将可以在其上调度新的任务了(如启动Pod)。
  • Node的主机地址与主机名。
  • Node上的资源总量:描述Node可用的系统资源,包括CPU、内存数量、最大可调度Pod数量等,注意到目前Kubernetes已经实验性地支持GPU资源分配了(alpha.kubernetes.io/nvidia-gpu=0)。
  • Node可分配资源量:描述Node当前可用于分配等资源量。
  • 主机系统信息:包括主机等唯一标识UUID、Linux kernel版本号、操作系统类型与版本、Kubernetes版本号、kubelet与kube-proxy的版本号等。
  • 当前正在运行等Pod列表概要信息。
  • 已分配的资源使用概要信息,例如资源申请的最低、最大允许使用量占系统总量等百分比。
  • Node相关的Event信息。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kubernetes之master和node
    • Master
    • Node
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档