文章目录
- [一、Kubernetes 操作管理](#一、Kubernetes 操作管理)
-
- 1、管理操作分类
-
- 1.1、陈述式资源管理方法
-
- 1.1.1、基本原理
- 1.1.2、基础信息查看命令
- 1.1.3、基本资源查看命令
- 1.1.4、命名空间操作
- [1.1.5、创建 Deployment(副本控制器)](#1.1.5、创建 Deployment(副本控制器))
- [1.1.6、登录容器与删除 Pod](#1.1.6、登录容器与删除 Pod)
- [1.1.7、扩缩容与删除 Deployment](#1.1.7、扩缩容与删除 Deployment)
- 1.2、声明式资源管理方法
- 2、项目生命周期管理
-
- [2.1、创建阶段(kubectl create)](#2.1、创建阶段(kubectl create))
- [2.2、发布阶段(kubectl expose)](#2.2、发布阶段(kubectl expose))
-
- [2.2.1、Service 类型](#2.2.1、Service 类型)
- 2.2.2、扩展端口类型说明
- 2.2.3、查看网络状态与服务端口
- 2.2.4、负载均衡查看(节点上)
- [2.3、更新阶段(kubectl set)](#2.3、更新阶段(kubectl set))
- [2.4、回滚阶段(kubectl rollout)](#2.4、回滚阶段(kubectl rollout))
- [2.5、删除阶段(kubectl delete)](#2.5、删除阶段(kubectl delete))
- 3、发布策略
-
- [3.1、金丝雀发布(Canary Release)](#3.1、金丝雀发布(Canary Release))
- 4、总结
一、Kubernetes 操作管理
1、管理操作分类
Kubernetes 的管理操作分为两大类,分别是陈述式(命令式)管理方法和声明式(配置清单式)管理方法。
1.1、陈述式资源管理方法
1.1.1、基本原理
- Kubernetes 集群资源管理的唯一入口是调用 apiserver 的接口。
- kubectl 是官方 CLI 命令行工具,用于与 apiserver 通信,将用户命令转化为 apiserver 可识别的请求,实现集群资源管理。
- 查看 kubectl 命令大全:
bash
kubectl --help
中文文档参考:http://docs.kubernetes.org.cn/683.html
- 该方法对资源的"增、删、查"操作较方便,但"改"操作相对复杂。
1.1.2、基础信息查看命令
1.1.2.1、版本与集群信息
bash
# 查看版本信息
kubectl version
# 查看资源对象简写
kubectl api-resources
# 查看集群信息
kubectl cluster-info


1.1.2.2、命令自动补全与日志查看
bash
# 启用 kubectl 自动补全
source <(kubectl completion bash)
# 查看 node 节点日志
journalctl -u kubelet -f
1.1.3、基本资源查看命令
- 语法:
kubectl get <resource> [-o wide|json|yaml] [-n namespace] - 选项说明:
-n指定命名空间、-o指定输出格式、--all-namespaces显示所有命名空间、--show-labels显示所有标签、-l app=nginx筛选指定标签的资源 - 示例:
bash
# 查看 master 节点状态
kubectl get componentstatuses
# 查看命名空间
kubectl get namespace
# 查看 default 命名空间的所有资源
kubectl get all -n default
# 查看指定命名空间下的 Pod 并显示标签
kubectl get pods -n kube-public --show-labels
# 筛选标签为 app=nginx 的 Pod
kubectl get pods -l app=nginx




1.1.4、命名空间操作
bash
# 创建命名空间
kubectl create ns app
# 删除命名空间
kubectl delete namespace app

1.1.5、创建 Deployment(副本控制器)
bash
# 创建 Deployment
kubectl create deployment nginx-wl --image=nginx -n kube-public
// --image=nginx:指定 Pod 里容器使用的镜像 || -n kube-public:指定操作的命名空间是 kube-public
# 描述 Deployment 详细信息
kubectl describe deployment nginx-wl -n kube-public
# 查看所有pod
kubectl get pods -A
# 查看Pod完整名字
kubectl get pods -n kube-public
# 描述 Pod 详细信息
kubectl describe pod nginx-wl-67f75b9476-sjjhk -n kube-public
# 查看指定命名空间下的 Pod
kubectl get pods -n kube-public


1.1.6、登录容器与删除 Pod
bash
# 登录容器
kubectl exec -it nginx-wl-67f75b9476-sjjhk bash -n kube-public
//////////////////////////////////
容器内一些简单操作:
测试容器内的网络(检查连通性):curl http://localhost
创建一个临时文件:echo "test content" > /tmp/test.txt
验证:cat /tmp/test.txt
验证 Nginx 是否正常运行:pidof nginx
//////////////////////////////////
# 删除 Pod
kubectl delete pod nginx-wl-67f75b9476-sjjhk -n kube-public
# 强行删除 Pod(无法正常删除时)
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
注:grace-period 表示过渡存活期,默认 30s,0 表示立即终止 Pod。

删除后不存在

1.1.7、扩缩容与删除 Deployment
bash
# 扩缩容(设置副本数为 2)
kubectl scale deployment nginx-wl --replicas=2 -n kube-public
解释:扩缩容核心命令 + deployment nginx-wl(目标资源类型)+ 指定副本数 + 指定命名空间
# 查看
1、直接查看目标 Deployment 的状态,确认副本数
kubectl get deployment nginx-wl -n kube-public
2、确认实际运行的 Pod 数量和状态
kubectl get pods -n kube-public -l app=nginx-wl
# 扩缩容(设置副本数为 1)
kubectl scale deployment nginx-wl --replicas=1 -n kube-public
# 删除 Deployment
kubectl delete deployment nginx-wl -n kube-public

删除成功

1.2、声明式资源管理方法
1.2.1、基本原理
- 适合对资源的修改操作。
- 依赖资源配置清单文件(YAML 格式:人性化、易读;JSON 格式:易于 API 接口解析)管理资源。
- 通过事先定义统一资源配置清单,再通过陈述式命令应用到 k8s 集群。
- 语法格式:
kubectl create/apply/delete -f xxxx.yaml
1.2.2、查看与解释配置清单
bash
# 查看 Deployment 配置清单(YAML 格式)
kubectl get deployment nginx -o yaml
# 解释 Deployment 配置清单字段
kubectl explain deployment.metadata
# 查看 Service 配置清单(YAML 格式)
kubectl get service nginx -o yaml
# 解释 Service 配置清单字段
kubectl explain service.metadata
1.2.3、修改资源配置清单并应用
1.2.3.1、离线修改
bash
# 导出 Service 配置清单到文件
kubectl get service nginx -o yaml > nginx-svc.yaml
# 编辑配置文件(修改 port 为 8080)
vim nginx-svc.yaml
# 删除原有资源
kubectl delete -f nginx-svc.yaml
# 应用修改后的配置文件
kubectl apply -f nginx-svc.yaml
# 查看修改结果
kubectl get svc
1.2.3.2、在线修改
bash
# 在线编辑 Service 配置清单(即时生效)
kubectl edit service nginx
注:此方式直接生效,但不会修改本地 YAML 文件。

1.2.4、删除资源配置清单
bash
# 陈述式删除
kubectl delete service nginx
# 声明式删除
kubectl delete -f nginx-svc.yaml
2、项目生命周期管理
项目的生命周期包括:创建 → 发布 → 更新 → 回滚 → 删除。
2.1、创建阶段(kubectl create)
- 功能:创建并运行一个或多个容器镜像;创建 deployment 或 job 管理容器。
bash
# 启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
//创建控制器,取名nginx,指定运行镜像,声明容器暴露的端口80,指定运行三个nginx副本pod
# 查看 Pod
kubectl get pods
# 查看所有资源
kubectl get all

2.2、发布阶段(kubectl expose)
- 功能:将资源暴露为 Service。
bash
# 暴露 Deployment 为 Service
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
# 为已经存在的nginx deployment 创建一个nginx-service的Nodeport类型的service,用于暴露 Nginx 服务,让外部(或集群节点)能访问到 Deployment 管理的 Nginx Pod
kubectl expose deployment nginx \ # 为名为「nginx」的Deployment创建Service
--port=80 \ # Service对外暴露的端口(集群内/外部访问时用)
--target-port=80 \ # Pod上实际提供服务的端口(Nginx默认监听80)
--name=nginx-service \ # 给Service起的名称(后续操作Service用这个名)
--type=NodePort # Service的类型为NodePort(允许外部通过节点IP+端口访问)
2.2.1、Service 类型
| 类型 | 说明 |
|---|---|
| ClusterIP | 集群内部访问(默认) |
| NodePort | 集群外部访问,端口范围 30000-32767 |
| LoadBalancer | 云平台负载均衡 |
| externalName | 映射到外部域名 |
2.2.2、扩展端口类型说明
- port:k8s 集群内部访问 Service 的端口,通过
clusterIP: port从 Pod 所在 Node 访问 Service。 - nodePort:外部访问 k8s 集群中 Service 的端口,通过
nodeIP: nodePort外部访问。 - targetPort:Pod 的端口,port 或 nodePort 流量经 kube-proxy 转发到 targetPort,最终进入容器。
- containerPort:Pod 内部容器的端口,targetPort 映射到 containerPort。
2.2.3、查看网络状态与服务端口
bash
# 查看 Pod 网络状态详细信息和 Service 暴露的端口
kubectl get pods,svc -o wide
# 查看关联后端的节点
kubectl get endpoints
# 查看 Service 的描述信息
kubectl describe svc nginx

2.2.4、负载均衡查看(节点上)
bash
# 安装 ipvsadm 工具
yum install ipvsadm -y
# 查看负载均衡端口
ipvsadm -Ln
# 测试访问
curl 10.0.0.189
curl 192.168.10.20:44847
# 查看访问日志(master01 操作)
kubectl get pods -l app=nginx
kubectl logs nginx-d9d8cf5c7-srfdc


2.3、更新阶段(kubectl set)
- 功能:修改容器镜像等现有应用资源信息。
bash
# 查看修改模板帮助
kubectl set image --help
# 将 nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15
# 动态监听 Pod 状态(滚动更新过程)
kubectl get pods -w
# 查看更新后 Pod 信息
kubectl get pods -o wide
# 查看当前 nginx 的版本号
curl -I http://192.168.10.18:32245
# 查看日志是否正常输出
kubectl logs nginx-698676d7f8-xl2gk
# 查看Deployment更新状态
kubectl rollout status deployment/nginx



2.4、回滚阶段(kubectl rollout)
- 功能:对资源进行回滚管理。
bash
# 查看帮助
kubectl rollout --help
# 查看历史版本
kubectl rollout history deployment/nginx
# 回滚到上一个版本
kubectl rollout undo deployment/nginx
# 回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1
# 检查回滚状态
kubectl rollout status deployment/nginx


2.5、删除阶段(kubectl delete)
bash
#查看副本控制器
kubectl get rs -l app=nginx -o wide
# 删除副本控制器
kubectl delete deployment/nginx
# 查看默认命名空间下的所有 Service
kubectl get svc
# 删除 Service
kubectl delete svc/nginx-service
# 查看结果
kubectl get all



3、发布策略
3.1、金丝雀发布(Canary Release)
- 原理:Deployment 控制器支持自定义滚动节奏(暂停/继续更新),先部署部分新版本 Pod,路由少量用户请求验证稳定性,再完成全量更新或回滚。
3.1.1、实施步骤
bash
# 1、重新创建nginx Deployment 副本设置为3
kubectl create deployment nginx --image=nginx:1.13 --replicas=3
# 2、验证
kubectl get deployment nginx
# 3、会看到3个nginx:1.13的Pod
kubectl get pods -l app=nginx

bash
# 1. 更新 deployment 版本并暂停
kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx
# 观察更新状态
kubectl rollout status deployment/nginx
#需要重新创建nginx-service
// 流程
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service -- type=NodePort
kubectl get svc nginx-service
curl -I 192.168.10.18:30449
2. 监控更新过程
kubectl get pods -w
# 测试访问
curl -I 192.168.10.18:30449
# 3. 确认无问题后继续更新
kubectl rollout resume deployment/nginx
# 4. 查看最终更新情况
kubectl get pods -w
curl -I 192.168.10.18:30449




4、总结
Kubernetes 提供陈述式和声明式两种管理方式,陈述式适用于简单命令执行,声明式更灵活可扩展。支持滚动更新、回滚、金丝雀发布等策略,确保应用稳定性和高可用性。