k8s 资源对象

k8s常见的资源对象

1、有哪些资源对象呢?

# 74个资源对象,非常的多
[root@master01 ~]# kubectl api-resources | wc -l 
74

# 有的资源名称有简写的
[root@master01 ~]# kubectl api-resources | head -n 10
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim


# apiversion 版本有的是v1,有的是测试版本的

# namespaced 就是有的资源对象是属于名称空间的,有的不属于,namespace和node就不属于

2、常见的动作

  • 虽然有很多的资源对象,伴随着许多的命令也都是类似的

  • 动作

    • 创建 create

    • 删除 delete

    • 列出 list

    • 查看信息 describe logs(查看日志) get pod -o yaml(yaml格式查看)

    • 修改 edit path

    • 打标签 label

    • 注释 annotate

3、名称空间

  • 实现了资源隔离和组织管理的重要机制

  • 将一个物理集群划分为多个虚拟集群,不同命名空间之间的资源相互隔离的

  • 一个名称空间下面,共用网络信息等

  • 一些常见的资源对象是运行在命名空间里面,pod,控制器,svc等

1、查看默认namespace和创建namespace

[root@master01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   6h20m  # 默认命名空间
kube-node-lease   Active   6h20m  # 节点心跳信息
kube-public       Active   6h20m  # 公共资源,可以被所有人访问
kube-system       Active   6h20m  # 系统组件信息


[root@master01 ~]# kubectl create ns test
namespace/test created
[root@master01 ~]# kubectl get ns test
NAME   STATUS   AGE
test   Active   3s

2、基础操作命令

# 查看详细信息
[root@master01 ~]# kubectl describe ns kube-system 
Name:         kube-system
Labels:       kubernetes.io/metadata.name=kube-system
Annotations:  <none>
Status:       Active

No resource quota.  # 还可以配置空间下的限额,大小

No LimitRange resource.



# 切换默认的命名空间,对于这个kubectl这个命令而言,不接命名空间的话,就是默认使用test空间
[root@master01 ~]# kubectl config set-context --current --namespace=test
Context "kubernetes-admin@kubernetes" modified.


# 删除命名空间

kubectl delete ns test

4、标签

  • 是一个键值对的形式,标识和选择资源

  • 非常重要的,随着学习的深入,一些资源对象的管理都是需要这个标签,来识别(关联)容器的

  • 可以给node,pod,控制器几乎所有的资源对象添加

1、基础命令

# --show-labels 查看标签
[root@master01 ~]# kubectl get pod --show-labels 
NAME     READY   STATUS    RESTARTS   AGE   LABELS
nginx1   1/1     Running   0          19s   run=nginx1

# 添加标签
[root@master01 ~]# kubectl label pod nginx1 app=nginx
pod/nginx1 labeled
[root@master01 ~]# kubectl get pod --show-labels 
NAME     READY   STATUS    RESTARTS   AGE   LABELS
nginx1   1/1     Running   0          74s   app=nginx,run=nginx1

# 覆盖标签, 需要使用 --overwrite
[root@master01 ~]# kubectl label pod nginx1 app=nginx_version --overwrite 
pod/nginx1 labeled
[root@master01 ~]# kubectl get pod --show-labels 
NAME     READY   STATUS    RESTARTS   AGE    LABELS
nginx1   1/1     Running   0          114s   app=nginx_version,run=nginx1

# 显示指定标签列
[root@master01 ~]# kubectl get pod -L app
NAME     READY   STATUS    RESTARTS   AGE     APP
nginx1   1/1     Running   0          3m22s   nginx_version

# 查询含有这个标签的
[root@master01 ~]# kubectl get  pod -l app=nginx_version
NAME     READY   STATUS    RESTARTS   AGE
nginx1   1/1     Running   0          4m15s

# 删除标签
[root@master01 ~]# kubectl label pod nginx1 app-
pod/nginx1 unlabeled
[root@master01 ~]# kubectl get pod --show-labels 
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx1   1/1     Running   0          6m23s   run=nginx1

2、节点标签操作

# 查看节点标签,可以发现有很多
[root@master01 ~]# kubectl get node --show-labels 
NAME       STATUS   ROLES                  AGE     VERSION   LABELS
master01   Ready    control-plane,master   6h37m   v1.23.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master01,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
master02   Ready    control-plane,master   6h15m   v1.23.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master02,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
node       Ready    <none>                 6h8m    v1.23.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node,kubernetes.io/os=linux

# 这个node-role.kubernetes.io/master  这个就是role的配置,kubectl get node 显示的roles的配置

[root@master01 ~]# kubectl get node
NAME       STATUS   ROLES                  AGE     VERSION
master01   Ready    control-plane,master   6h40m   v1.23.1
master02   Ready    control-plane,master   6h17m   v1.23.1
node       Ready    <none>                 6h10m   v1.23.1

# 添加一个roles,注意是io/标签= 这样的形式
[root@master01 ~]# kubectl label nodes master01 node-role.kubernetes.io/qqq=
node/master01 labeled
[root@master01 ~]# kubectl get node
NAME       STATUS   ROLES                      AGE     VERSION
master01   Ready    control-plane,master,qqq   6h44m   v1.23.1
master02   Ready    control-plane,master       6h22m   v1.23.1
node       Ready    <none>                     6h14m   v1.23.1

# 取消标签
[root@master01 ~]# kubectl label nodes master01 node-role.kubernetes.io/qqq-
node/master01 unlabeled


5、注解

  • 就是注释,也是key-value的形式

5、命令

1、describe

[root@master01 ~]# kubectl describe pod nginx1 
Name:         nginx1  # pod名字
Namespace:    test   # 属于哪一个名称空间
Priority:     0
Node:         node/192.168.50.22  # 部署在哪一个节点上
Start Time:   Tue, 24 Mar 2026 19:12:22 +0800
Labels:       run=nginx1  # 标签
Annotations:  cni.projectcalico.org/containerID: 4fe31a5ee6a9cacc65fcfd23c42cf2b957d8ead9a463ea9de401f39b675d4c22
              cni.projectcalico.org/podIP: 10.246.73.133/32
              cni.projectcalico.org/podIPs: 10.246.73.133/32
Status:       Running   # 状态
IP:           10.246.73.133  # pod ip地址
IPs:
  IP:  10.246.73.133
Containers:   # pod里面的容器
  nginx1:   # nginx1 容器
    Container ID:   docker://00365d0f43f43ea85a1ed83e61e083d9befbbf5472f4d49d810335563dbab184
    Image:          nginx  # 使用容器镜像
    Image ID:       docker-pullable://nginx@sha256:dec7a90bd0973b076832dc56933fe876bc014929e14b4ec49923951405370112
    Port:           <none>  # 容器未暴露端口
    Host Port:      <none>  # 没有映射到主机端口上
    State:          Running
      Started:      Tue, 24 Mar 2026 19:12:30 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>  # 无环境变量
    Mounts:  # 自动挂载service account凭证,k8s api 与pod交互,ro只读挂载
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8m6hg (ro) # 里面包含namesapce,token,ca.crt文件
Conditions:  # pod状态
  Type              Status  
  Initialized       True  # pod初始化完成
  Ready             True  # 容器就绪,可以接收流量
  ContainersReady   True  # 所有容器就绪
  PodScheduled      True  # 已经成功调度到节点
Volumes:  # 存储卷
  kube-api-access-8m6hg:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:  # 事件
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  19m   default-scheduler  Successfully assigned test/nginx1 to node
  Normal  Pulling    19m   kubelet            Pulling image "nginx"
  Normal  Pulled     19m   kubelet            Successfully pulled image "nginx" in 7.570540111s
  Normal  Created    19m   kubelet            Created container nginx1
  Normal  Started    19m   kubelet            Started container nginx1

posted @ 2026-03-24 19:38  乔的港口  阅读(0)  评论(0)    收藏  举报