Part01-基础概念与理论知识
1.1 K8s自动化运维概述
Kubernetes自动化运维是指通过工具和流程,实现K8s集群的自动部署、配置、监控和管理。自动化运维可以提高效率、减少人为错误,确保集群的稳定性和可靠性。
自动化运维的核心目标包括:
- 减少手动操作,提高效率
- 确保配置一致性
- 快速响应故障
- 降低运维成本
1.2 CI/CD基础概念
CI/CD(持续集成/持续部署)是一种软件开发实践,通过自动化构建、测试和部署流程,实现代码的快速、可靠交付。
CI(持续集成):开发人员频繁将代码提交到版本控制系统,每学习交流加群风哥QQ113257174次提交都会触发自动构建和测试,确保代码质量。
CD(持续部署):通过自动化流程,将通过测试的代码自动部署到生产环境,实现快速交付。
1.3 K8s与CI/CD集成架构
K8s与CI/CD集成的典型架构包括:
- 代码仓库(GitHub、GitLab、Gitee)
- CI/CD工具(Jenkins、GitLab CI、GitHub Actions、Argo CD)
- 镜像仓库(Docker Registry、Harbor)
- K8s集群
- 监控系统(Prometheus、Grafana)
。
Part02-生产环境规划与建议
2.1 自动化运维平台规划
在规划自动化运维平台时,需要考虑以下因素:
- 工具选择:根据团队规模和技术栈选择合适的CI/CD工具
- 基础设施:确保CI/CD服务器和K8s集群的资源充足
- 网络架构:确保CI/CD工具与K8s集群之间的网络连通性
- 安全策略:设置适当的访问控制和权限管理
2.2 CI/CD流水线设计
CI/CD流水线设计应包含以下阶段:
from PG视频:www.itpux.com
- 代码检查:静态代码分析、代码风格检查
- 构建:编译代码、构建镜像
- 测试:单元测试、集成测试、端到端测试
- 部署:部署到测试环境、预生产环境、生产环境
- 验证:部署后验证、性能测试
- 回滚:故障时自动回滚
2.3 资源与权限规划
资源规划:
- CI/CD服务器:根据构建需求配置CPU、内存和存储
- K8s集群:根据应用规模配置节点数量和资源
- 镜像仓库:确保存储空间充足,支持镜像版本管理
权限规划:
- 代码仓库:设置分支保护、合并权限
- CI/CD工具:设置用户角色和权限
- K8s集群:使用RBAC设置精细的权限控制
风哥提示:在生产环境中,建议使用多环境隔离(开发、测试、预生产、生产),并设置严格的权限控制。
Part03-生产环境项目实施方案
以Jenkins与K8s集成为例,实施方案如下:
3.1 安装Jenkins
$ sudo dnf install -y jenkins
# 启动Jenkins服务
$ sudo systemctl start jenkins
$ sudo systemctl enable jenkins
# 查看Jenkins状态
$ sudo systemctl status jenkins
● jenkins.service – Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-03 10:00:00 CST; 5min ago
Main PID: 12345 (java)
Tasks: 40 (limit: 4915)
Memory: 512.0M
CPU更多学习教程公众号风哥教程itpux_com: 25.0%
CGroup: /system.slice/jenkins.service
└─12345 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war –webroot=/var/cache/jenkins/war –httpPort=8080
3.2 配置Jenkins与K8s集成
# 在Jenkins管理界面 → 插件管理 → 可用插件 → 搜索Kubernetes → 安装
# 配置Kubernetes集群
# 在Jenkins管理界面 → 系统管理 → 云 → 新增云 → Kubernetes
# 配置集群信息:
# – 名称:fgedu-k8s
# – Kubernetes URL:https://192.168.1.100:6443
# – 凭据:添加Kubernetes集群的服务账户令牌
# – 命名空间:jenkins
# – Jenkins URL:http://jenkins.fgedu.net.cn:8080
3.3 创建CI/CD流水线
$ cat > Jenkinsfile << 'EOF' pipeline { agent { kubernetes { yaml ''' apiVersion: v1 kind: Pod spec: containers: - name: build image: node:16 command: ['cat'] tty: true - name: docker image: docker:20.10 command: ['cat'] tty: true volumeMounts: - name: docker-socket mountPath: /var/run/docker.sock volumes: - name: docker-socket hostPath: 学习交流加群风哥微信: itpux-compath: /var/run/docker.sock ''' } } stages { stage('代码检查') { steps { sh 'npm install' sh 'npm run lint' } } stage('构建镜像') { steps { sh 'docker build -t harbor.fgedu.net.cn/library/webapp:${BUILD_NUMBER} .' sh 'docker login harbor.fgedu.net.cn -u admin -p Harbor12345' sh 'docker push harbor.fgedu.net.cn/library/webapp:${BUILD_NUMBER}' } } stage('部署到K8s') { steps { sh 'kubectl apply -f k8s/deployment.yaml' sh 'kubectl rollout status deployment/webapp' } } stage('验证部署') { steps { sh 'curl -s http://webapp.fgedu.net.cn/health | jq' } } } post { success { echo '部署成功!' } failure { echo '部署失败,执行回滚操作...' sh 'kubectl rollout undo deployment/webapp' } } } EOF
。
Part04-生产案例与实战讲解
4.1 企业级CI/CD流水线案例
某企业的CI/CD流水线设计如下:
- 代码仓库:GitLab
- CI/CD工具:GitLab CI
- 镜像仓库:Harbor
- K8s集群:多环境(开发、测试、预生产、生产)
4.2 GitLab CI配置示例
$ cat > .gitlab-ci.yml << 'EOF' stages: - lint - build - test - deploy-dev - deploy-test - deploy-prod lint: stage: lint image: node:16 script: - npm install - npm run lint only: - branches build: stage: build image: docker:20.10 services: - docker:dind script: - docker login harbor.fgedu.net.cn -u $HARBOR_USER -p $HARBOR_PASSWORD - docker build -t harbor.fgedu.net.cn/library/webapp:${CI_COMMIT_SHORT_SHA} . - docker push harbor.fgedu.net.cn/library/webapp:${CI_COMMIT_SHORT_SHA} only: - branches test: stage: test image: node:16 script: - npm install - npm test only: - branches deploy-dev: stage: deploy-dev image: bitnami/kubectl:latest script: - kubectl config use-context dev - sed -i 's|TAG|${CI_COMMIT_SHORT_SHA}|g' k8s/deployment.yaml - kubectl apply -f k8s/deployment.yaml -n dev - kubectl rollout status deployment/webapp -n dev only: - develop deploy-test: stage: deploy-test image: bitnami/kubectl:latest script: - kubectl config use-context test - sed -i 's|TAG|${CI_COMMIT_SHORT_SHA}|g' k8s/deployment.yaml - kubectl apply -f k8s/deployment.yaml -n test - kubectl rollout status deployment/webapp -n test only: - main deploy-prod: stage: deploy-prod image: bitnami/kubectl:latest script: - kubectl config use-context prod - sed -i 's|TAG|${CI_COMMIT_SHORT_SHA}|g' k8s/deployment.yaml - kubectl apply -f k8s/deployment.yaml -n prod - kubectl rollout status deployment/webapp -n prod only: - tags when: manual EOF
4.3 Argo CD自动部署案例
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# 查看Argo CD服务
$ kubectl get svc -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server ClusterIP 10.96.232.158
# 配置端口转发
$ kubectl port-forward svc/argocd-server -n argocd 8080:80
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
# 登录Argo CD
$ argocd login localhost:8080
Username: admin
Password: <获取初始密码: kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d>
# 创建应用
$ argocd app create webapp \
–repo https://gitlab.fgedu.net.cn/fgedu/webapp.git \
–path k8s \
–dest-server https://kubernetes.default.svc \
–dest-namespace default
# 同步应用
$ argocd app sync webapp
# 查看应用状态
$ argocd app get webapp
Name: webapp
Project: default
Server: https://kubernetes.default.svc
Namespace: default
URL: https://localhost:8080/applications/webapp
Repo: https://gitlab.fgedu.net.cn/fgedu/webapp.git
Target: HEAD
Path: k8s
Sync Policy:
Sync Status: Synced
Health Status: Healthy
CONDITION MESSAGE LAST TRANSITION
Synced Sync successful 2026-04-03T10:30:00Z
Healthy Deployment is healthy 2026-04-03T10:30:05Z
。
4.4 自动化运维脚本示例
# k8s_automation.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 检查集群状态
check_cluster() {
echo “=== 检查集群状态 ===”
kubectl get nodes
kubectl get pods –all-namespaces
}
# 部署应用
deploy_app() {
echo “=== 部署应用 ===”
kubectl apply -f $1
kubectl rollout status deployment $(basename $1 .yaml)
}
# 监控应用状态
monitor_app() {
echo “=== 监控应用状态 ===”
kubectl get pods -l app=$1
kubectl top pods -l app=$1
}
# 执行备份
backup_cluster() {
echo “=== 备份集群配置 ===”
mkdir -p /backup/k8s
kubectl get all –all-namespaces -o yaml > /backup/k8s/cluster-$(date +%Y%m%d).yaml
etcdctl snapshot save /backup/k8s/etcd-$(date +%Y%m%d).db
}
# 主菜单
main() {
echo “K8s自动化运维脚本”
echo “1. 检查集群状态”
echo “2. 部署应用”
echo “3. 监控应用状态”
echo “4. 备份集群配置”
echo “5. 退出”
read -p “请选择操作: ” choice
case $choice in
1)
check_cluster
;;
2)
read -p “请输入部署文件路径: ” file
deploy_app $file
;;
3)
read -p “请输入应用名称: ” app
monitor_app $app
;;
4)
backup_cluster
;;
5)
exit 0
;;
*)
echo “无效选择”
;;
esac
main
}
main
from Linux:www.itpux.com。
Part05-风哥经验总结与分享
5.1 自动化运维最佳实践
- 标准化配置:使用配置管理工具(如Ansible)管理K8s集群配置,确保配置一致性。
- 自动化测试:在CI/CD流水线中集成各种测试,确保代码质量和应用稳定性。
- 监控与告警:建立完善的监控体系,及时发现和处理问题。
- 版本控制:对K8s配置文件和应用代码进行版本控制,便于回滚和审计。
- 文档化:详细记录自动化运维流程和配置,便于团队协作和知识传承。
5.2 CI/CD集成注意事项
- 安全性:保护CI/CD工具的凭据和密钥,避免泄露。
- 可扩展性:设计可扩展的CI/CD流水线,适应不同规模的应用。
- 可靠性:确保CI/CD流水线的可靠性,避免因工具故障导致部署失败。
- 性能优化:优化CI/CD流水线的执行速度,减少部署时间。
- 回滚机制:建立完善的回滚机制,在部署失败时快速恢复。
5.3 常见问题与解决方案
- 镜像构建失败:检查Dockerfile语法、依赖项和网络连接。
- 部署超时:检查K8s集群资源、网络连接和应用健康检查配置。
- 权限问题:确保CI/CD工具具有足够的权限操作K8s集群。
- 流水线执行缓慢:优化构建过程、使用缓存、并行执行测试。
- 配置管理混乱:使用配置管理工具,统一管理配置文件。
5.4 未来发展趋势
- GitOps:使用Git作为单一事实来源,实现基础设施即代码。
- 自动化运维平台:集成多种工具,提供统一的运维界面。
- AI辅助运维:利用AI技术预测和解决问题。
- 多云管理:支持在多个云平台部署和管理应用。
- 边缘计算集成:将CI/CD扩展到边缘设备。
风哥提示:自动化运维和CI/CD集成是现代DevOps实践的核心,需要持续学习和优化,以适应不断变化的技术环境。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
