K8s基础一

Kubernetes 架构

Kubernetes 背后的架构概念。

Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成, 这些工作机器称作节点(Node)。每个集群至少需要一个工作节点来运行 Pod。

工作节点托管着组成应用负载的 Pod。控制平面管理集群中的工作节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。

本文概述了构建一个完整且可运行的 Kubernetes 集群所需的各种组件。

运行该命令后,输出通常包含以下列:

NAME:节点的名称

STATUS:节点的状态(如 Ready 或 NotReady)

ROLES:节点的角色(如 control-plane 或 worker)

AGE:节点加入集群的时间

VERSION:节点上 kubelet 的版本

复制代码
student@vms21:~$ kubectl get nodes // 查看集群节点
NAME            STATUS     ROLES           AGE      VERSION
vms21.rhce.cc   Ready      control-plane   2y203d   v1.32.1
vms22.rhce.cc   NotReady   <none>          2y203d   v1.32.1
student@vms21:~$ 

kubectl describe nodes

更详细的节点信息,可以使用 kubectl describe nodes 命令。

复制代码
student@vms21:~$ kubectl describe nodes //查看更详细集群节点
Name:               vms21.rhce.cc
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=vms21.rhce.cc
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock

查看某个Node节点的详细信息

Node的基本信息:名称、标签、创建时间等。

Node当前的运行状态:Node启动后会做一系列自检工作,比如磁盘空间是否不足(DiskPressure)、内存是否不足(MemoryPressure)、网络是否正常(NetworkUnavailable)、PID资源是否充足(PIDPressure)。在一切正常时才设置Node为Ready状态(Ready=True),表示Node处于健康状态,Master就可以在其上调度新的任务了(如启动Pod)。

Node的主机地址与主机名。

Node上的资源数量:描述Node可用的系统资源,包括CPU、内存数量、最大可调度Pod数量等。

Node可分配的资源量:描述Node当前可用于分配的资源量。

主机系统信息:包括主机ID、系统UUID、Linux Kernel版本号、操作系统类型与版本、Docker版本号、kubelet与kube-proxy的版本号等。

当前运行的Pod列表概要信息。

已分配的资源使用概要信息,例如资源申请的最小、最大允许使用量占系统总量的百分比。

Node相关的Event信息。

复制代码
student@vms21:~$ kubectl describe nodes vms21.rhce.cc 
Name:               vms21.rhce.cc
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=vms21.rhce.cc
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 192.168.26.21/24
                    projectcalico.org/IPv4IPIPTunnelAddr: 10.244.43.192
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 12 Nov 2022 11:12:11 +0800
Taints:             node-role.kubernetes.io/control-plane:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  vms21.rhce.cc
  AcquireTime:     <unset>
  RenewTime:       Tue, 03 Jun 2025 09:19:50 +0800
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Tue, 03 Jun 2025 08:17:18 +0800   Tue, 03 Jun 2025 08:17:18 +0800   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Tue, 03 Jun 2025 09:19:47 +0800   Sun, 24 Mar 2024 08:36:54 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Tue, 03 Jun 2025 09:19:47 +0800   Sun, 24 Mar 2024 08:36:54 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Tue, 03 Jun 2025 09:19:47 +0800   Sun, 24 Mar 2024 08:36:54 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Tue, 03 Jun 2025 09:19:47 +0800   Sat, 01 Jun 2024 23:00:41 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  192.168.26.21
  Hostname:    vms21.rhce.cc
Capacity:
  cpu:                2
  ephemeral-storage:  101633008Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             3982424Ki
  pods:               110
Allocatable:

查看default命名空间下的pod,不指定命名空间查询时就是查的default命名空间下的

复制代码
student@vms21:~$ kubectl  get pod
NAME                                 READY   STATUS    RESTARTS   AGE
synergy-leverager-59c54694c9-7d7f4   0/1     Pending   0          60m
web-dep-5c7bf8cb6-rzztd              0/1     Pending   0          60m
student@vms21:~$ 

查看kube-system命名空间下的pod

复制代码
student@vms21:~$ kubectl  get pod -n kube-system 
NAME                                       READY   STATUS        RESTARTS         AGE
calico-kube-controllers-8688f858d6-28547   0/1     Pending       0                62m
calico-kube-controllers-8688f858d6-z7mhj   1/1     Terminating   13 (2d15h ago)   86d
calico-node-mlzk2                          1/1     Running       16 (2d15h ago)   436d
calico-node-q2xb6                          0/1     Running       15 (67m ago)     436d
coredns-6766b7b6bb-8zdgt                   1/1     Terminating   10 (2d15h ago)   86d
coredns-6766b7b6bb-vmr7n                   1/1     Running       9 (67m ago)      86d
coredns-6766b7b6bb-xfq28                   1/1     Running       0                62m
etcd-vms21.rhce.cc                         1/1     Running       10 (67m ago)     86d
kube-apiserver-vms21.rhce.cc               1/1     Running       12 (67m ago)     86d
kube-controller-manager-vms21.rhce.cc      1/1     Running       10 (67m ago)     86d
kube-proxy-jlqh5                           1/1     Running       9 (67m ago)      86d
kube-proxy-xhbsx                           1/1     Running       11 (2d15h ago)   86d
kube-scheduler-vms21.rhce.cc               1/1     Running       11 (67m ago)     86d
metrics-server-589b9d98f6-mkg4h            1/1     Terminating   10 (2d15h ago)   86d
metrics-server-589b9d98f6-nmgft            0/1     Pending       0                62m
student@vms21:~$ 

ReplicaSet

简称rs,是deploy与pod的关联者。

pod的命名也是以deploy对应的rs对象名称为前缀的,可以很清晰地表明了一个rs对象创建了哪些Pod,经常在滚动升级时运维故障排查。

复制代码
student@vms21:~$ kubectl get  rs
NAME                           DESIRED   CURRENT   READY   AGE
synergy-leverager-59c54694c9   1         1         0       78d
web-dep-5c7bf8cb6              1         1         0       86d
student@vms21:~$ 
相关推荐
阿里云云原生7 小时前
不改代码也能监控 AI Agent?揭秘 OBI 如何在内核层精准解析 GenAI 语义流量
云原生·agent
众人皆醒我独醉8 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情9 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
潮起鲸落入海15 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
梦想的颜色15 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
摇滚侠15 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
渣渣盟15 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
我叫张小白。17 小时前
一个微服务电商+社区项目(瓷韵app)的技术深度复盘
docker·微服务·云原生·架构
咕噜咕噜的猪大侠17 小时前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes
虚心的百褶裙17 小时前
远程调用服务架构设计及zookeeper技术详解(下篇)
分布式·zookeeper·云原生