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:~$ 
相关推荐
chuanauc6 小时前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉6 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信6 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记6 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花6 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay6 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu7 小时前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记11 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
疯子的模样15 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
虚伪的空想家16 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook