K8s 资源管理与操作
一、资源管理介绍
Kubernetes 将所有内容抽象为资源,用户通过操作资源来管理集群。Kubernetes 本质上是一个集群系统,用户可以在其中部署服务,即在集群中运行容器,并将程序运行于容器中。
- Kubernetes 的最小管理单元是 Pod,而不是容器。容器必须放在 Pod 中。
- Kubernetes 通常不直接管理 Pod,而是通过 Pod 控制器 进行管理。
- Pod 提供服务后,通过 Service 资源实现服务的访问。
- 若 Pod 中的数据需要持久化,Kubernetes 提供了多种 存储系统。
学习 Kubernetes 的核心,就是学习如何对 Pod、Pod 控制器、Service、存储等资源进行操作。
二、资源管理方式
Kubernetes 支持三种资源管理方式:
| 类型 | 操作对象 | 适用环境 | 优点 | 缺点 |
|---|---|---|---|---|
| 命令式对象管理 | 对象 | 测试 | 简单 | 无法审计、跟踪,仅操作活动对象 |
| 命令式对象配置 | 文件 | 开发 | 可审计、跟踪 | 配置文件多时操作麻烦 |
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
示例
kubectl 子命令 Tab 补齐方法
bash[root@master ~]# source /usr/share/bash-completion/bash_completion [root@master ~]# source <(kubectl completion bash) [root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
命令式对象管理:直接使用命令去操作kubernetes资源
bash
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资源
bash
Kubectl create/path -f nginx-pod.yml
- kubectl create - 创建新资源
- /path - 这里是具体的子命令或路径
- -f nginx-pod.yml - 指定使用的YAML配置文件
声明式对象配置:通过apply和配置文件去操作kubernetes资源
bash
Kubectl apply -f nginx-pod.yml
- apply - 声明式应用配置(创建或更新)
- -f - 从文件加载配置
- nginx-pod.yml - YAML 配置文件
三、kubectl 命令语法
语法
bash
kubectl [command] [type] [name] [flags]
command:对资源执行的操作,如create、get、deletetype:资源类型,如deployment、pod、servicename:资源名称(大小写敏感)flags:可选参数
查看 node 节点
bash
[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
查看命名空间
bash
[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
bash
[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
bash
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 23s
查看某个 pod 的详细信息
bash
[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 格式输出
bash
[root@master ~]# kubectl get pod nginx-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
......
查看全部 pod
bash
[root@master ~]# kubectl get pod -A
查看集群中所有 Pod 的详细信息,其中 -o wide 选项会显示更全面的输出
bash
[root@master ~]# kubectl get pods -o wide
常用资源类型
Kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看
bash
[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查看详细的操作命令
bash
[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版本 |
示例
创建命名空间
bash
[root@master ~]# kubectl create ns wil
namespace/wil created
查看命名空间
bash
[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
bash
[root@master ~]# kubectl run test-pod --image=nginx -n wil
查看 pod
bash
[root@master ~]# kubectl get pods -n wil
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 22s
编辑 pod
bash
[root@master ~]# kubectl edit pod test-pod -n wil
Edit cancelled, no changes made.
删除 pod
bash
[root@master ~]# kubectl delete pod test-pod -n wil
pod "test-pod" deleted
删除命名空间
bash
[root@master ~]# kubectl delete ns wil
namespace "wil" deleted
四、命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作 kubernetes 资源
使用官方文档查询模板:https://kubernetes.io/doc
创建一个nginxpod.yaml
bash
[root@master ~]# vim nginxpod.yaml
yaml
apiVersion: v1
kind: Namespace
metadata:
name: wil
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
执行 create 命令,创建资源
创建了两个资源对象,分别是namespace和pod
bash
[root@master ~]# kubectl create -f nginxpod.yaml
namespace/wil created
pod/nginx created
执行 get 命令,查看资源
显示了两个资源对象的信息
bash
[root@master ~]# kubectl get -f nginxpod.yaml
NAME STATUS AGE
namespace/wil Active 13s
NAME READY STATUS RESTARTS AGE
pod/nginx 0/1 ContainerCreating 0 13s
执行 delete 命令,删除资源
两个资源对象被删除了
bash
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "wil" deleted
pod "nginx" deleted
命令式对象配置的方式操作资源,可以简单的认为:命令+yaml配置文件(里面是命令需要的各种参数)
五、声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令 apply
首先执行一次
bash
[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 |