我有一个在 GCE 上运行的 CoreOS 集群,我注意到所有 GCE 实例的一个问题是,只要您通过 Google Cloud 平台上的项目进行身份验证,您就可以登录服务器。这对我来说是一个问题,因为团队中的任何人,或进入项目的任何人,都可以像任何人一样直接进入服务器。我想禁用它,只使用我在云配置文件中创建的用户,这些用户指定了过期的 ssh 密钥和密码。在这样做时,我很好奇谷歌如何在 GCE 上创建用户?有没有人找到禁用它的方法?
user-management ssh-keys google-compute-engine coreos google-cloud-platform
我看到tail -f在 CoreOS 的 Docker 容器内运行命令时出现了一些奇怪的行为。
我能想到的许多变量可能会导致问题,但我不确定首先需要做什么来排除故障。在 CoreOS 上,我正在运行支持 overlayfs 的最新版本,以及较新版本的 Docker (1.4.1)。
有趣的是,我能够在运行不同版本 Docker (1.3) 的不同主机操作系统 (Ubuntu 14.04) 上成功跟踪日志。
如果这有助于排除故障,我可以生成 strace 日志,它们似乎在主机之间存在显着差异。例如,在不工作的主机上,在 strace 输出中读入以下内容后,strace 停止:
04:03:03 inotify_add_watch(4, "f017f0a1-a1e9-11e4-90bc-027e0f87cac6-paster.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000028>
04:03:03 fstat(3, {st_mode=S_IFREG|0644, st_size=12229, ...}) = 0 <0.000022>
04:03:03 read(4, 0x7711f0, 64) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <3.101545>
Run Code Online (Sandbox Code Playgroud)
我只是对 strace 不够熟悉,无法很好地解释结果。
我一直在检查 CoreOS,我印象深刻。在我发现 CoreOS 之前,我将Mesos/Marathon/Chronos堆栈视为“集群内核”。
鉴于以下比较:
init.d == Mesos+Marathon == CoreOS+Fleet
cron == Mesos+Chronos == CoreOS+?????
Run Code Online (Sandbox Code Playgroud)
我很好奇 CoreOS 是否有分布式作业调度程序?还是大多数人只是使用 Fleet 来运行其他东西?
我无法启动docker daemon。当我尝试时,我收到一堆错误说
invalid image sha256:{some sha here}, failed to verify image: sha256{some sha here}
Run Code Online (Sandbox Code Playgroud)
然后一行说
Error starting daemon: layer does not exist
Run Code Online (Sandbox Code Playgroud)
我怀疑图像已损坏或其他原因 - 上次关闭此服务器时出现问题。我不介意删除图像,但如果不启动 docker,我找不到任何方法来做到这一点。我希望有某种--skip verify争论,但我找不到类似的东西。
我怎样才能启动 docker?
操作系统是 CoreOS 1010.5.0。
CoreOS似乎是托管 Web 服务的好发行版:自动更新、低内存使用、内置 Docker 支持。但是,所有安装说明似乎都假设我要配置一整套服务器。— 没有简单的方法可以跳过所有复杂的设置,让 CoreOS 在单个服务器上的某个托管服务提供商处运行,就像 Ubuntu 这样的“普通”发行版一样?
例如,etcd当我在单个服务器上运行我的应用程序服务器和 PostgreSQL 时,我真的必须配置服务发现吗?
如果今天没有简单的方法,你认为在更远的将来会有吗?还是 CoreOS 总是只用于大规模多服务器部署?
(背景:我希望有一天我会为其他人编写有关如何安装我正在开发的某个 Web 应用程序的说明,如果我能指导他们使用 CoreOS 就好了,因为他们知道他们会起床并快速轻松地运行。)
我有一个用于辅助单位的服务,并不断收到错误消息:[/run/fleet/units/tomcat-discovery@1.service:11] 尾随垃圾,忽略。tomcat-discovery@1.service 没有 ExecStart= 设置,只允许 RemainAfterExit=yes 服务。拒绝。
我似乎已经尝试了我能想到的所有不同组合,并且已经成功地测试了来自终端的命令,没有问题。如果我删除对 etcdctl 的第一次调用,则第二个 set 命令也可以在服务文件中正常工作。关于我在这里哪里出错的任何想法?
[Unit]
Description=Tomcat web server etcd registration
# Requirements
Requires=etcd.service
Requires=tomcat@%i.service
# Dependency ordering and binding
After=etcd.service
After=tomcat@%i.service
BindsTo=tomcat@%i.service
[Service]
# Get CoreOS environmental variables
EnvironmentFile=/etc/environment
# Start
ExecStart=/bin/bash -c "\
while true; do \
etcdctl set /services/tomcat/tomcat-%i/ip ${COREOS_PRIVATE_IPV4}:$(docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' tomcat.%i) --ttl 180; \
etcdctl set /services/bind/tomcat-%i ${COREOS_PRIVATE_IPV4} --ttl 180; \
sleep 60; \
done"
# Stop
ExecStop=/usr/bin/etcdctl rm --recursive /services/tomcat/tomcat-%i
[X-Fleet]
# Schedule …Run Code Online (Sandbox Code Playgroud) CoreOS 集群是否可以共享磁盘空间,例如使用 NFS?如果是这样,人们会怎么做呢?(例如,在一个节点有大量磁盘空间的情况下)。例如,这对于避免让每个节点必须下载和存储它自己的 docker 图像库或跨节点共享主目录空间非常有用。
因为我们不能直接在 CoreOS 中安装额外的软件,我想人们必须编写一个容器来安装 NFS(例如nfs-kernel-server在基于 Ubuntu 的容器上)。
我不知道这是否可行,但我希望有一些既定的方法来跨 CoreOS 集群共享磁盘空间(毕竟,这似乎是对集群的普遍期望,也许我下面的建议比必要的更复杂) . 只是为了提供一些反馈的素材,这是我目前的想法:
提供 NFS 的主机端似乎是一个合理的 docker 任务,例如我想象一个 Dockerfile 像:
FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start
Run Code Online (Sandbox Code Playgroud)
WhereCLIENT_IP已正确填写(也许我们需要用调用supervisord或类似方法替换 CMD以使其持久化,但您明白了)
那么,在运行这个容器时,我们如何适当地链接卷呢?我们将从 CoreOS 主机链接哪个卷?或者我是否需要添加一些东西--net="host"来使客户端可用?
docker run -v /home:/home …Run Code Online (Sandbox Code Playgroud) 为 CoreOS 运行更新命令时,出现更新失败错误。根据文档,这意味着没有找到更新。这不应该是这种情况,因为我正在运行的版本是CoreOS stable (647.2.0).
update_engine_client -update
$> cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=647.2.0
VERSION_ID=647.2.0
BUILD_ID=
PRETTY_NAME="CoreOS 647.2.0"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"
$> cat /etc/coreos/update.conf
GROUP=stable
SERVER=https://customer.update.core-os.net/v1/update/
Run Code Online (Sandbox Code Playgroud)
如何触发更新过程?
我已经安装了 CoreOS,它默认使用大小为 100GB 的环回设备,我很容易达到了这个限制。
我的第一个想法是使用 NFS 将所有图像放在我的 NAS 上,只需将其安装在/var/lib/docker目录顶部,但没有任何成功。
现在我找到了这篇文章,它看起来像 docker 以任何方式在任何类型的存储之上创建块设备,以便使用它的 CoW 快照,这可能就是为什么我在第一次拍摄时没有成功的原因只是安装 NFS 共享在图像目录的顶部。有点吓到我了 为什么不将纯 NFS 与存储的本机快照一起使用?我希望对这样做有很好的解释。无论如何,我需要做这件怪事。我是 docker 和 CoreOS 的新手,不知道如何正确执行此操作。所以问题是:如何挂载 NFS 共享并将其用于 CoreOS 上的所有映像?
我需要设置 CoreOS 机器的每日重启。所以我有/etc/systemd/system/reboot.service:
[Unit]
Description=Daily reboot
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c 'reboot'
Run Code Online (Sandbox Code Playgroud)
...和/etc/systemd/system/reboot.timer:
[Unit]
Description=Daily reboot
[Timer]
OnCalendar=*-*-* 21:20:00
Run Code Online (Sandbox Code Playgroud)
如果我通过 激活计时器sudo systemctl start reboot.timer,我会在列表中看到它:
core@node-011 ~ $ sudo systemctl list-timers --all | grep reboot
Fri 2019-03-22 21:20:00 UTC 12h left n/a n/a reboot.timer reboot.service
core@node-011 ~ $
Run Code Online (Sandbox Code Playgroud)
但重新启动后,该计时器被关闭(不在列表中)。
如何配置持久化?