在Debian系统上搭建Kubernetes CI/CD流程,需围绕代码管理→持续集成→镜像构建→持续部署→监控反馈的核心链路设计,结合Debian的包管理特性与Kubernetes的容器编排能力,以下是详细步骤:
系统环境配置
确保Debian系统满足基础要求:至少2核CPU、2GB内存、20GB存储,安装curl、wget、gnupg等基础工具(sudo apt update && sudo apt install -y curl wget gnupg)。
安装Docker
Kubernetes依赖容器运行时,Debian下优先安装Docker:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
部署Kubernetes集群
使用kubeadm快速搭建单节点集群(生产环境建议多节点):
sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本避免升级破坏集群
# 初始化Master节点(替换为实际IP)
sudo kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装Flannel网络插件(支持Debian)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证集群状态:kubectl get nodes(应显示Ready状态)。
根据团队规模与需求选择工具,推荐以下两种方案:
Jenkins是开源CI/CD标杆,需在Debian上部署:
# 添加Jenkins仓库并安装
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo "deb http://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update && sudo apt install -y jenkins
sudo systemctl enable --now jenkins
# 访问Web界面(默认8080端口),输入初始密码(/var/lib/jenkins/secrets/initialAdminPassword),安装Suggested Plugins
配置Jenkins与Kubernetes集成:安装Kubernetes Plugin(自动创建Pod执行流水线)、Docker Plugin(管理镜像构建),并通过kubectl config view --raw > ~/.kube/config将Kubeconfig导入Jenkins。
Argo CD是声明式GitOps工具,专为Kubernetes设计,部署更轻量:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
访问Argo CD Web界面(kubectl -n argocd port-forward svc/argocd-server 8080:443),使用默认账号admin登录,配置与Git仓库的连接。
以Jenkins + Argo CD + Helm为例,流水线分为构建→测试→镜像推送→Helm部署四大阶段:
将代码托管在Git仓库(如GitHub、GitLab),配置Webhook(如Jenkins的Generic Webhook Trigger插件),当代码推送至main分支时自动触发流水线。
在Jenkins Pipeline中定义build阶段,执行代码编译与单元测试(以Node.js应用为例):
pipeline {
agent any
environment {
IMAGE_NAME = "myapp"
DOCKER_REGISTRY = "harbor.example.com/library"
IMAGE_TAG = "${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps { git branch: 'main', url: 'https://github.com/your-org/your-app.git' }
}
stage('Build') {
steps { sh 'npm install && npm run build' } // 编译应用
}
stage('Unit Test') {
steps { sh 'npm test' } // 执行单元测试
}
}
}
通过docker命令构建镜像并推送到私有仓库(如Harbor,需提前部署):
stage('Build & Push Image') {
steps {
script {
docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}").push()
// 打标签并推送latest版本(可选)
docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:latest").push()
}
}
}
注意:需提前在Jenkins中配置Docker Hub或Harbor的认证信息(通过Manage Jenkins → Credentials)。
使用Helm管理Kubernetes应用,修改values.yaml中的镜像tag,通过helm upgrade命令部署:
stage('Deploy to Kubernetes') {
steps {
sh '''
helm repo add myrepo https://charts.myrepo.com
helm repo update
helm upgrade --install myapp myrepo/myapp \
--namespace demo \
--set image.repository=${DOCKER_REGISTRY}/${IMAGE_NAME} \
--set image.tag=${IMAGE_TAG}
'''
}
}
或通过Argo CD实现GitOps:将Helm Chart存放在Git仓库(如helm/目录),Argo CD监听仓库变更并自动同步到Kubernetes集群(参考Argo CD GitOps示例)。
镜像安全:在流水线中添加镜像漏洞扫描(如Trivy、Clair),拒绝有漏洞的镜像推送:
stage('Scan Image') {
steps { sh 'trivy image ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}' }
}
不可变镜像标签:避免使用latest标签,通过BUILD_NUMBER或Git Commit ID作为镜像tag,确保版本可追溯。
回滚机制:通过Helm的rollback命令或Argo CD的sync功能快速回滚到上一稳定版本(如helm rollback myapp 1)。
权限控制:通过Kubernetes RBAC限制Jenkins/Argo CD的权限(如仅允许部署到特定命名空间),避免未授权操作。
监控与告警:集成Prometheus+Granafa监控流水线执行状态,通过Alertmanager发送告警(如流水线失败、镜像扫描未通过)。
通过以上步骤,可在Debian系统上搭建完整的Kubernetes CI/CD流程,实现代码提交→自动构建→测试→部署的全链路自动化,提升应用交付效率与可靠性。