首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes中Master和Node的概念

Kubernetes中Master和Node的概念

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

kubernetes之master和node

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
☸️  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
运行
AI代码解释
复制
☸️  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
运行
AI代码解释
复制
☸️  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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Step By Step To Learn Kubernetes Series
flannel借助etcd内的路由表实现k8s集群节点上的每个Pod能相互的通信。
公众号: 云原生生态圈
2021/11/15
4620
Kubernetes应用快速入门
[root@k8s-master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 Flag --replicas has been deprecated, has no effect and will be removed in the future. # 1.18已经不支持replicas了 pod/nginx-deploy created
行 者
2023/10/19
3780
K8s设置Master可调度与不可调度
查看master节点,默认是不可调度 [root@k8s-master ~]# kubectl describe nodes k8s-master Name: k8s-master Roles: master Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubern
院长技术
2021/04/19
8.3K0
【NoReady】Kubernetes集群新添加node节点出错排查记录
通过查看Node节点的详细信息,发现是网络问题,接着进一步排查有关网络的Pod的运行情况。
宝耶需努力
2023/08/26
2.5K0
kubernetes炼气期之k8s平台快速搭建
环境说明 功能名称 IP 配置 k8s-master 192.168.10.231 4c8g k8s-node1 192.168.10.232 8c16g K8s-node2 192.168.10.233 8c16g k8s-node3 192.168.10.234 8c16g k8s-node4 192.168.10.235 8c16g 环境初始化 更新环境 yum update -y yum install -y wget vim net-tools epel-release 关闭filewal
公众号: 云原生生态圈
2020/06/15
5660
为什么K8s的master节点不允许我们的业务Pod呢?
查看K8s的master节点的描述信息 [root@k8s-master pv]# kubectl describe nodes k8s-master
院长技术
2021/02/19
1.6K0
边缘计算k8s集群SuperEdge初体验
K3s | 轻量级Kubernetes | 物联网及边缘计算K8S解决方案 | Rancher​www.rancher.cn
李国宝
2021/05/21
7690
边缘计算k8s集群SuperEdge初体验
使用kubeadm搭建高可用k8s v1.16.3集群
本文通过kubeadm搭建一个高可用的k8s集群,kubeadm可以帮助我们快速的搭建k8s集群,高可用主要体现在对master节点组件及etcd存储的高可用,文中使用到的服务器ip及角色对应如下:
仙人技术
2020/04/29
2.2K1
使用kubeadm搭建高可用k8s v1.16.3集群
Kubeadm多master集群升级k8s版本
版本说明 本次升级版本为从1.15.3升级至1.16.3。另外更高的k8s版本,要注意内核要为4.4以上,尤其是1.18版本。
院长技术
2020/06/11
1.2K0
K8S 之 kubeadm 安装
Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践。
YP小站
2020/06/04
1.6K0
CentOS7安装Kubernetes1.16.3
手工搭建 Kubernetes 集群是一件很繁琐的事情,为了简化这些操作,就产生了很多安装配置工具,如 Kubeadm ,Kubespray,RKE 等组件,我最终选择了官方的 Kubeadm 主要是不同的 Kubernetes 版本都有一些差异,Kubeadm 更新与支持的会好一些。Kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes 集群的工具,目前的还处于孵化开发状态,跟随 Kubernetes 每个新版本的发布都会同步更新, 强烈建议先看下官方的文档了解下各个组件与对象的作用。
py3study
2020/03/09
1.1K0
CentOS7安装Kubernetes1.16.3
Kubernetes 集群常用操作总结
一、卸载步骤 卸载: kubeadm reset 清理: kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm
高楼Zee
2021/05/11
1.1K0
kubernetes监控架构核心组件Metrics-server
如何查看各节点的资源使用情况? 如何监控kubernetes集群资源?自kubernetes 1.8开始,资源使用指标(如容器 CPU 和内存使用率)通过 Metrics API 在 Kubernet
公众号: 云原生生态圈
2021/11/15
1.7K0
kubernetes监控架构核心组件Metrics-server
(二)Kubernetes安装
Kubernetes集群大体分为一主多从和多主多从两大类: 一主多从:一个master节点和多个node节点,搭建简单,存在单点故障,一般用于测试环境 多主多从:多个master节点和多个node节点,搭建复杂,安全性高,用于生产环境
云叶知秋
2021/12/06
1.3K0
【K8s】Kubernetes 常用命令、对象名称缩写汇总
笔者在之前的文章中已经陆续介绍过 Kubernetes 的部分命令,本文将专题介绍 Kubernetes 的常用命令,处理日常工作基本够用了。
行者Sun
2024/09/02
7650
【K8s】Kubernetes 常用命令、对象名称缩写汇总
使用 kubeadm 部署 kubernetes 1.13.1
最近有时间重新学习 k8s。k8s 的安装比之前简单了许多,本文介绍如何使用 kubeadm 部署 kubernetns 1.13.1
tanmx
2019/01/03
2.8K0
CentOS7.7部署k8s(1 master + 2 node)
VMware创建三个vm,规格2cpu 4G mem 200G disk,一个NAT网卡
后端云
2020/04/22
1.5K0
CentOS7.7部署k8s(1 master + 2 node)
CentOS7.7部署k8s(3 master + 3 node + 1 client)
VMware创建7个vm,规格2cpu 2G mem 200G disk,一个NAT网卡
后端云
2020/04/22
2.4K0
CentOS7.7部署k8s(3 master + 3 node + 1 client)
薅了几个云厂商的羊毛后,我该如何利用它们来组建 k3s 集群?
最近一两年各大云服务商都出了各种福利活动,很多小伙伴薅了一波又一波羊毛,比如腾讯云 1C2G 95/年 真香系列,华为云和阿里云也都有类似的活动,薅个两三台就能搭建一个 Kubernetes 集群。但是跨云服务商搭建 Kubernetes 集群并不像我们想象中的那么容易,首先就是原生的 Kubernetes 组件本身对资源的消耗量很大,而云服务器的资源非常有限,经不起这么大家伙的折腾,对此我们可以选择使用轻量级 Kubernetes 发行版:k3s。
米开朗基杨
2020/06/17
2.3K1
kubernetes教程入门_centos7搭建k8s集群
kubernetes本质是一组服务器集群,可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。
全栈程序员站长
2022/09/22
1.6K0
kubernetes教程入门_centos7搭建k8s集群
相关推荐
Step By Step To Learn Kubernetes Series
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入云原生工作实战群
云原生落地实践 技术难题攻坚探讨
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档