借助 Cloud Workstations,您可以在工作站容器启动之前,在宿主工作站虚拟机上运行自定义启动脚本。这对于执行虚拟机级配置或安装需要在主工作站容器外部运行的其他软件非常有用。
准备工作
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
如果您使用的是外部身份提供方 (IdP),则必须先
使用联合身份登录 gcloud CLI。
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
如果您使用的是外部身份提供方 (IdP),则必须先
使用联合身份登录 gcloud CLI。
准备启动脚本
创建要在主机工作站虚拟机上运行的启动脚本。编写脚本时,请遵循以下准则:
- Cloud Workstations 会在宿主机工作站虚拟机上运行您指定的工作站容器以及多个系统容器,以确保工作站正常运行。所有容器均使用
containerd运行时和crictl客户端运行。 - 使用
containerd运行由启动脚本启动的任何其他容器。主机虚拟机上的 Docker 已停用,以防止干扰工作站容器内运行的 Docker 守护程序。 - 由启动脚本启动的宿主机级容器无法与主工作站容器互动。由于这些直接互动会绕过 Identity and Access Management (IAM) 检查,因此不受支持。
将启动脚本存储在 Cloud Storage 中
将脚本上传到 Cloud Storage 存储桶,并确保与工作站关联的服务账号可以访问该脚本。
将脚本上传到存储桶:
gcloud storage cp LOCAL_SCRIPT_PATH gs://BUCKET_NAME/SCRIPT_NAME替换以下内容:
LOCAL_SCRIPT_PATH:启动脚本文件的本地路径。BUCKET_NAME:Cloud Storage 存储桶的名称。SCRIPT_NAME:您要为存储桶中的脚本文件指定的名称。
确保工作站配置所用的服务账号具有访问存储桶和脚本文件的权限。或者,脚本可以公开访问。
创建工作站配置
如需使用自定义启动脚本,请创建工作站配置,并将 host.gceInstance 消息中的 startupScriptUri 字段设置为脚本的 Cloud Storage URI。
使用 REST API 创建工作站配置:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"host": {
"gceInstance": {
"poolSize": 1,
"startupScriptUri": "gs://BUCKET_NAME/SCRIPT_NAME",
"serviceAccount": "SERVICE_ACCOUNT"
}
}
}' \
https://workstations.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/workstationClusters/CLUSTER_ID/workstationConfigs?workstation_config_id=CONFIG_ID
替换以下内容:
SERVICE_ACCOUNT:与工作站配置关联的服务账号的电子邮件地址。PROJECT_ID:您的 Google Cloud 项目 ID。LOCATION:工作站集群所在的区域。CLUSTER_ID:工作站集群的 ID。CONFIG_ID:您要分配给新工作站配置的 ID。
验证脚本执行
如需验证脚本是否已正确运行,请使用以下方法之一:
- 串行端口 3 输出日志:脚本生成的输出日志会自动发送到串行端口 3 输出。 如需查找分配给工作站的虚拟机的名称,请参阅平台日志。
- 通过 SSH 连接到虚拟机:您可以通过 SSH 连接到工作站虚拟机,以便在需要时进一步调试脚本。
- 准备情况检查:启动脚本只能尽力而为,不会阻止工作站启动。如果脚本运行时间过长或失败,工作站可能仍会被标记为就绪。为确保工作站在脚本完成之前不会被标记为就绪,请考虑实现就绪状态检查。