问题标签 [google-container-os]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Google 的 Container OS 可以与 Compute Engine 上的 gRPC 一起使用吗?
Cloud Endpoints for gRPC中描述了我的高级架构。
下面的服务器是一个安装了 Docker 的 Compute Engine 实例,运行两个容器(ESP 和我的服务器):
根据Getting started with gRPC on Compute Engine,我通过 SSH 连接到 VM 并在实例上安装 Docker(请参阅在 VM 实例上安装 Docker)。最后我拉下两个 Docker 容器(ESP 和我的服务器)和run
它们。
我一直在阅读Google 的 Container-Optimized OS。
我可以使用Container-Optimized OS来配置操作系统,然后拉下我的容器并运行它们,而不是使用操作系统配置实例然后安装 Docker 。
但是,唯一的gRPC 教程适用于 Kubernetes Engine上的 gRPC 、Kubernetes 上的 gRPC和Compute Engine上的 gRPC 。没有提到容器操作系统。
有没有人将容器操作系统与 gRPC 一起使用,或者任何人都知道为什么这不起作用?
为高级场景创建一个实例看起来很相关,因为它指出:
使用此方法 [...] 部署多个容器,并使用 cloud-init 进行高级配置。
就上下文而言,我正在尝试迁移到 Google Cloud 中的 CI/CD,而无需安装 Docker 将是朝着这个方向迈出的一步。
kubernetes - 在 GKE 容器中存储文件的位置?
我无法理解在 GKE 容器中存储文件的位置?我看过以下文件系统布局的文档:
https://cloud.google.com/kubernetes-engine/docs/concepts/node-images#file_system_layout
但是网络上也有 Dockerfile 示例将可执行文件复制到布局中未列出的其他路径,例如/usr
或/go
. 这些示例之一在这里:
https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/hello-app/Dockerfile
另一个问题是:如果我有运行时代码需要在容器启动后下载某些配置信息,我可以将配置文件写入与我的可执行文件相同的目录吗?还是我必须选择/etc
或 /tmp
。
最后,布局文档说明/home
并/var
在引导磁盘的整个生命周期内存储数据?这意味着什么?这与 pod 或节点的生命周期相比如何?
google-compute-engine - 当我的虚拟机在 GCE 上被抢占时,Docker 似乎在我的关机脚本执行之前被杀死
我想实现一个shutdown-script
在我的 VM 将在 Google Compute Engine 上被抢占时调用的方法。该 VM 用于运行执行长时间运行的批处理的 dockers 容器,因此我向它们发送一个信号以使它们正常退出。
当我手动执行它时,该关闭脚本运行良好,但在真正的抢占用例或我自己杀死 VM 时它会中断。
我收到了这个错误:
我使用来自 GCE 的抢占式 VM,带有 image Container-Optimized OS 73-11647.267.0 stable
。我将我的码头工人作为服务运行systemctl
,但我不认为这是相关的 - [编辑]实际上我可以通过这个解决我的问题。
现在,我很确定当 Google 向我的 VM 发送 ACPI 信号时会发生很多事情,甚至在从 VM 元数据中获取并调用关闭脚本之前。
我的猜测是所有服务都同时停止,最终停止docker.service
。
当我的容器运行时,我可以level=error msg="error waiting for container: unexpected EOF"
通过一个简单的sudo systemctl stop docker.service
这是我的shuting-down
脚本的一部分:
如果我只是systemctl stop taskexecutor.service
手动调用(而不是通过真正关闭服务器),SIGTERM 信号将发送到我的 docker 并且我的应用程序会正确处理它并存在。
任何想法?
-- 我是如何解决我的问题的 --
我可以通过在我的服务配置中添加对 docker 的依赖来解决它:
我不知道除了shutdown-script
Google 执行存储在元数据中之外的魔法是如何工作的。但我认为他们应该修复一些问题,Container-Optimized OS
以便在 docker 停止之前发生魔法。否则,我们不能依靠它来优雅地关闭一个基本脚本(希望我在这里使用的是 systemd)......
docker - 如何为 Google Cloud 中的虚拟机分配“容器注册表”权限
我正在Google Cloud中创建具有完全访问权限 的虚拟机
当我通过 SSH 连接到虚拟机并尝试从Container registry拉取 docker 映像时,它会引发权限错误:
所以我想知道如何为我的容器注册表授予权限
我认为完全访问 API 可以解决这个问题,但它并没有
顺便说一句,我知道我可以直接将容器注册表中的图像放入计算引擎,但这不是我想要的,它不会是我要运行的唯一一个图像,它会是其中的一些
google-container-os - 有没有办法在 Google Container Optimized OS 上为 docker 日志指定文件大小限制?
我在 Google 的 Container-Optimized OS (COS) 上有一个运行时间很长(而且很冗长)的容器作业,最终生成了足够的日志来填满磁盘。
据我所知,在使用 COS 时没有办法轮换/限制日志文件的大小。
检查正在运行的容器,它似乎将一个不断增长的文件写入/var/lib/docker/containers/
(安装在有状态分区上)并且HostConfig.LogConfig.Config
是空的。
我最终不得不通过 SSH 登录并手动删除数 GB 的日志文件,以使 VM 再次运行。
我通读了https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers并且据我所知,没有办法(比如说)--log-opt max-size=XX
按照 Docker文档:
https ://docs.docker.com/config/containers/logging/json-file/
有什么办法可以通过那个标志吗?如果做不到这一点,是否有关于如何轮换日志/限制日志大小/避免遇到此问题的建议?
google-compute-engine - 如何在 Google Cloud 中使用 ContainerOs 增加根磁盘分区?
调整磁盘大小后,根分区没有占用更多可用空间。
跑步时
fdisk -l
在远程 VM 上的结果是:
我看到很多答案说我应该使用growpart命令,但是这个命令不可用,而且似乎在containerOS 中你不能安装任何东西。反正我试过yum,apt,apt-get,rpm都没有成功。
我在Google 文档中进行了挖掘,但没有找到与 ContainerOS 相关的任何内容
我发现的唯一解决方法是重新启动 VM,但有没有不涉及重新启动的替代方法?
swapfile - 如何在 GCE 上的 Google 容器优化操作系统上启用交换/交换文件?
cos-stable
在 GCE 上使用容器优化的操作系统。微型实例,因此 ram 非常稀疏。尝试启用交换以防止在 docker pull 期间由于 OOM 锁定,但无法使其正常工作。
我意识到大多数文件夹都是无状态的,所以我把交换文件放在 home 下:
结果是:
但sudo swapon /home/user/swapfile
给出了错误:
任何想法如何在 COS 上启用交换?
google-cloud-platform - 在删除之前检查计算引擎实例是否存在
我使用.gitlab-ci.yml
文件将我的宠物项目自动部署到GCP
,并且我希望每次合并一些新代码时,将当前代码更新为google cloud container registry
. 我现在看到的唯一方法是删除旧实例并创建新实例,你可以在我的列表中看到它gitlab-ci
文件,但是当我尝试删除例如不存在的实例时,它向我发送错误,该实例不存在(并且它是正确的),但是我该如何检查它?例如,我检查是否创建了某个实例,获取响应,如果已创建-则删除它,如果不存在,则跳过删除步骤并创建新实例!?或者,如果您有更好的方法在计算引擎实例上更新我的代码,请告诉我。我只想了解如何使用它。只研究这个过程。如果您需要更多信息,请告诉我!
google-cloud-platform - `gcloud compute instances create-with-container --public-dns` - 这是做什么的?
我正在为我的计算实例获取公共 DNS 名称,我注意到在create-with-container 的 beta 版中有 --public-dns 标志。我用这个标志创建了一个容器,但是当我进行检查时我看不到任何类型的公共 DNS 名称。
有什么方法可以在不启动负载均衡器等的情况下为我的容器获取公共 DNS 名称?
docker - 你可以通过 Terraform 在 GCP 中运行 Docker 容器吗?
我创建了一个 Docker 映像,我想使用 Terraform 在 GCP 中运行。我已将图像标记并推送到 GCR,如下所示:
我有以下代码:
做完之后:
我得到:
我在网上看到的示例要么使用 K8s,要么启动运行 Linux 的 VM 映像,其中安装了 Docker 并且正在启动映像。我不能简单地使用我自己的容器来启动实例吗?