#container #docker #kubernetes #sockets #cli #rancher

app bovine

单个节点Rancher集群的管理器

17个版本 (4个稳定版)

1.0.3 2021年12月2日
1.0.2 2021年10月30日
0.3.0 2021年9月10日
0.2.0 2021年9月4日
0.1.2 2021年8月31日

#2221 in 开发工具

每月下载量 43次

Apache-2.0

57KB
1K SLoC

Bovine

release crates.io build license

使用单个二进制文件 bovine 管理单个节点 Rancher 集群。

% bovine run
Pulling [rancher/rancher:latest], this may take awhile...
Rancher container is running: ead7ff0c711a

% bovine list
ead7ff0c711a [rancher/rancher:latest] (running) > Up 5 seconds

% bovine stop --all
Stopped Rancher container: ead7ff0c711a

描述

bovine 同时设计为Rancher(和Kubernetes)的易于使用的入门级工具,以及为熟悉单个节点Rancher集群的资深用户提供的有效管理器。它通过直接与Docker守护进程通信来创建、升级、停止、删除和管理单个节点Rancher集群。

  • 新用户Rancher或Kubernetes?
    • bovine 旨在成为尝试这两种技术(Rancher和Kubernetes)的第一步。
    • 熟悉Docker但不太熟悉Kubernetes或Rancher的用户会感到非常亲切。
    • 创建您的第一个集群需要一些工作。只需确保Docker正在运行,然后执行 bovine run,导航到您喜欢的浏览器,并访问 127.0.01
  • 高级用户?
    • 单个节点Rancher安装对于尝试新的Rancher版本、为开发提供下游集群和一般实验室用途非常有用。
    • bovine 是为多平台使用设计的(无需维护Bash和PowerShell脚本)。
    • 自带Docker镜像,指定自己的Docker套接字位置,选择一些标志,测试和升级场景,无需查阅文档。

先决条件

bovine 的唯一先决条件是 Docker守护进程。根据您的喜好自定义Docker安装,因为 bovine 不需要Docker CLI,并且可以使用自定义套接字路径。

安装

安装 bovine 有三种主要方法。

bovine 设计用于在任何一级Rust平台上工作,并具有对Docker守护进程的访问权限。您可以使用 cargo 安装和升级应用程序。

cargo install bovine

使用 cargo-update 可以轻松保持软件包的更新。

cargo install cargo-update
cargo install-update -a

cargo 可以通过 rustup(推荐)或您首选的包管理器安装。

Homebrew安装(仅限macOS)

您可以使用Homebrew安装tap

brew install nickgerace/nickgerace/bovine

注意:此tap可能不与Linuxbrew兼容。

发布版本的二进制文件

如果您不想安装cargo,您可以从发布页面下载二进制文件。以下便利脚本可以在macOS和Linux amd64系统上使用(需要已安装wgetjqcurl

(
    OS=$(uname -s | tr '[:upper:]' '[:lower:]')
    if [ "$OS" = "linux" ]; then OS=linux-gnu; fi
    LATEST=$(curl -s https://api.github.com/repos/nickgerace/bovine/releases/latest | jq -r ".tag_name")
    wget -O bovine https://github.com/nickgerace/bovine/releases/download/$LATEST/bovine-$OS-amd64
    chmod +x bovine
    sudo mv bovine /usr/local/bin/bovine
)

用法

默认情况下,bovine run将创建并运行一个具有常用设置的Rancher容器。使用以下命令查看所有选项

% bovine run --help

有关更多信息,请参阅官方Rancher单节点文档

关于保存设置以供将来使用怎么办?您可以使用有效的JSON来实现。让我们将其保存到文件中。

% bovine run --dry-run > dry.json

您还可以获取容器(无论其是否正在运行)的配置和状态。由于此信息已打包成JSON,让我们将其保存到另一个文件中。

% bovine get ead7ff0c711a > get.json

在测试这些命令时,我们可能已经构建了许多Rancher容器。让我们从头开始。

% bovine stop --all --delete
Stopped Rancher container: ead7ff0c711a
Deleted Rancher container: ead7ff0c711a
Deleted volumes for container: ead7ff0c711a
Container not modified (may have already been stopped): d39cca6514d8
Deleting Rancher container: d39cca6514d8
Deleted volumes for container: d39cca6514d8

现在有新的Rancher版本发布了!让我们将我们的stable Rancher实例升级到latest

% bovine upgrade bc3ad1bf4fd7 latest
Stopped Rancher container: bc3ad1bf4fd7
Created temporary container for volume backup: b6f3adef1c23
Image found locally: [rancher/rancher:latest]
Rancher container is running: 9cf5f2ead13d
Upgrade from [rancher/rancher:stable] to [rancher/rancher:latest] complete

忘了您唯一的bovine容器的名字?没问题。

% bovine upgrade $(bovine list --short) latest

当使用latest 标签bovine run的默认值)发布新的Rancher版本时,您可能需要强制拉取镜像。

% bovine run --force-pull

当使用本地主机隧道(例如ngrok)时,您可能需要设置--no-cacerts以使供应正常工作。

% bovine run -n

如果您正在使用Rancher >=v2.6,您可能需要找到引导密码才能访问仪表板。

% bovine bootstrap-password --wait

您还可以在启动时设置引导密码。

% bovine run -b <password>

故障排除

如果我们需要检查一个活动集群,我们可以查看其容器日志。

% bovine logs 8fccc0c04184 --follow

我们还可以将日志导出到文件。

% bovine logs 8fccc0c04184 > bovine.log

如果您发现了一个可能与Rancher无关的bug,您可以将版本信息锁定以深入了解。让我们打印出这些信息,只是为了熟悉一下。

% bovine version
{
  "bovine": {
    "version": "1.0.0",
    "os/arch": "linux/x86_64"
  },
  "docker": {
    "version": "20.10.9",
    "os/arch": "linux/amd64",
    "api-version": "1.41",
    "linux-kernel-version": "5.10.0-1049-oem",
    "git-commit": "79ea9d3"
  }
}

如果您正在使用自定义套接字路径,bovine将确认信息是从那里收集的。让我们在Linux主机上尝试一下。

% bovine --docker-socket-path /foo/bar/docker.sock version
{
  "bovine": {
    "version": "1.0.0",
    "os/arch": "linux/x86_64"
  },
  "docker": {
    "version": "20.10.9",
    "os/arch": "linux/amd64",
    "api-version": "1.41",
    "linux-kernel-version": "5.10.0-1049-oem",
    "git-commit": "79ea9d3",
    "docker-socket-path": "/foo/bar/docker.sock"
  }
}

也许Docker是您故障排除会话中的问题?bovine无论如何都会打印一些版本信息。

% bovine version
{
  "bovine": {
    "version": "1.0.0",
    "os/arch": "linux/x86_64"
  },
  "docker": {
    "error": "could not connect to docker (check if docker is running)"
  }
}

Windows

如果您在原生Windows二进制文件上遇到问题,以下提示可能有助于解决问题

  • 在执行bovine二进制文件时,可能需要安装并使用PowerShell 7.1+。
  • 用户可能需要在他们选择的浏览器中导航到host.docker.internal而不是localhost
  • 由于Rancher目前不支持本地集群的原生Windows镜像,因此必须配置Docker以部署Linux容器。

其他

您可能会注意到bovine在特权模式下运行Rancher容器。自Rancher v2.5以来,这是必需的(并不是bovine的要求)。更多信息可以在官方文档中找到。

为什么我应该使用这个而不是我的当前工作流程?

在这里我们可以自由讨论。这难道不就是Bash脚本加上docker CLI命令的华丽版本吗?bovine确实利用Docker守护进程作为其“引擎”,但其设计远不止于此。以下是一些可能提供背景信息的笔记

  • bovine未来可能会使用其他容器运行时。
    • 在这种情况下,用户可以选择多个运行时(取决于主机操作系统)。
  • 多平台支持是至关重要的,但对于一个旨在成为尝试Rancher和/或Kubernetes“第一步”的应用程序来说,尤其如此。
  • 错误处理、可维护性、用户体验和“可重构性”是其设计的核心。
  • 即使上述观点不存在,bovine也试图使Kubernetes和/或Rancher对新手来说更容易。
    • 有时,一个小抽象就能在尝试和使用底层软件之间做出区别。
  • bovine提供一键自动化,例如停止、删除和删除容器卷,而不会影响其他容器,也不检查ID。

免责声明

bovine目前不是官方的SUSERancher Labs产品。虽然它旨在在其他目的中用于“实际应用”,例如本README中描述的,但它是由独立维护的。

依赖项

~12–23MB
~332K SLoC