K8s 资源管理与操作

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:对资源执行的操作,如 creategetdelete
  • type:资源类型,如 deploymentpodservice
  • name:资源名称(大小写敏感)
  • 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
相关推荐
问道飞鱼10 小时前
【Kubernets】Kubernetes 资源类型大全:使用场景与配置示例
云原生·容器·kubernetes·资源类型
稚辉君.MCA_P8_Java11 小时前
RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?
后端·架构·kafka·kubernetes·rocketmq
JavaLearnerZGQ11 小时前
单机部署docker-nacos(通过下载nacos源码的方式)
运维·docker·容器
忧郁的橙子.12 小时前
二十、kubernetes 1.29 之 运维
运维·容器·kubernetes
zmjjdank1ng13 小时前
k8s问答题(1)
云原生·容器·kubernetes
行思理14 小时前
本地用docker开发的php 程序如何部署到阿里云的ecs上
阿里云·docker·容器
脚踏实地的大梦想家15 小时前
【Docker】P5 Docker Compose 实战指南:一键部署 WordPress + MySQL
mysql·docker·容器
闲人编程16 小时前
现代Python开发环境搭建(VSCode + Dev Containers)
开发语言·vscode·python·容器·dev·codecapsule
老年DBA19 小时前
Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程
kubernetes·gitlab·argocd