问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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 只有在所有请求处理完成后才会关闭

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号