在K8s的Docker容器中运行需gcloud认证的Python应用:安装CLI后如何操作?
后续操作步骤
1. 安装Python依赖包
你的应用依赖Vertex AI服务,需在Dockerfile中添加对应Python SDK安装命令,google-cloud-aiplatform包已包含Gemini模型的调用支持:
# 安装Python依赖 RUN pip install --no-cache-dir google-cloud-aiplatform
2. 配置容器身份认证(核心步骤)
在K8s环境中,容器访问Google Cloud服务不建议用本地gcloud登录,推荐两种认证方式:
- Workload Identity(推荐,安全无密钥)
- 在Google Cloud创建服务账号,分配
Vertex AI User等必要权限 - 启用GKE集群的Workload Identity功能,将K8s服务账号与Google Cloud服务账号绑定
- 部署应用时指定绑定后的K8s服务账号,容器会自动获取认证凭据
- 在Google Cloud创建服务账号,分配
- 服务账号密钥文件(仅测试用,安全性低)
- 下载Google Cloud服务账号密钥文件
- 将密钥文件挂载到容器内,通过环境变量
GOOGLE_APPLICATION_CREDENTIALS指定文件路径
3. 传递必要环境变量
代码中依赖的GOOGLE_CLOUD_PROJECT和GOOGLE_CLOUD_LOCATION,需在K8s部署YAML中配置:
env: - name: GOOGLE_CLOUD_PROJECT value: "你的GCP项目ID" - name: GOOGLE_CLOUD_LOCATION value: "us-central1" # 替换为实际使用的区域
4. 完善Dockerfile示例
结合已安装的gcloud CLI,整理完整Dockerfile:
# 基础镜像选择Python官方镜像 FROM python:3.11-slim # 安装gcloud CLI(你已完成此步骤,此处为示例参考) RUN apt-get update && apt-get install -y curl && \ curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz && \ mkdir -p /usr/local/gcloud && \ tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz && \ /usr/local/gcloud/google-cloud-sdk/install.sh --quiet && \ rm /tmp/google-cloud-sdk.tar.gz && \ apt-get remove -y curl && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* # 将gcloud加入环境变量 ENV PATH="/usr/local/gcloud/google-cloud-sdk/bin:${PATH}" # 安装Python依赖 RUN pip install --no-cache-dir google-cloud-aiplatform # 设置工作目录并复制应用代码 WORKDIR /app COPY . /app # 启动应用命令 CMD ["python", "你的应用入口文件.py"]
5. 构建并部署到K8s
- 构建Docker镜像:
docker build -t gcr.io/[你的GCP项目ID]/vertexai-app:v1 . - 推送镜像到GCR/Artifact Registry:
docker push gcr.io/[你的GCP项目ID]/vertexai-app:v1 - 编写K8s部署YAML(示例
deployment.yaml):
apiVersion: apps/v1 kind: Deployment metadata: name: vertexai-app spec: replicas: 1 selector: matchLabels: app: vertexai-app template: metadata: labels: app: vertexai-app spec: serviceAccountName: [绑定后的K8s服务账号名] # 使用Workload Identity时需配置 containers: - name: vertexai-app image: gcr.io/[你的GCP项目ID]/vertexai-app:v1 env: - name: GOOGLE_CLOUD_PROJECT value: "[你的GCP项目ID]" - name: GOOGLE_CLOUD_LOCATION value: "us-central1"
- 部署到K8s集群:
kubectl apply -f deployment.yaml
关键参考要点
- 优先使用Workload Identity,避免密钥泄露风险
- 确保服务账号拥有足够的Vertex AI权限,比如
aiplatform.models.generateContent(调用Gemini模型所需) - 本地测试可通过挂载密钥文件、设置环境变量的方式,验证容器内应用是否能正常调用服务
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

