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

浙公网安备 33010602011771号