使用Deployment部署运行Nginx和Apache服务

1.Deployment 简介

在Kubernetes(k8s)中,Deployment 是一种核心控制器资源,用于管理无状态应用的声明式部署、扩展与更新。它通过定义应用的期望状态,由控制器自动维护实际状态与期望状态的一致性,是容器化应用管理的核心工具。

常用的内置工作负载资源类型。

|-------------|------------------------------------|
| 资源类型 | 功能 |
| Deployment | 管理集群中的无状态应用程序,如Web服务 |
| StatefulSet | 管理集群中的有状态应用程序,如MongoDB |
| DaemonSet | 管理集群中的守护进程集,确保所有节点运行同一个Pod,如日志收集组件 |
| Job | 运行一次性任务 |
| CronJob | 运行周期性任务 |

Deployment通过管理ReplicaSet实现Pod的副本控制。用户定义Deployment后,控制器会创建对应的ReplicaSet,并由ReplicaSet负责Pod的创建、删除与监控。当用户更新Deployment时,控制器会创建新的ReplicaSet并逐步迁移流量,最终替换旧版本。

Deployment的核心功能包括:

1. 声明式部署:

用户通过YAML文件定义应用的期望状态(如副本数、镜像版本、资源限制等),Deployment控制器负责创建或更新资源以匹配定义。

2.滚动更新:

支持零停机更新策略,通过逐步替换旧版本Pod实现平滑升级。用户可配置更新参数(如最大不可用Pod数、最大新增Pod数)以控制更新速度。

3.版本回滚:

自动记录每次更新的修订历史,用户可快速回滚到任意历史版本,确保应用稳定性。

4.自动扩缩容:

根据负载动态调整Pod副本数,支持手动设置或结合HPA(Horizontal Pod Autoscaler)实现自动扩展。

5.高可用性保障:

监控Pod状态,当Pod异常终止时自动重启或重建,确保应用持续可用。

2.实验基础和前置条件:

本实验以Kubernetes集群环境搭建与初始化_kubernetes 集群初始化 master 节点-CSDN博客为基础和前置条件。

3.使用Deployment进行nginx 应用的部署、更新、回滚和缩扩容:

本部分我们将使用Deployment进行nginx应用的部署、更新和回滚。

3.1部署Deployment:

3.1.1创建定义Deployment的配置文件:

创建定义Deployment的配置文件nginx-deploy.yaml。

3.1.2 基于配置文件创建Deployment:

基于上述配置文件nginx-deploy.yaml创建Deployment对象。

复制代码
kubectl apply -f ch04/nginx-deploy.yaml

3.1.3 检查该Deployment对象的状态:

执行以下命令检查该Deployment对象的状态的信息。

复制代码
kubectl get deployments -o wide

3.1.4 检查Deployment对象的当前部署状态:

执行以下命令检查该Deployment对象的当前部署状态。

复制代码
kubectl rollout status deployment/nginx-deploy

3.1.5查看Deployment创建的ReplicaSet对象:

删除我们创建的ReplicaSet对象。

复制代码
kubectl get rs

3.1.6 查看Deployment所创建的Pod对象:

执行以下命令,查看我们Deployment所创建的Pod对象。

复制代码
kubectl get pod -o wide

3.1.7 查看 Deployment 部署对象的详细:

执行以下命令,查看我们Deployment部署对象的详细信息。

复制代码
kubectl describe deployment nginx-deploy

3.1.8 访问Nginx应用程序进行实际测试:

复制代码
curl http://10.244.140.97
curl http://10.244.140.96
curl http://10.244.196.147

或者在master01主机、node01主机、node02主机中直接通过浏览器进行访问。

3.2.1 更新Deployment:

1.执行以下命令,将Nginx服务器的Pod所使用的镜像升级为nginx:1.16.1。

复制代码
 kubectl set image deployment.v1.apps/nginx-deploy nginx=nginx:1.16.1

2.执行以下命令,查看该Deployment对象的更新状态(过程)。

复制代码
kubectl rollout status deployment/nginx-deploy
  1. 查看Deployment对象创建的ReplicaSet对象

执行以下命令,查看我们创建的ReplicaSet对象。

复制代码
kubectl get rs
  1. 执行以下命令,查看Deployment资源更新之后新创建的Pod对象。

    kubectl get pod -o wide

5.执行以下命令,查看我们Deployment部署对象的详细信息。

复制代码
kubectl describe deployment nginx-deploy

我们可以看到新老ReplicaSet对象的扩容和缩容日志。

3.3.1 回滚Deployment更新:

1.使用以下命令,检查Deployment修订历史。

复制代码
kubectl rollout history deployment/nginx-deploy
  1. 使用以下命令,查看指定修订版本的详细信息(--revision选项指定版本号)。

    kubectl rollout history deployment/nginx-deploy --revision=2

  1. 执行以下命令,回滚到以前的版本,这里是版本1。

    kubectl rollout undo deployment/nginx-deploy --to-revision=1

  1. 执行以下命令,查看我们Deployment部署对象的详细信息。

    kubectl describe deployment nginx-deploy

  1. 执行以下命令,查看Deployment资源更新之后新创建的Pod对象。

    kubectl get pod -o wide

3.4.1 暂停、恢复Deployment的更新:

1.执行以下命令暂停Deployment更新。

复制代码
kubectl rollout pause deployment/nginx-deploy
  1. 执行以下命令,查看Deployment资源的ReplicaSet对象。

    kubectl get rs

  1. 执行以下命令,尝试更新Deployment的镜像。

    kubectl set image deployment/nginx-deploy nginx=nginx:1.17.1

  1. 执行以下命令,再次查看Deployment的ReplicaSet对象。

    kubectl get rs

  1. 执行以下命令,恢复已暂停的Deployment更新。

    kubectl rollout resume deployment/nginx-deploy

  1. 执行以下命令,再次查看Deployment的ReplicaSet对象。

    kubectl get rs -o wide

  1. 执行以下命令,查看我们Deployment部署对象的详细信息。

    kubectl describe deployment nginx-deploy

3.5.1 扩缩容 Deployment:

1.执行以下命令,将Deployment的Pod副本数扩容到5个。

复制代码
kubectl scale deployment/nginx-deploy --replicas=5

通过kubectl scale命令,我可以对Deployment部署直接进行扩缩容,其中--raplicas选项指定要达到的Pod副本数。

  1. 检查该Deployment对象的状态。

执行以下命令检查该Deployment对象的状态信息。

复制代码
kubectl get deployments -o wide
  1. 执行以下命令,进一步检查Pod的状态。

    kubectl get pod -o wide

nginx-deploy部署已经有了5个Pod副本。

另外,修改YAML配置文件里的.spec.replicas字段值,再执行kubectl apply命令实现Pod副本数的动态调整。

4.使用Deployment进行Apache 应用的部署、更新和缩扩容:

4.1部署Deployment:

4.1.1创建定义Deployment的配置文件:

创建定义Deployment的配置文件httpd-deploy.yaml。

4.1.2 基于配置文件创建Apache:

基于上述配置文件httpd-deploy.yaml创建Deployment对象,具体命令如下所示。

复制代码
kubectl apply -f ch04/httpd-deploy.yaml

4.1.3 检查该Deployment对象的状态:

执行以下命令检查该Deployment对象的状态的信息。

复制代码
kubectl get deployments -o wide

4.1.4执行以下命令,进一步检查Pod的状态:

复制代码
kubectl get pod -o wide

4.2 更新Deployment:

4.2.1执行以下命令,将Apache服务器的Pod所使用的镜像升级为httpd:2.4.46。

复制代码
kubectl set image deployment.v1.apps/httpd-deploy httpd=httpd:2.4.46

4.2.2 执行命令,查看Deployment的ReplicaSet对象:

具体命令,请参考本实验前文。

4.2.3执行命令,查看Deployment对象的状态信息:

具体命令,请参考本实验前文。

4.2.4执行命令,进一步检查Pod的状态:

具体命令,请参考本实验前文。

4.2.5执行以下命令,查看我们Deployment部署对象的详细信息:

具体命令,请参考本实验前文。

4.3 回滚Deployment更新:

4.3.1 使用kubectl rollout命令将当前Aapche的Deployment更新回滚到前一个更新:

4.3.2执行命令,查看Deployment的ReplicaSet对象:

具体命令,请参考本实验前文。

4.3.3执行命令,查看Deployment对象的状态信息:

具体命令,请参考本实验前文。

4.3.4执行命令,进一步检查Pod的状态:

具体命令,请参考本实验前文。

4.3.5执行以下命令,查看我们Deployment部署对象的详细信息:

具体命令,请参考本实验前文。

4.4 扩容Deployment副本:

4.4.1将Deployment扩容到 5 个副本:

4.4.2执行命令,查看Deployment的ReplicaSet对象:

具体命令,请参考本实验前文。

4.4.3执行命令,查看Deployment对象的状态信息:

具体命令,请参考本实验前文。

4.4.4执行命令,进一步检查Pod的状态:

具体命令,请参考本实验前文。

4.4.5执行以下命令,查看我们Deployment部署对象的详细信息:

具体命令,请参考本实验前文。

4.5 缩容Deployment副本:

4.5.1将Deployment缩容到 2 个副本:

4.5.2执行命令,查看Deployment的ReplicaSet对象:

具体命令,请参考本实验前文。

4.5.3执行命令,查看Deployment对象的状态信息:

具体命令,请参考本实验前文。

4.5.4执行命令,进一步检查Pod的状态:

具体命令,请参考本实验前文。

4.5.5执行以下命令,查看我们Deployment部署对象的详细信息:

具体命令,请参考本实验前文。

本实验到此结束!

相关推荐
q***82913 分钟前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
Claudedy15 分钟前
Linux 网络代理指南:解决下载慢、访问受限的开发痛点
linux·运维·网络·代理·proxy代理
q***146415 分钟前
RustDesk搭建公网中继服务器远控内网机器(完整版)
运维·服务器
EasyCVR1 小时前
视频汇聚平台EasyCVR服务器使用WiFi网卡时,为何无法向级联平台发送注册?
运维·服务器
kevin 11 小时前
财报处理自动化,财报OCR识别录入系统将非结构化报表转化为可分析数据
运维·自动化·ocr
King's King1 小时前
智慧医院全场景自动化解决方案及运维服务
运维·自动化
简道云平台1 小时前
如何2小时搭建一套工程项目安全巡检管理系统
运维·安全·项目管理
哈里谢顿2 小时前
Python 版本的 Kubernetes 镜像动手实验任务
kubernetes
zhendianluli2 小时前
windows文件通过SSH复制到ubuntu目录下
运维·ubuntu·ssh
dyxal2 小时前
linux系统上 WPS Office新增字体
linux·运维·wps