使用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
3. 查看Deployment对象创建的ReplicaSet对象
执行以下命令,查看我们创建的ReplicaSet对象。
kubectl get rs
4. 执行以下命令,查看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
2. 使用以下命令,查看指定修订版本的详细信息(--revision选项指定版本号)。
kubectl rollout history deployment/nginx-deploy --revision=2
3. 执行以下命令,回滚到以前的版本,这里是版本1。
kubectl rollout undo deployment/nginx-deploy --to-revision=1
4. 执行以下命令,查看我们Deployment部署对象的详细信息。
kubectl describe deployment nginx-deploy
5. 执行以下命令,查看Deployment资源更新之后新创建的Pod对象。
kubectl get pod -o wide
3.4.1 暂停、恢复Deployment的更新:
1.执行以下命令暂停Deployment更新。
kubectl rollout pause deployment/nginx-deploy
2. 执行以下命令,查看Deployment资源的ReplicaSet对象。
kubectl get rs
3. 执行以下命令,尝试更新Deployment的镜像。
kubectl set image deployment/nginx-deploy nginx=nginx:1.17.1
4. 执行以下命令,再次查看Deployment的ReplicaSet对象。
kubectl get rs
5. 执行以下命令,恢复已暂停的Deployment更新。
kubectl rollout resume deployment/nginx-deploy
6. 执行以下命令,再次查看Deployment的ReplicaSet对象。
kubectl get rs -o wide
7. 执行以下命令,查看我们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副本数。
2. 检查该Deployment对象的状态。
执行以下命令检查该Deployment对象的状态信息。
kubectl get deployments -o wide
3. 执行以下命令,进一步检查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部署对象的详细信息:
具体命令,请参考本实验前文。
本实验到此结束!