1. 首页 > Linux教程 > 正文

Linux教程FG555-大规模K8s自动化运维与CI/CD集成

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

# 安装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集成

# 安装Kubernetes插件
# 在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流水线

# 创建Jenkinsfile
$ 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配置示例

# 创建.gitlab-ci.yml文件
$ 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自动部署案例

# 安装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 80/TCP,443/TCP 5m

# 配置端口转发
$ 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 自动化运维脚本示例

#!/bin/bash
# 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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息