K8s 资源管理与操作
K8s 资源管理与操作
一、资源管理介绍
Kubernetes 将所有内容抽象为资源,用户通过操作资源来管理集群。Kubernetes 本质上是一个集群系统,用户可以在其中部署服务,即在集群中运行容器,并将程序运行于容器中。
- Kubernetes 的最小管理单元是 Pod,而不是容器。容器必须放在 Pod 中。
- Kubernetes 通常不直接管理 Pod,而是通过 Pod 控制器 进行管理。
- Pod 提供服务后,通过 Service 资源实现服务的访问。
- 若 Pod 中的数据需要持久化,Kubernetes 提供了多种 存储系统。
学习 Kubernetes 的核心,就是学习如何对 Pod、Pod 控制器、Service、存储等资源进行操作。
二、资源管理方式
Kubernetes 支持三种资源管理方式:
| 类型 | 操作对象 | 适用环境 | 优点 | 缺点 | 
|---|---|---|---|---|
| 命令式对象管理 | 对象 | 测试 | 简单 | 无法审计、跟踪,仅操作活动对象 | 
| 命令式对象配置 | 文件 | 开发 | 可审计、跟踪 | 配置文件多时操作麻烦 | 
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 | 
示例
kubectl 子命令 Tab 补齐方法
[root@master ~]# source /usr/share/bash-completion/bash_completion [root@master ~]# source <(kubectl completion bash) [root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
命令式对象管理:直接使用命令去操作kubernetes资源
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
- kubectl run - 创建和运行Pod的基础命令
- nginx-pod - 为Pod指定的名称
- –image=nginx:1.17.1 - 指定使用的容器镜像(nginx版本1.17.1)
- –port=80 - 声明容器暴露的端口号(Nginx默认服务端口)
命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
Kubectl create/path -f nginx-pod.yml
- kubectl create - 创建新资源
- /path - 这里是具体的子命令或路径
- -f nginx-pod.yml - 指定使用的YAML配置文件
声明式对象配置:通过apply和配置文件去操作kubernetes资源
Kubectl apply -f nginx-pod.yml
- apply - 声明式应用配置(创建或更新)
- -f - 从文件加载配置
- nginx-pod.yml - YAML 配置文件
三、kubectl 命令语法
语法
kubectl [command] [type] [name] [flags]
- command:对资源执行的操作,如- create、- get、- delete
- type:资源类型,如- deployment、- pod、- service
- name:资源名称(大小写敏感)
- flags:可选参数
查看 node 节点
[root@master ~]# kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   39h   v1.28.15
node1    Ready    <none>          38h   v1.28.15
node2    Ready    <none>          38h   v1.28.15
查看命名空间
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h
查看某个命名空间的 pod
[root@master ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-9d57d8f49-88mgl   1/1     Running   2 (25m ago)   39h
calico-node-2vw44                         1/1     Running   2 (25m ago)   39h
calico-node-52ms4                         1/1     Running   2 (25m ago)   38h
calico-node-7kh9c                         1/1     Running   2 (25m ago)   38h
coredns-6554b8b87f-mjx7v                  1/1     Running   2 (25m ago)   39h
coredns-6554b8b87f-sz9ft                  1/1     Running   2 (25m ago)   39h
etcd-master                               1/1     Running   2 (25m ago)   39h
kube-apiserver-master                     1/1     Running   3 (24m ago)   39h
kube-controller-manager-master            1/1     Running   2 (25m ago)   39h
kube-proxy-dww5p                          1/1     Running   2 (25m ago)   38h
kube-proxy-lqh62                          1/1     Running   2 (25m ago)   38h
kube-proxy-nmtph                          1/1     Running   2 (25m ago)   39h
kube-scheduler-master                     1/1     Running   2 (25m ago)   39h
不指定命名空间查看 pod
默认查看 default 中的 pod
[root@master ~]# kubectl get pods
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          23s
查看某个 pod 的详细信息
[root@master ~]# kubectl describe pods nginx-pod 
Name:             nginx-pod
Namespace:        default
Priority:         0
Service Account:  default
Node:             node1/192.168.100.20
Start Time:       Thu, 30 Oct 2025 09:09:50 +0800
......
查看某个 pod,以 yaml 格式输出
[root@master ~]# kubectl get pod nginx-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
......
查看全部 pod
[root@master ~]# kubectl get pod -A
查看集群中所有 Pod 的详细信息,其中 -o wide 选项会显示更全面的输出
[root@master ~]# kubectl get pods -o wide
常用资源类型
Kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看
[root@master ~]# kubectl api-resources
| 资源分类 | 资源名称 | 缩写 | 作用 | 
|---|---|---|---|
| 集群资源 | nodes | no | 集群节点 | 
| namespaces | ns | 隔离 Pod | |
| Pod 资源 | pods | po | 装载容器 | 
| Pod 控制器 | replicationcontrollers | rc | 控制 Pod | 
| replicasets | rs | 控制 Pod | |
| deployments | deploy | 控制 Pod | |
| daemonsets | ds | 控制 Pod | |
| jobs | 控制 Pod | ||
| cronjobs | cj | 控制 Pod | |
| horizontalpodautoscalers | hpa | 控制 Pod | |
| statefulsets | sts | 控制 Pod | |
| 服务发现资源 | services | svc | 统一 Pod 对外接口 | 
| ingress | ing | 统一 Pod 对外接口 | |
| 存储资源 | persistentvolumes | pv | 存储 | 
| persistentvolumeclaims | pvc | 存储 | |
| volumeattachments | 存储 | ||
| 配置资源 | configmaps | cm | 配置 | 
| secrets | 配置 | 
常用操作命令
Kubernetes 允许对资源进行多种操作,可以通过–help查看详细的操作命令
[root@master ~]# kubectl --help
| 命令分类 | 命令 | 翻译 | 命令作用 | 
|---|---|---|---|
| 基本命令 | create | 创建 | 创建一个资源 | 
| edit | 编辑 | 编辑一个资源 | |
| get | 获取 | 获取一个资源 | |
| patch | 更新 | 更新一个资源 | |
| delete | 删除 | 删除一个资源 | |
| explain | 解释 | 展示资源文档 | |
| run | 运行 | 在集群中运行一个指定的镜像 | |
| expose | 暴露 | 暴露资源为service | |
| describe | 描述 | 显示资源内部信息 | |
| logs | 日志输出容器在pod中的日志 | 输出容器在pod中的日志 | |
| attach | 缠绕进入运行中的容器 | 进入运行中的容器 | |
| exec | 执行容器中的一个命令 | 执行容器中的一个命令 | |
| cp | 复制 | 在pod内外复制文件 | |
| rollout | 首次展示 | 管理资源的发布 | |
| scale | 规模 | 扩(缩)容pod的数量 | |
| autoscale | 自动调整 | 自动调整pod的数量 | |
| 高级命令 | apply | Rc | 通过文件对资源进行配置 | 
| label | 标签 | 通过文件对资源进行配置 | |
| 其他命令 | cluster-info | 集群信息 | 显示集群信息 | 
| version | 版本 | 显示当前server和client版本 | 
示例
创建命名空间
[root@master ~]# kubectl create ns wil
namespace/wil created
查看命名空间
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h
wil               Active   12s
在命名空间中创建 pod
[root@master ~]# kubectl run test-pod --image=nginx -n wil
查看 pod
[root@master ~]# kubectl get pods -n wil
NAME       READY   STATUS    RESTARTS   AGE
test-pod   1/1     Running   0          22s
编辑 pod
[root@master ~]# kubectl edit pod test-pod -n wil
Edit cancelled, no changes made.
删除 pod
[root@master ~]# kubectl delete pod test-pod -n wil
pod "test-pod" deleted
删除命名空间
[root@master ~]# kubectl delete ns wil
namespace "wil" deleted
四、命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作 kubernetes 资源
使用官方文档查询模板:https://kubernetes.io/doc
创建一个nginxpod.yaml
[root@master ~]# vim nginxpod.yaml
apiVersion: v1
kind: Namespace
metadata:name: wil
---apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80执行 create 命令,创建资源
创建了两个资源对象,分别是namespace和pod
[root@master ~]# kubectl create -f nginxpod.yaml 
namespace/wil created
pod/nginx created
执行 get 命令,查看资源
显示了两个资源对象的信息
[root@master ~]# kubectl get -f nginxpod.yaml 
NAME            STATUS   AGE
namespace/wil   Active   13sNAME        READY   STATUS              RESTARTS   AGE
pod/nginx   0/1     ContainerCreating   0          13s
执行 delete 命令,删除资源
两个资源对象被删除了
[root@master ~]# kubectl delete -f nginxpod.yaml 
namespace "wil" deleted
pod "nginx" deleted
命令式对象配置的方式操作资源,可以简单的认为:命令+yaml配置文件(里面是命令需要的各种参数)
五、声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令 apply
首先执行一次
[root@master ~]# kubectl apply -f nginxpod.yaml 
namespace/wil created
pod/nginx created
再执行一次,发现说资源没有变动
[root@master ~]# kubectl apply -f nginxpod.yaml 
namespace/wil unchanged
pod/nginx unchanged
特点
- 
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态) 
- 
资源不存在时:创建(相当于 kubectl create)
- 
资源已存在时:更新(相当于 kubectl patch)
六、使用推荐
| 操作 | 推荐方式 | 命令示例 | 
|---|---|---|
| 创建/更新 | 声明式对象配置 | kubectl apply -f XXX.yaml | 
| 删除 | 命令式对象配置 | kubectl delete -f XXX.yaml | 
| 查询 | 命令式对象管理 | kubectl get/describe | 
