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 中:

  1. 進入 『Docker Engine』 標籤
  2. 編輯 JSON 設定,新增 registry-mirrors 欄位
  3. 點選 『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 儲存和版本管理,方便應用交付
  • 提供完整的圖形化映象倉庫管理介面
  • 完整的審計日誌和操作追蹤功能
  • 支援映象自動掃描和漏洞報告
第 133 页,共 196 页
使用 mdPress 构建