Part01-基础概念与理论知识
1.1 应用生命周期管理概述
应用生命周期管理(Application Lifecycle Management,ALM)是指从应用的设计、开发、测试、部署、运行到退役的全过程管理。在Kubernetes环境中,应用生命周期管理更加复杂,需要考虑容器编排、服务发现、负载均衡、自动扩缩容等因素。
from PG视频:www.itpux.com
K8s应用生命周期管理的核心目标包括:
- 确保应用的稳定运行
- 实现应用的快速部署和更新
- 提供应用的健康监控和故障处理
- 优化资源利用,降低运行成本
1.2 K8s应用生命周期阶段
K8s应用的生命周期通常包括以下阶段:
- 开发阶段:编写代码、构建镜像、测试
- 部署阶段:将应用部署到K8s集群
- 运行阶段:应用的日常运行、监控和维护
- 更新阶段:应用的版本更新、滚动升级
- 回滚阶段:当更新出现问题时回滚到之前的版本
- 退役阶段:应用的下线和资源清理
1.3 生命周期管理工具与实践
常用的K8s应用生命周期管理工具包括:
- Helm:K8s的包管理工具,用于管理应用的安装、更新和回滚
- Operator:用于管理复杂应用的自定义控制器
- Argo CD:基于GitOps的持续部署工具
- Flux:另一个GitOps工具,用于自动同步代码和集群状态
- Kustomize:用于定制K8s资源配置
。
Part02-生产环境规划与建议
2.1 应用部署策略规划
在生产环境中,常用的应用部署策略包括:
- 滚动更新:逐步替换旧版本的Pod,确保服务不中断
- 蓝绿部署:同时运行两个版本的应用,通过切换服务路由实现更新
- 金丝雀部署:先将新版本部署到一小部分实例,验证无误后再全面推广
- A/B测试:同时运行多个版本,根据用户反馈选择最佳版本
风哥提示:选择部署策略时,需要考虑应用的重要性、更新频率、回滚难度等因素。
2.2 版本管理与回滚策略
版本管理策略:
- 使用语义化版本号(如v1.0.0)
- 为镜像添加标签,包括版本号、Git提交哈希等
- 维护版本变更日志,记录每个版本的修改内容
- 使用Git等版本控制系统管理应用代码和配置
回滚策略:
- 保存每个版本的部署配置
- 建立回滚触发机制,当监控指标异常时自动回滚
- 定期测试回滚流程,确保回滚操作的可靠性
- 设置回滚时间窗口,避免在业务高峰期进行回滚
2.3 资源与环境规划
资源规划:
- 根据应用的资源需求设置合理的资源请求和限制
- 使用资源配额和限制范围管理命名空间的资源使用
- 考虑应用的峰值负载,预留足够的资源余量
- 使用Horizontal Pod Autoscaler(HPA)实现自动扩缩容
环境规划:
- 建立多环境(开发、测试、预生产、生产)
- 使用命名空间隔离不同环境的应用
- 配置环境特定的参数和配置
- 确保环境之间的一致性,减少部署差异
。
Part03-生产环境项目实施方案
以Helm为例,实施方案如下:
3.1 安装Helm
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
# 验证Helm安装
$ helm version
version.BuildInfo{
Version:”v3.10.0″,
GitCommit:”ce66412a723e4d890f70329d868f6439b225dc32″,
GitTreeState:”clean”,
GoVersion:”go1.18.更多视频教程www.fgedu.net.cn6″
}
3.2 创建Helm Chart
$ helm create fgedu-webapp
# 查看生成的Chart结构
$ ls -la fgedu-webapp/
total 28
drwxr-xr-x 5 user user 4096 Apr 3 10:00 .
drwxr-xr-x 3 user user 4096 Apr 3 10:00 ..
drwxr-xr-x 2 user user 4096 Apr 3 10:00 charts
drwxr-xr-x 2 user user 4096 Apr 3 10:00 templates
drwxr-xr-x 2 user user 4096 Apr 3 10:00 tests
-rw-r–r– 1 user user 1169 Apr 3 10:00 Chart.yaml
-rw-r–r– 1 user user 1841 Apr 3 10:00 values.yaml
# 修改values.yaml文件
$ cat > fgedu-webapp/values.yaml << 'EOF'
replicaCount: 3
image:
repository: harbor.fgedu.net.cn/library/webapp
pullPolicy: IfNotPresent
tag: "v1.0.0"
imagePullSecrets:
- name: harbor-secret
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: ""
hosts:
- host: webapp.fgedu.net.cn
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp
port:
number: 80
tls:
- secretName: webapp-tls
hosts:
- webapp.fgedu.net.cn
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 80
targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
EOF
3.3 部署应用
$ helm repo add fgedu https://charts.fgedu.net.cn
$ helm repo update
# 部署应用
$ helm install webapp fgedu-webapp –namespace default –create-namespace
# 查看部署状态
$ helm status webapp
NAME: webapp
LAST DEPLOYED: Wed Apr 3 10:15:00 2026
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods –namespace default -l “app.kubernetes.io/name=fgedu-webapp,app.kubernetes.io/instance=webapp” -o jsonpath=”{.items[0].metadata.name}”)
export CONTAINER_PORT=$(kubectl get pod –namespace default $POD_NAME -o jsonpath=”{.spec.containers[0].ports[0].containerPort}”)
echo “Visit http://127.0.0.1:8080 to use your application”
kubectl –namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
# 查看Pod状态
$ kubectl get pods -l app.kubernetes.io/instance=webapp
NAME READY STATUS RESTARTS AGE
webapp-fgedu-webapp-0 1/1 Running 0 5m
webapp-fgedu-webapp-1 1/1 Running 0 5m
webapp-fgedu-webapp-2 1/1 Running 0 5m
3.4 更新应用
$ helm upgrade webapp fgedu-webapp –set image.tag=v1.1.0
# 查看更新状态
$ helm status webapp
NAME: webapp
LAST DEPLOYED: Wed Apr 3 10:30:00 2026
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
# 查看Pod状态
$ kubectl get pods -l app.kubernetes.io/instance=webapp
NAME READY STATUS RESTARTS AGE
webapp-fgedu-webapp-0 1/1 Running 0 2m
webapp-fgedu-webapp-1 1/1 Running 0 2m
webapp-fgedu-webapp-2 1/1 Running 0 2m
# 查看Pod镜像
$ kubectl get pods -l app.kubernetes.io/instance=webapp -o jsonpath='{range .items[*]}{.metadata.name}{“\t”}{.spec.containers[0].image}{“\n”}{end}’
webapp-fgedu-webapp-0 harbor.fgedu.net.cn/library/webapp:v1.1.0
webapp-fgedu-webapp-1 harbor.fgedu.net.cn/library/webapp:v1.1.0
webapp-fgedu-webapp-2 harbor.fgedu.net.cn/library/webapp:v1.1.0
3.5 回滚应用
$ helm history webapp
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Apr 3 10:学习交流加群风哥QQ11325717415:00 2026 deployed fgedu-webapp-0.1.0 1.0.0 Install c更多学习教程公众号风哥教程itpux_comomplete
2 Wed Apr 3 10:30:00 2026 deployed fgedu-webapp-0.1.0 1.1.0 Upgrade complete
# 回滚到版本1
$ helm rollback webapp 1
Rollback was a success!
# 查看回滚状态
$ helm status webapp
NAME: webapp
LAST DEPLOYED: Wed Apr 3 10:45:00 2026
NAMESPACE: default
STATUS: deployed
REVISION: 3
TEST SUITE: None
# 查看Pod镜像
$ kubectl get pods -l app.kubernetes.io/instance=webapp -o jsonpath='{range .items[*]}{.metadata.name}{“\t”}{.spec.containers[0].image}{“\n”}{end}’
webapp-fgedu-webapp-0 harbor.fgedu.net.cn/library/webapp:v1.0.0
webapp-fgedu-webapp-1 harbor.fgedu.net.cn/library/webapp:v1.0.0
webapp-fgedu-webapp-2 harbor.fgedu.net.cn/library/webapp:v1.0.0
。
Part04-生产案例与实战讲解
4.1 企业级应用生命周期管理案例
某企业的应用生命周期管理实践如下:
- 开发阶段:使用GitLab进行代码管理,Jenkins进行CI/CD
- 部署阶段:使用Helm和Argo CD进行应用部署
- 运行阶段:使用Prometheus和Grafana进行监控
- 更新阶段:使用滚动更新策略,配合金丝雀发布
- 回滚阶段:建立自动回滚机制,当监控指标异常时触发
- 退役阶段:使用Helm uninstall命令清理资源
4.2 多环境部署案例
$ mkdir -p environments/{dev,test,prod}
# 开发环境配置
$ cat > environments/dev/values.yaml << 'EOF'
replicaCount: 2
image:
tag: "dev-$(git rev-parse --short HEAD)"
resources:
requests:
cpu: "50m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
autoscaling:
enabled: false
EOF
# 测试环境配置
$ cat > environments/test/values.yaml << 'EOF'
replicaCount: 3
image:
tag: "test-$(git rev-parse --short HEAD)"
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 6
EOF
# 生产环境配置
$ cat > environments/prod/values.yaml << 'EOF'
replicaCount: 5
image:
tag: "v1.0.0"
resources:
requests:
cpu: "200m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
autoscaling:
enabled: true
minReplicas: 5
maxReplicas: 10
EOF
# 部署到开发环境
$ helm install webapp-dev fgedu-webapp --namespace dev --create-namespace -f environments/dev/values.yaml
# 部署到测试环境
$ helm install webapp-test fgedu-webapp --namespace test --create-namespace -f environments/test/values.yaml
# 部署到生产环境
$ helm install webapp-prod fgedu-webapp --namespace prod --create-namespace -f environments/prod/values.yaml
4.3 应用健康检查与自愈
$ cat > deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: webapp labels: app: webapp spec: replicas: 3 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: webapp image: harbor.fgedu.net.cn/library/webapp:v1.0.0 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" livenessProbe: httpGet: path: /health port: 80 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 80 initialDelaySeconds: 5 periodSeconds: 5 startupProbe: httpGet: path: /health port: 80 failureThreshold: 30 periodSeconds: 10 EOF # 应用配置 $ kubectl apply -f deployment.yaml # 查看Pod状态 $ kubectl get pods -l app=webapp NAME READY STATUS RESTARTS AGE webapp-567890abc-12345 1/1 Running 0 5m webapp-567890abc-67890 1/1 Running 0 5m webapp-567890abc-abcde 1/1 Running 0 5m # 模拟Pod故障 $ kubectl exec webapp-567890abc-12345 -- /bin/sh -c "kill 1" # 查看Pod状态变化 $ kubectl get pods -l app=webapp NAME READY STATUS RESTARTS AGE webapp-567890abc-12345 0/1 CrashLoopBackOff 1 6m webapp-567890abc-67890 1/1 Running 0 6m webapp-567890abc-abcde 1/1 Running 0 6m # 等待一段时间后查看 $ kubectl get pods -l app=webapp NAME READY STATUS RESTARTS AGE webapp-567890abc-67890 1/1 Running 0 7m webapp-567890abc-abcde 1/1 Running 0 7m webapp-567890abc-fghij 1/1 Running 0 1m
4.4 应用生命周期管理脚本
# app_lifecycle.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 部署应用
deploy_app() {
local env=$1
local chart=$2
local values=$3
echo “=== 部署应用到$env环境 ===”
helm install webapp-$env $chart –namespace $env –create-namespace -f $values
helm status webapp-$env
}
# 更新应用
update_app() {
local env=$1
local chart=$2
local values=$3
echo “=== 更新$env环境的应用 ===”
helm upgrade webapp-$env $chart –namespace $env -f $values
helm status webapp-$env
}
# 回滚应用
rollback_app() {
local env=$1
local revision=$2
echo “=== 回滚$env环境的应用到版本$revision ===”
helm rollback webapp-$env $revision –namespace $env
helm status webapp-$env
}
# 查看应用状态
status_app() {
local env=$1
echo “=== 查看$env环境的应用状态 ===”
helm status webapp-$env –namespace $env
kubectl get pods -n $env -l app.kubernetes.io/instance=webapp-$env
}
# 卸载应用
uninstall_app() {
local env=$1
echo “=== 卸载$env环境的应用 ===”
helm uninstall webapp-$env –namespace $env
kubectl delete namespace $env
}
# 主菜单
main() {
echo “应用生命周期管理脚本”
echo “1. 部署应用”
echo “2. 更新应用”
echo “3. 回滚应用”
echo “4. 查看应用状态”
echo “5. 卸载应用”
echo “6. 退出”
read -p “请选择操作: ” choice
case $choice in
1)
read -p “请输入环境(dev/test/prod): ” env
read -p “请输入Chart路径: ” chart
read -p “请输入values文件路径: ” values
deploy_app $env $chart $values
;;
2)
read -p “请输入环境(dev/test/prod): ” env
read -p “请输入Chart路径: ” chart
read -p “请输入values文件路径: ” values
update_app $env $chart $values
;;
3)
read -p “请输入环境(dev/test/prod): ” env
read -p “请输入回滚版本号: ” revision
rollback_app $env $revision
;;
4)
read -p “请输入环境(dev/test/prod): ” env
status_app $env
;;
5)
read -p “请输入环境(dev/test/prod): ” env
uninstall_app $env
;;
6)
exit 0
;;
*)
echo “无效选择”
;;
esac
main
}
main
from Linux:www.itpux.com。
Part05-风哥经验总结与分享
5.1 应用生命周期管理最佳实践
- 标准化流程:建立统一的应用生命周期管理流程,确保所有应用都遵循相同的标准。
- 自动化操作:尽量自动化应用的部署、更新、回滚等操作,减少人为错误。
- 监控与告警:建立完善的监控体系,及时发现和处理应用问题。
- 版本管理:使用语义化版本号,维护清晰的版本变更日志。
- 环境一致性:确保不同环境的配置和依赖一致,减少部署差异。
5.2 常见问题与解决方案
- 部署失败:检查镜像是否存在、资源是否充足、配置是否正确。
- 更新失败:使用滚动更新策略,设置合理的就绪探针和存活探针。
- 回滚失败:确保之前的版本仍然可用,检查网络连接和存储状态。
- 资源不足:合理设置资源请求和限制,使用HPA实现自动扩缩容。
- 配置管理混乱:使用Helm或Kustomize管理配置,避免硬编码。
5.3 性能优化建议
- 镜像优化:使用多阶段构建,减小镜像大小,提高部署速度。
- 启动优化:优化应用启动时间,设置合理的启动探针。
- 资源优化:根据应用的实际需求调整资源配置,避免资源浪费。
- 网络优化:使用服务网格或优化网络策略,提高网络性能。
- 存储优化:使用合适的存储类型,避免不必要的存储开销。
5.4 未来发展趋势
- GitOps:使用Git作为单一事实来源,实现基础设施即代码。
- 自动化运维:结合AI和机器学习,实现智能化的应用生命周期管理。
- 服务网格:使用Istio等服务网格工具,提供更细粒度的流量管理和监控。
- 多集群管理:实现跨多个K8s集群的应用管理和协调。
- 边缘计算:将应用生命周期管理扩展到边缘设备。
风哥提示:应用生命周期管理是K8s运维的核心部分,需要持续学习和优化,以适应不断变化的业务需求和技术环境。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
