在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流程,實現代碼提交→自動構建→測試→部署的全鏈路自動化,提升應用交付效率與可靠性。