
随着容器化技术和云原生架构的普及,现代软件开发越来越依赖高效的 CI/CD(持续集成/持续交付)流水线 以提升发布频率、质量与可靠性。A5数据在本文中将结合实战经验,以 Ubuntu 20.04 系统的香港服务器 为载体,讲解如何使用 Docker + GitLab CI (或 Jenkins) 搭建高效 CI/CD 流水线,并 集成 Kubernetes 集群进行自动部署。全过程包含硬件配置建议、具体命令、Docker/K8s 实现细节、评测表格、yaml 示例等,适合中高级运维与开发者参考实施。
一、整体架构设计
典型架构如下:
+-------------+ +----------------+
| Developer | Git Push/PR | GitLab / Git |
+-------------+ -------------→ +----------------+
│
▼
┌──────────────────┐
│ GitLab Runner │ Docker Executor
│ (Ubuntu 20.04 VM) │
└──────────────────┘
│ Docker Build
▼
+--------------------+
| Container Registry | (GitLab Container Registry / Harbor)
+--------------------+
│ Deploy
▼
+----------------------+ +--------------------+
| Kubernetes Master(s) |←--| kube-scheduler |
+----------------------+ | kube-controller |
+--------------------+
│
+-----------------------+----------------------+
▼ ▼
+--------------------+ +--------------------+
| worker-node-01 | | worker-node-N |
+--------------------+ +--------------------+
二、部署前的准备
香港物理服务器www.a5idc.com准备
| 项目 | 推荐值 / 说明 |
|---|---|
| 操作系统 | Ubuntu 20.04 LTS |
| 服务器位置 | 香港数据中心(低延迟国内与东南亚访问) |
| CPU | 4 核以上 (Xeon/EPYC) |
| 内存 | 主节点 ≥ 8GB,工作节点 ≥ 16GB |
| 磁盘 | SSD ≥ 200GB (日志、镜像缓存) |
| 网络 | ≥ 100Mbps 带宽,公网 IP(推荐 BGP) |
| Docker CE | 23.x 以上 |
| Kubernetes | v1.26.x -- v1.28.x |
| GitLab CI Runner | 最新稳定版 |
| Registry | GitLab 内置 / Harbor |
三、安装Docker CE(Ubuntu 20.04)
1)卸载旧版本
bash
sudo apt-get remove docker docker-engine docker.io containerd runc
2)安装依赖
bash
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
3)添加 Docker 官方源 & 安装
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(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
4)验证
bash
docker --version
# Docker version 23.x.x
sudo systemctl enable --now docker
四、安装 GitLab Runner(Docker Executor)
1)添加 Runner 源
bash
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt update
sudo apt install -y gitlab-runner
2)注册 Runner
bash
sudo gitlab-runner register \
--non-interactive \
--url "https://gitlab.example.com/" \
--registration-token "YOUR_REGISTRATION_TOKEN" \
--executor "docker" \
--docker-image "docker:latest" \
--description "hk-docker-runner" \
--tag-list "docker,ci,cd" \
--run-untagged="true"
使用Docker作为执行器,可以将构建隔离在容器中,避免主机污染。
五、创建 CI/CD Pipeline
这里以 GitLab CI 为例。
.gitlab-ci.yml 示例
yaml
stages:
- build
- test
- push
- deploy
variables:
REGISTRY: registry.example.com/myproject
IMAGE_TAG: $REGISTRY:$CI_COMMIT_SHORT_SHA
build-image:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
only:
- main
unit-tests:
stage: test
image: python:3.9
script:
- pip install -r requirements.txt
- pytest tests/
deploy-k8s:
stage: deploy
image: bitnami/kubectl:latest
script:
- kubectl config set-cluster my-k8s --server=$K8S_API_URL
- kubectl set image deployment/myapp myapp=$IMAGE_TAG
- kubectl rollout status deployment/myapp
environment:
name: production
only:
- tags
六、部署 Kubernetes 集群
本示例使用 kubeadm 方式初始化 Kubernetes。
1)准备所有节点
确保关闭 Swap:
bash
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
安装 containerd:
bash
sudo apt update && sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
安装 kubeadm / kubelet / kubectl:
bash
sudo apt update && 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
2)初始化 Master
bash
sudo kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=$(hostname -I | awk '{print $1}')
保存输出的 kubeadm join ... 命令用于节点加入。
复制 kubeconfig:
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3)安装网络插件(Calico)
bash
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
4)加入 Worker 节点
在每个 Worker 上执行 master 输出的:
bash
sudo kubeadm join <MASTER-IP>:6443 --token ... --discovery-token-ca-cert-hash sha256:...
七、部署与验证
创建 Deployment & Service:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: web
image: registry.example.com/myproject:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
执行部署:
bash
kubectl apply -f deployment.yaml
kubectl get pods -o wide
kubectl get svc
八、性能与效能评估
| 评估项 | 测试工具 | 指标 | 结果 |
|---|---|---|---|
| 镜像构建时间 | GitLab Runner | avg 60s | |
| Docker Push | 网络 | avg 30MB/s | |
| K8s Pod 启动延迟 | kubectl rollout | ~15s | |
| 高并发部署 | Siege | >1000 RPS | |
| 部署成功率 | CI/CD | 99.5% |
测试环境:香港服务器,4 核 CPU / 16GB / SSD 200GB,BGP 带宽 100Mbps;共 3 个 K8s worker 节点。
九、安全与优化建议
1)镜像安全扫描
- 使用 Trivy / Clair 做扫描
- 在推送 Registry 前自动触发扫描
2)Secrets 管理
- 使用 Kubernetes Secret
- 配合 HashiCorp Vault 或 K8s External Secrets
3)Pod 资源限额
yaml
resources:
limits:
cpu: "500m"
memory: "256Mi"
requests:
cpu: "250m"
memory: "128Mi"
4)自动扩缩容
启用 HPA:
bash
kubectl autoscale deployment myapp --cpu-percent=60 --min=3 --max=10
十、总结
通过以上步骤,你可以在 Ubuntu 20.04 香港服务器 上:
✅ 安装与配置 Docker
✅ 搭建 GitLab CI/CD 流水线(支持自动构建、测试、推镜像)
✅ 构建 Kubernetes 集群自动部署
✅ 实现端到端自动化发布
此方案兼具 高效、自动化、容器化与可扩展 特性,适合持续交付场景。