Kubernetes 核心功能实战指南:部署、访问、扩缩容与滚动更新
创作时间:
作者:
@小白创作中心
Kubernetes 核心功能实战指南:部署、访问、扩缩容与滚动更新
引用
CSDN
1.
https://m.blog.csdn.net/yj11290301/article/details/145624835
Kubernetes(k8s)是容器编排领域的“操作系统”,它让应用部署和管理变得像搭积木一样简单。本文用具体案例+实操命令,带你快速掌握四大核心功能!
一、应用部署:从零启动一个服务
(1)部署在哪里?
很多新手第一次用 k8s 都会困惑:我部署的服务到底跑在哪台机器上了?是 Master 节点还是 Node 节点?先说结论:默认情况下,你的服务会装在 Node 节点上!下面用实操演示告诉你为什么。
想象 Kubernetes 集群像一个公司:
- Master 节点:老板(负责指挥调度,不干具体活)
- Node 节点:员工(真正干活运行服务的地方)
默认安全规则:老板(Master)不亲自搬砖(运行 Pod),防止业务影响管理功能!
(2)部署服务时,如何查看装在哪?
关键命令:
kubectl get pods -o wide
实战步骤:
(1)创建 Deployment(以 Nginx 为例):
kubectl create deployment my-demo --image=nginx --replicas=2
核心概念:
- Deployment:定义应用的副本数量、镜像版本等,自动管理 Pod 的生命周期。
- Pod:最小部署单元,一个 Pod 可包含多个容器(通常 1:1)。
(2)查看 Pod 所在节点:
kubectl get pods -o wide
NAME READY STATUS NODE IP AGE
my-demo-5dbf6f49ff-abcde 1/1 Running node-01 10.244.1.2 1m
my-demo-5dbf6f49ff-fghij 1/1 Running node-02 10.244.2.3 1m
重点看 NODE 列:这里显示的是 Node 节点名称(如 node-01),绝对不可能是 master!
(3)查看部署状态:
kubectl get deployments # 显示 READY 状态
kubectl get pods -o wide # 查看 Pod 的 IP 和所在节点
NAME READY UP-TO-DATE AVAILABLE
my-web 2/2 2 2
二、服务访问:给用户开个访问入口
原理:用 Service 创建一个「门牌号」,流量自动分发到所有 Pod
(1)创建 NodePort 类型 Service(开个大门):
kubectl expose deployment my-website --type=NodePort --port=80
(2)获取访问地址:
kubectl get service my-website
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
my-website NodePort 10.96.123.45 <none> 80:31789/TCP # 重点看 31789
- 访问方式:
- 本地测试(如 Minikube):
minikube service my-website - 云服务器:用任意 Node 节点的 IP + 31789 端口(如
http://192.168.1.100:31789
)
测试访问:
curl http://<Node节点IP>:31789 # 看到 Nginx 欢迎页即成功!
三、弹性扩缩容:应对流量高峰
口诀:老板一声令下,员工(Pod)立刻增减!
核心场景:
- 促销期间扩容 → 增加 Pod 副本数
- 夜间流量低谷 → 减少 Pod 节省资源
(1)扩容到 5 个副本(应对双十一):
kubectl scale deployment my-website --replicas=5
(2)缩容到 2 个副本(半夜省资源):
kubectl scale deployment my-website --replicas=2
(3)实时监控变化:
watch kubectl get pods
四、滚动更新:无缝升级不宕机
原理:逐个替换旧 Pod,用户无感知!
核心优势:
- 逐个替换旧 Pod,确保服务始终可用
- 支持回滚到历史版本
(1)升级到 Nginx 1.21 版本:
kubectl set image deployment/my-website nginx=nginx:1.21
(2)查看更新进度:
kubectl rollout status deployment/my-website
(3)紧急回滚(发现新版本有 Bug):
kubectl rollout undo deployment/my-website # 瞬间回到上一个版本!
技术原理揭秘
功能 | 核心原理 | 关键命令 |
---|---|---|
部署 | Deployment 创建 Pod → 调度到 Node 节点 | kubectl create deployment |
访问 | Service 创建虚拟 IP → 流量转发到所有 Pod | kubectl expose |
扩缩容 | 修改副本数 → K8S 自动创建/删除 Pod | kubectl scale |
滚动更新 | 新 Pod 启动 → 旧 Pod 终止(分批替换) | kubectl set image |
常见问题解答
Q1:为什么访问 Service 的端口是 3 万多的数字?
A:NodePort 默认端口范围 30000-32767,防止和常用端口冲突
Q2:缩容会不会导致服务中断?
A:不会!K8S 会先让 Pod 停止接收新流量,再终止它
Q3:滚动更新时旧版本请求会丢失吗?
A:不会!旧 Pod 只有在所有请求处理完成后才会关闭
热门推荐
正缘和普通桃花有哪些区别?
鲍鱼的种类与营养价值研究
国家三级保护动物有哪些 中国三有保护动物名单 捕杀三级保护动物怎样量刑
FDA批准口服Duvyzat治疗儿童杜氏肌营养不良症
如何正确开具发票以避免税务问题
甲巯咪唑和丙基硫氧嘧啶哪个好
GTO的策略目标是什么?
商铺未能按时交房对开发商的影响及业主维权指南
商铺买卖合同签订指南:六大关键问题全解析
如何编写高质量的系统需求规格说明?
年均市净率解析:投资者必知的市场指标
乌龟能不能吃?全面解析乌龟食用的安全性、营养价值、法律与伦理问题
澳洲留学生如何找到便宜的买菜渠道
换季收纳新思路:不挂不叠,省空间还不皱!
通过TestFlight进行内、外部测试的完整步骤
有转账记录怎么起诉?法律程序详解
转账记录如何作为有效证据材料
让孩子们脱离电子化环境
欠网贷被起诉立案后会怎样
时隔8年更新,2024 EASL临床实践指南:肝移植评估要点一览!
生理盐水和氯化钠的区别
无证驾驶摩托车处罚标准及情形详解
工程项目管理中的SV(计划进度偏差)详解
从消化系统判断猫咪是否健康
石膏板应如何正确开筒灯孔?开筒灯孔时有哪些要点需掌握?
康波萧条期进入职场的年轻人,什么时候能吃到一口时代红利
被误解的「95 后」,在「大厂」发光
厌奶期一般持续多久
护肤化妆的步骤顺序是什么
妆前补水正确方法