AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 770003
Accepted
aknuds1
aknuds1
Asked: 2016-04-14 03:21:02 +0800 CST2016-04-14 03:21:02 +0800 CST 2016-04-14 03:21:02 +0800 CST

如何确保 CoreOS 云配置服务能够下载文件?

  • 772

我在我的 CoreOS 云配置中定义了一次性服务,但由于无法从谷歌云存储(通过 wget)下载文件而失败:

4 月 13 日 11:09:56 staging-node-ys9y.c.experimentalberlin.internal sh[1132]:连接到 storage.googleapis.com|74.125.133.128|:443... 失败:连接超时。

我应该如何确保该服务能够从 Internet 下载文件?

我的云配置

#cloud-config
coreos:
  units:
    - name: bootstrap.service
      command: start
      content: |
        [Unit]
        Description=Bootstrap instance
        After=network-online.target
        Requires=network-online.target

        [Service]
        Type=oneshot
        RemainAfterExit=true
        ExecStart=/usr/bin/mkdir -p /tmp/kubernetes-staging
        ExecStart=cd /tmp/kubernetes-staging
        ExecStart=/bin/sh -c "cd /tmp/kubernetes-staging && wget https://storage.googleapis.com/experimentalberlin/staging.tar.gz && tar xf staging.tar.gz"
        ExecStart=/tmp/kubernetes-staging/worker/bootstrap.sh

        [Install]
        WantedBy=local.target
systemd wget cloud-config coreos
  • 1 1 个回答
  • 783 Views

1 个回答

  • Voted
  1. Best Answer
    Brian Redbeard
    2016-04-14T09:39:53+08:002016-04-14T09:39:53+08:00

    我会采取多步骤的策略来解决这个问题。请原谅额外的信息和过度解释,CoreOS 的每个人都必须从我这里处理这个问题。;)

    首先,您要确保可以从集群内部检索您尝试下载的 URL。目前,我看不出有什么理由不应该是这种情况,因为我能够得到它(顺便说一句,通常最好不要将私钥材料放在可公开访问的 tarball 中。在这种情况下,虽然仍然不是最佳user-data的将这些资产包含在或至少使用对称加密保护 tarball可能会更好。)

    由于 cloud-init 在网络上线后运行,这应该足够了(元数据服务驻留在网络上http://169.254.169.254,因此在网络上线之前无法检索 cloud-config。)这意味着可能的罪魁祸首是暂时的网络问题或其他详细信息。

    当我尝试通过此运行时,我收到以下错误:

    core@rbtest ~ $ journalctl -u bootstrap.service
    -- Logs begin at Wed 2016-04-13 17:31:35 UTC, end at Wed 2016-04-13 17:33:09 UTC. --
    Apr 13 17:31:47 rbtest.c.coreos-support.internal systemd[1]: [/etc/systemd/system/bootstrap.service:10] Executable path is not absolute, ignoring: cd /tmp/kubernetes-staging
    Apr 13 17:31:47 rbtest.c.coreos-support.internal systemd[1]: Starting Bootstrap instance...
    Apr 13 17:31:47 rbtest.c.coreos-support.internal sh[1074]: --2016-04-13 17:31:47--  https://storage.googleapis.com/experimentalberlin/staging.tar.gz
    Apr 13 17:31:47 rbtest.c.coreos-support.internal sh[1074]: Resolving storage.googleapis.com... 209.85.200.128, 2607:f8b0:4001:c08::80
    Apr 13 17:31:47 rbtest.c.coreos-support.internal sh[1074]: Connecting to storage.googleapis.com|209.85.200.128|:443... connected.
    Apr 13 17:31:48 rbtest.c.coreos-support.internal sh[1074]: HTTP request sent, awaiting response... 200 OK
    Apr 13 17:31:48 rbtest.c.coreos-support.internal sh[1074]: Length: 4722 (4.6K) [application/x-tar]
    Apr 13 17:31:48 rbtest.c.coreos-support.internal sh[1074]: Saving to: 'staging.tar.gz'
    Apr 13 17:31:48 rbtest.c.coreos-support.internal sh[1074]: 0K ....                                                  100% 47.4M=0s
    Apr 13 17:31:48 rbtest.c.coreos-support.internal sh[1074]: 2016-04-13 17:31:48 (47.4 MB/s) - 'staging.tar.gz' saved [4722/4722]
    Apr 13 17:31:48 rbtest.c.coreos-support.internal systemd[1]: bootstrap.service: Main process exited, code=exited, status=203/EXEC
    Apr 13 17:31:48 rbtest.c.coreos-support.internal systemd[1]: Failed to start Bootstrap instance.
    Apr 13 17:31:48 rbtest.c.coreos-support.internal systemd[1]: bootstrap.service: Unit entered failed state.
    Apr 13 17:31:48 rbtest.c.coreos-support.internal systemd[1]: bootstrap.service: Failed with result 'exit-code'.
    

    这里的线索是这一行:

        bootstrap.service: Main process exited, code=exited, status=203/EXEC
    

    此消息告诉您运行脚本本身存在问题。挖掘这个是完全有意义的,因为当我查看那个 shell 脚本的顶部时,没有shebang告诉 systemd如何运行可执行文件(在这种情况下,它都是与Bourne Shell / Bourne-Again Shell兼容的命令,所以 shebang 应该可能是要么#!/bin/sh或#!/bin/bash。)添加一个shebang应该可以解决这个问题。

    其他一些小细节:

    • 使用时wget指定下载位置:

      wget -O /tmp/kubernetes-staging/staging.tar.gz https://storage.googleapis.com/experimentalberlin/staging.tar.gz
      
    • 扩展 tarball 时,您可以使用以下命令将其输出到特定位置-C:

      tar  xf /tmp/kubernetes-staging/staging.tar.gz  -C /tmp/kubernetes-staging/
      

    这允许您将它们分离到它们的相关ExecStart=选项中,从而提供额外的日志记录。

    • 由于这些命令中的大多数都是实际脚本执行的前导bootstrap.sh,我会将所有ExecStart=选项(最后一个除外)更改为ExecStartPre=.
    • 2

相关问题

  • SSH 会话在关机/重启时挂起

  • 我可以使用 systemd 重新启动依赖服务吗?

  • 让我的旧初始化脚本在 systemd 中工作的最简单方法是什么?

  • 在 CentOS 7 上为 systemd 启动的进程增加 nproc

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve