Kubernetes 操作管理概述与项目生命周期管理

前言

在云原生时代,Kubernetes(简称K8s)已成为容器编排的事实标准,它能自动化部署、扩展和管理容器化应用,解决了传统部署模式的诸多痛点。本文将从云原生基础、K8s核心概念、集群部署实操到日常运维管理,为你提供一份全面的K8s学习与实践指南,助力快速上手并落地生产。

一、Kubernetes 操作管理概述

1、核心概念梳理

1.1 Kubernetes 管理操作分类
类型 别称 特点
陈述式 命令式 直接通过 kubectl 命令操作资源,增删查方便,修改复杂
声明式 配置清单式 通过 YAML/JSON 配置文件定义资源最终状态,适合复杂场景和自动化
1.2 陈述式管理核心原理
  • Kubernetes 所有操作都通过 apiserver 接口完成,是唯一入口;
  • kubectl 是官方 CLI 工具,负责将用户命令转为 apiserver 可识别的请求;
  • 核心优势:操作直观,适合快速调试;核心劣势:无法保留操作记录,不适合大规模运维。

2、高频操作命令(分类整理)

2.1 基础环境与权限
bash 复制代码
# 授权(解决dashboard等组件权限不足问题)
kubectl create clusterrolebinding serviceaccount-cluster-admin \
--clusterrole=cluster-admin \
--user=system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard

# 启用kubectl命令自动补全(bash环境)
source <(kubectl completion bash)

# 查看kubelet日志(排查节点问题)
journalctl -u kubelet -f
2.2 集群信息查看
bash 复制代码
kubectl --help          # 查看命令帮助
kubectl version         # 查看k8s版本(客户端+服务端)
kubectl api-resources   # 查看所有资源对象及简写(如pods→po,deployments→deploy)
kubectl cluster-info    # 查看集群核心组件地址(apiserver、etcd等)
kubectl get componentstatuses  # 查看master节点状态(控制器、调度器、etcd)
2.3 命名空间操作
bash 复制代码
kubectl get namespace               # 查看所有命名空间
kubectl create ns <命名空间名>       # 创建命名空间(如kubectl create ns app)
kubectl delete namespace <命名空间名> # 删除命名空间
2.4 资源对象操作(核心)
(1)Deployment(副本控制器)
bash 复制代码
# 创建Deployment(指定镜像和命名空间)
kubectl create deployment nginx-wl --image=nginx -n kube-public

# 查看Deployment/Pod
kubectl get deploy -n kube-public                # 查看Deployment
kubectl get pods -n kube-public                 # 查看Pod(-o wide显示IP/节点)
kubectl describe deploy nginx-wl -n kube-public # 查看Deployment详细信息
kubectl describe pod <pod名> -n kube-public      # 查看Pod详细信息(排查故障)

# 扩缩容
kubectl scale deployment nginx-wl --replicas=2 -n kube-public  # 扩容到2个副本
kubectl scale deployment nginx-wl --replicas=1 -n kube-public  # 缩容到1个副本

# 删除Deployment(会自动删除关联Pod)
kubectl delete deployment nginx-wl -n kube-public
(2)Pod 操作
bash 复制代码
# 进入Pod容器(交互式终端)
kubectl exec -it <pod名> bash -n <命名空间>

# 删除Pod(Deployment管理的Pod会自动重建)
kubectl delete pod <pod名> -n <命名空间>

# 强制删除卡死的Pod(terminate状态)
kubectl delete pod <pod名> -n <命名空间> --force --grace-period=0
# --grace-period=0:跳过30s优雅退出,立即终止
(3)Service(服务暴露)

Service 是 Pod 的访问入口,核心类型及端口说明:

类型 用途 端口说明
ClusterIP 集群内部访问(默认) port:集群内访问端口(clusterIP:port)
NodePort 集群外部访问 nodePort:宿主机端口(30000-32767),外部通过「节点IP:nodePort」访问
LoadBalancer 云平台负载均衡 自动绑定云厂商LB,适合生产环境
ExternalName 映射外部域名 无需端口,仅做域名转发

创建 Service 示例:

bash 复制代码
# 将Deployment暴露为NodePort类型Service
kubectl expose deployment nginx-wl --type=NodePort --port=80 --target-port=80 -n kube-public
# --port:Service集群内端口;--target-port:Pod容器端口

二、K8s核心运维命令与项目生命周期管理

1. 两种资源管理方式

管理方式 特点 适用场景
陈述式(命令式) 直接通过kubectl命令操作,简单直观 快速测试、临时操作
声明式(配置清单) 通过YAML/JSON文件定义资源,可版本控制 生产环境、复杂配置、批量操作

2. 常用陈述式命令

(1)基础信息查看
bash 复制代码
kubectl version  # 查看版本
kubectl cluster-info  # 查看集群信息
kubectl get nodes  # 查看节点
kubectl get pods -A  # 查看所有命名空间Pod
kubectl get deployment -n default  # 查看指定命名空间Deployment
kubectl describe pod <pod-name>  # 查看Pod详细信息
(2)资源操作
bash 复制代码
# 创建命名空间
kubectl create ns app

# 创建Deployment
kubectl create deployment nginx --image=nginx:1.14 --replicas=3

# 暴露Service(NodePort类型)
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-svc --type=NodePort

# 扩缩容
kubectl scale deployment nginx --replicas=5

# 进入容器
kubectl exec -it <pod-name> bash

# 删除资源
kubectl delete deployment nginx
kubectl delete svc nginx-svc
kubectl delete ns app
(3)更新与回滚
bash 复制代码
# 更新镜像版本
kubectl set image deployment/nginx nginx=nginx:1.15

# 查看更新历史
kubectl rollout history deployment/nginx

# 回滚到上一版本
kubectl rollout undo deployment/nginx

# 回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1

3. 声明式管理操作

bash 复制代码
# 导出资源配置
kubectl get deployment nginx -o yaml > nginx-deploy.yaml

# 编辑配置文件并应用
vim nginx-deploy.yaml
kubectl apply -f nginx-deploy.yaml

# 在线编辑资源
kubectl edit deployment nginx

# 删除资源
kubectl delete -f nginx-deploy.yaml

4. 常用发布策略

(1)滚动发布(默认)

渐进式更新Pod,先创建新Pod,再删除旧Pod,不中断服务。

(2)金丝雀发布(灰度发布)
bash 复制代码
# 1. 更新镜像并暂停滚动
kubectl set image deployment/nginx nginx=nginx:1.16 && kubectl rollout pause deployment/nginx

# 2. 验证新Pod状态
kubectl get pods -w

# 3. 确认正常后继续滚动
kubectl rollout resume deployment/nginx

三、常见问题排查

  1. Node状态为NotReady :检查Calico等网络插件是否正常运行,执行kubectl get pods -n kube-system | grep calico
  2. Pod处于Pending状态 :可能是资源不足或调度约束,执行kubectl describe pod <pod-name>查看事件。
  3. Dashboard登录失败:检查Token是否正确,或重新创建管理员用户,确保权限绑定正确。
  4. 容器启动失败 :执行kubectl logs <pod-name>查看日志,排查镜像拉取或配置问题。

四、声明式资源管理方法

1、声明式资源管理核心原理

声明式管理的核心是 "定义最终状态":你不需要关心"如何操作",只需要在 YAML/JSON 配置清单中定义资源的最终状态,Kubernetes 会自动对比当前状态和目标状态,完成差异调整。

维度 陈述式(命令式) 声明式(配置清单式)
操作方式 直接执行 kubectl 命令 编写 YAML 配置,通过 kubectl apply/delete -f 应用
核心特点 即时操作,无状态记录 以文件为唯一数据源,可版本控制、可复用、可审计
适用场景 快速调试、临时操作 生产环境、自动化部署(CI/CD)、复杂资源管理
语法示例 kubectl create deployment nginx --image=nginx kubectl apply -f nginx-deploy.yaml

2、声明式管理核心操作(完整流程)

2.1 配置清单的查看与解释(理解配置结构)

声明式管理的前提是看懂 YAML 配置,以下命令帮你快速解析配置结构:

bash 复制代码
# 1. 导出已有资源的 YAML 配置(作为编写模板)
kubectl get deployment nginx -o yaml > nginx-deploy.yaml  # 导出Deployment配置
kubectl get service nginx -o yaml > nginx-svc.yaml        # 导出Service配置

# 2. 解释配置字段含义(新手必备)
kubectl explain deployment.metadata       # 查看Deployment的metadata字段说明
kubectl explain deployment.spec.replicas  # 查看副本数字段说明
kubectl explain service.spec.type         # 查看Service类型字段说明
kubectl explain service.spec.ports.port   # 查看Service端口字段说明
2.2 配置清单的修改与应用(离线/在线)
(1)离线修改(推荐,可版本控制)

步骤:导出配置 → 本地修改 → 删除旧资源(可选)→ 应用新配置

bash 复制代码
# ① 导出配置文件
kubectl get service nginx -o yaml > nginx-svc.yaml

# ② 本地编辑(比如修改端口为8080)
vim nginx-svc.yaml
# 找到 spec.ports.port 字段,将值改为8080

# ③ 若apply不生效,先删除旧资源(避免配置冲突)
kubectl delete -f nginx-svc.yaml

# ④ 应用新配置(核心命令)
kubectl apply -f nginx-svc.yaml

# ⑤ 验证结果
kubectl get svc nginx
(2)在线修改(临时调整,不修改本地文件)

适合临时调试,修改即时生效,但本地 YAML 文件不会同步更新:

bash 复制代码
# 在线编辑Service配置(默认打开vim编辑器)
kubectl edit service nginx
# 在编辑器中修改 spec.ports.port 为888,保存退出即可生效

# 验证修改结果
kubectl get svc nginx
2.3 Deployment 版本更新(暂停/恢复,灰度发布)

这是声明式管理中最常用的"更新"场景,通过暂停/恢复实现灰度发布,确保更新安全:

bash 复制代码
# ① 更新镜像版本,并暂停Deployment(新增Pod但不删除旧Pod)
kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx

# ② 监控更新过程(-w 实时刷新)
kubectl get pods -w
# 此时会看到新Pod创建,但旧Pod不会删除,可验证新Pod是否正常

# ③ 验证新Pod(比如curl访问)
curl -I <新Pod的IP>
curl -I <NodeIP:Service的NodePort>

# ④ 确认新Pod正常后,恢复更新(删除旧Pod,完成全量更新)
kubectl rollout resume deployment/nginx

# ⑤ 查看更新状态和最终结果
kubectl rollout status deployment/nginx  # 查看更新进度
kubectl get pods -w                      # 实时查看Pod替换过程
2.4 资源删除(声明式 vs 陈述式)
方式 命令示例 特点
陈述式删除 kubectl delete service nginx 直接指定资源名删除,依赖集群当前状态
声明式删除 kubectl delete -f nginx-svc.yaml 基于配置文件删除,与文件保持一致,更规范
bash 复制代码
# 声明式删除(推荐)
kubectl delete -f nginx-deploy.yaml  # 删除Deployment
kubectl delete -f nginx-svc.yaml     # 删除Service

# 陈述式删除(临时操作)
kubectl delete deployment/nginx      # 删除Deployment
kubectl delete svc/nginx-service     # 删除Service

# 验证删除结果
kubectl get all  # 查看所有资源,确认目标资源已删除

3、核心配置清单示例(快速参考)

以下是最基础的 Deployment + Service 配置清单模板(nginx-deploy-svc.yaml),你可基于此修改:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2  # 副本数
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14  # 镜像版本
        ports:
        - containerPort: 80
---  # 分隔符,一个文件可定义多个资源
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  type: NodePort  # Service类型
  selector:
    app: nginx    # 关联Deployment的Pod标签
  ports:
  - port: 80      # 集群内访问端口
    targetPort: 80  # Pod容器端口
    nodePort: 30080 # 外部访问端口(30000-32767)

应用这个配置的命令:

bash 复制代码
kubectl apply -f nginx-deploy-svc.yaml

小结

  1. 声明式核心:以 YAML 配置文件为"唯一数据源",定义资源最终状态,而非操作步骤;
  2. 修改方式 :离线修改(apply -f)可版本控制,推荐生产环境;在线修改(edit)适合临时调试;
  3. 版本更新rollout pause/resume 实现灰度发布,先验证新Pod再完成全量更新,降低更新风险;
  4. 删除规范 :声明式删除(delete -f)比陈述式更规范,适合生产环境,避免"删错资源"。

声明式管理是 Kubernetes 运维的核心,掌握 YAML 配置编写和 apply/delete 命令,就能应对绝大多数生产环境的资源管理场景。

总结

Kubernetes作为云原生的核心技术,其学习曲线虽陡,但掌握后能极大提升应用部署与运维效率。本文从基础概念到实操部署,再到日常运维,覆盖了K8s的核心知识点。建议新手先通过Minikube熟悉基础操作,再搭建生产级集群实践。随着实践深入,你会逐渐体会到K8s在弹性伸缩、高可用、自动化运维等方面的强大能力,为业务增长提供坚实的技术支撑。

相关推荐
叽里咕噜怪21 分钟前
Pod的详解与进阶
运维·容器·kubernetes
酒醉的胡铁44 分钟前
Docker Desktop 数据迁移完整流程(Windows 10/11 x64)
windows·docker·容器
小北方城市网1 小时前
第 6 课:云原生架构终极落地|K8s 全栈编排与高可用架构设计实战
大数据·人工智能·python·云原生·架构·kubernetes·geo
❀͜͡傀儡师1 小时前
Kubernetes 1.34.3部署PostgresSQL的v18.1
云原生·容器·kubernetes·postgressql
Y.O.U..1 小时前
Kubernetes-资源清单(1)
容器·kubernetes
释怀不想释怀1 小时前
Docker(安装软件)
运维·docker·容器
奔波霸的伶俐虫2 小时前
windows docker desktop 安装修改镜像学习
学习·docker·容器
原神启动12 小时前
K8S(六)—— 企业级,Rancher安装配置与核心功能实操
容器·kubernetes·rancher
阿杰 AJie2 小时前
安装 docker.io(不走外网 Docker 域名)
docker·容器·eureka
.hopeful.2 小时前
Docker——镜像仓库和镜像
运维·docker·容器