16.3 阿里雲
如圖 16-3 所示,阿里雲是國內主流雲服務平台之一。
圖 16-3:阿里雲標識
阿里雲創立於 2009 年,是中國較早的雲端運算平台。阿里雲致力於提供安全、可靠的計算和數據處理能力。
阿里雲的客戶群體中,活躍著微博、虎牙、魅族、優酷等一大批明星網際網路公司。在天貓雙 11 全球狂歡節等極富挑戰的應用場景中,阿里雲保持著良好的執行紀錄。
阿里雲容器服務 Kubernetes 版 ACK 提供了高效能、可伸縮的容器應用管理服務,支援在一組雲服務器上透過 Docker 容器來進行應用生命週期管理。容器服務極大簡化了使用者對容器管理叢集的搭建工作,無縫整合了阿里雲虛擬化、儲存、網路和安全能力。容器服務提供了多種應用發布方式和流水線般的持續交付能力,原生支援微服務架構,助力使用者無縫上雲和跨雲管理。
圖 16-4:阿里雲容器服務示意圖(請訪問 阿里雲容器服務 ACK 官方文件 檢視最新介面)
阿里雲容器服務 ACK 簡介
阿里雲容器服務 Kubernetes 版 (ACK, Container Service for Kubernetes) 是一款託管式 Kubernetes 服務,基於開源 Kubernetes 建立,提供企業級的容器編排和管理能力。ACK 整合了阿里雲儲存、網路和安全能力,支援多種應用部署模式和持續交付流程。
基本使用步驟
1. 建立叢集
登入阿里雲控制台,進入容器服務 > Kubernetes 叢集:
- 點選 『建立叢集』,選擇叢集設定
- 設定叢集名稱、地域、可用區和節點型別
- 選擇節點規格和數量(支援彈性伸縮)
- 設定網路引數和安全設定
- 完成建立,下載 kubeconfig 檔案
# 設定本地 kubectl
export KUBECONFIG=/path/to/kubeconfig.yaml
kubectl get nodes
2. 部署容器應用
透過 Deployment 部署應用範例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: registry.cn-hangzhou.aliyuncs.com/myapp/web:v1
ports:
- containerPort: 8080
resources:
limits:
memory: "512Mi"
cpu: "500m"
部署應用:
kubectl apply -f deployment.yaml
kubectl get pods -o wide
kubectl logs <pod-name>
3. 暴露服務
建立 Service 暴露應用:
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: web
應用:
kubectl apply -f service.yaml
kubectl get svc web-service
阿里雲 Docker 映象加速器設定
為了加快從阿里雲映象源拉取官方映象的速度,可以設定映象加速器。阿里雲為容器服務 ACK 使用者提供了免費的映象加速服務。
獲取加速器地址
登入阿里雲容器映象服務控制台,在 『映象工具』 > 『映象加速器』 中可獲取個人的加速器地址(類似於 https://xxxxxx.mirror.aliyuncs.com)。
Linux 系統設定
編輯或建立 /etc/docker/daemon.json 檔案:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
新增或修改以下內容(替換為你的加速器地址):
{
"registry-mirrors": [
"https://xxxxxx.mirror.aliyuncs.com"
]
}
重新載入並重啟 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
驗證設定生效:
docker info | grep -A 5 "Registry Mirrors"
Windows/Mac 設定
在 Docker Desktop 的 Settings 中:
- 進入 『Docker Engine』 標籤
- 編輯 JSON 設定,新增
registry-mirrors欄位 - 點選 『Apply & Restart』
測試加速效果
# 從加速器拉取映象(速度應該明顯提升)
docker pull nginx:latest
time docker pull alpine:latest
阿里雲容器映象服務:ACR
阿里雲容器映象服務 (ACR, Container Registry) 是企業級的容器映象儲存和分發平台:
- 私有映象倉庫:支援多個命名空間,細粒度許可權控制
- 映象建立:雲端編譯和建立,支援自動化 CI/CD
- 映象掃描:自動檢測映象中的漏洞和惡意程式碼
- 跨地域複製:支援映象在多個地域的同步和加速
- 整合 ACK:與 ACK 無縫整合,自動身份認證
- 映象版本管理:標籤管理、映象過期清理、保留策略
完整推送/拉取範例
# 登入阿里雲映象倉庫(使用 Docker 登入)
# 使用阿里雲賬戶 ID 和 RAM 訪問金鑰或密碼
docker login registry.cn-hangzhou.aliyuncs.com \
--username=<阿里雲賬戶ID>
# 拉取阿里雲公開映象
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest
# 建立本地映象
docker build -t my-app:v1.0 .
# 標記映象為阿里雲倉庫地址
docker tag my-app:v1.0 \
registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0
# 推送映象到阿里雲 ACR
docker push registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0
# 在 Dockerfile 中使用 ACR 映象
FROM registry.cn-hangzhou.aliyuncs.com/myapp/my-app:v1.0
COPY . /app
RUN echo "已成功使用阿里雲映象"
ACK 叢集中使用 ACR 映象
在 ACK 叢集中,需要先設定映象拉取憑證(Secret),然後在 Deployment 中引用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
# 如果是私有映象,需設定映象拉取憑證
imagePullSecrets:
- name: acr-secret
containers:
- name: web
image: registry.cn-hangzhou.aliyuncs.com/myapp/web:v2.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
affinity:
# 設定 Pod 反親和性,分散到不同節點
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web
topologyKey: kubernetes.io/hostname
建立映象拉取憑證
在 ACK 叢集中建立 Secret,用於拉取私有映象:
# 避免把真實口令寫入指令歷史。使用臨時 Docker config 並透過標準輸入登入。
export DOCKER_CONFIG="$(mktemp -d)"
read -rsp "ACR token: " ACR_TOKEN; echo
printf "%s" "$ACR_TOKEN" | docker login registry.cn-hangzhou.aliyuncs.com \
--username "<阿里雲賬戶ID>" \
--password-stdin
kubectl create secret generic acr-secret \
--from-file=.dockerconfigjson="$DOCKER_CONFIG/config.json" \
--type=kubernetes.io/dockerconfigjson
rm -rf "$DOCKER_CONFIG"
unset ACR_TOKEN DOCKER_CONFIG
# 檢視建立的 Secret
kubectl get secret acr-secret
kubectl describe secret acr-secret
ACR 優勢
- 在 ACK 叢集中與映象倉庫無縫整合,簡化身份認證
- 支援 Helm Chart 儲存和版本管理,方便應用交付
- 提供完整的圖形化映象倉庫管理介面
- 完整的審計日誌和操作追蹤功能
- 支援映象自動掃描和漏洞報告