2021年5月

设置一个 Samba 共享,使扫描仪可以容易地被网络上的一台 Linux 计算机访问。

 title=

自由软件运动 因为一台设计不良的打印机 而开始。几十年后,打印机和扫描仪制造商继续重新发明轮子,无视既定的通用协议。因此,每隔一段时间,你就会偶然发现一台打印机或扫描仪似乎无法与你的操作系统配合使用。

最近,我在一台佳能三合一扫描仪(佳能 Maxify MB2720)上遇到了这种情况。我用开源方案解决这个扫描仪的问题。具体来说,我设置了一个 Samba 共享,使扫描仪在我的网络上可用。

Samba 项目 是一个用于 Linux/Unix 与 Windows 互操作的套件。尽管它是大多数用户从未与之交互的低级代码,但该软件使得在你的本地网络上共享文件变得很容易,而不管使用的是什么平台。

我使用的是 Fedora,所以这些说明应该适用于任何基于 RPM 的 Linux 发行版。对于其他发行版,可能需要做一些小的修改。下面是我的做法。

获取佳能工具

从佳能的网站上下载所需的用于 Windows 的 “ 佳能快速实用工具箱 Canon Quick Utility Toolbox ”。该软件是必需的,因为它是配置打印机目标文件夹位置和凭证的唯一方法。完成后,你就不需要再使用该工具了,除非你想做出改变。

在配置打印机之前,你必须在你的 Linux 电脑或服务器上设置一个 Samba 共享。用以下命令安装 Samba:

$ sudo dnf -y install samba

创建 /etc/smb.conf 文件,内容如下:

[global]
        workgroup = WORKGROUP
        netbios name = MYSERVER
        security = user
        #CORE needed for CANON PRINTER SCAN FOLDER
        min protocol = CORE
        #NTML AUTHV1 needed for CANON PRINTER SCAN FOLDER
        ntlm auth = yes
        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = no
        cups options = raw

        hosts allow = 127. 192.168.33.
        max smbd processes = 1000

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        writable = yes
        read only = No
        inherit acls = Yes

[SCANS]
        comment = MB2720 SCANS
        path = /mnt/SCANS
        public = yes
        writable = yes
        browseable = yes
        printable = no
        force user = tux
        create mask = 770

在接近结尾的 force user 这行中,将用户名从 tux 改为你自己的用户名。

不幸的是,佳能打印机不能与高于 CORE 或 NTML v2 认证的服务器信息块(SMB)协议一起工作。由于这个原因,Samba 共享必须配置最古老的 SMB 协议和 NTML 认证版本。这无论如何都不理想,而且有安全问题,所以我创建了一个单独的 Samba 服务器,专门用于扫描仪。我的另一台共享所有家庭网络文件的 Samba 服务器仍然使用 SMB 3 和 NTML v2 认证版本。

启动 Samba 服务端服务,并启用它:

$ sudo systemctl start smb
$ sudo systemctl enable smb

创建一个 Samba 用户

创建你的 Samba 用户并为其设置密码:

$ sudo smbpasswd -a tux

在提示符下输入你的密码。

假设你想在 Linux 系统上挂载你的 Samba 扫描仪,你需要做几个步骤。

创建一个 Samba 客户端凭证文件。我的看起来像这样:

$ sudo cat /root/smb-credentials.txt
username=tux
password=mySTRONGpassword

改变权限,使其不能被其他人阅读:

$ sudo chmod 640 /root/smb-credentials.txt

创建一个挂载点并将其添加到 /etc/fstab 中:

$ sudo mkdir /mnt/MB2720-SCANS

在你的 /etc/fstab 中添加以下这行:

//192.168.33.50/SCANS  /mnt/MB2720-SCANS  cifs vers=3.0,credentials=/root/smb-credentials.txt,gid=1000,uid=1000,_netdev    0 0

这将使用 CIFS 将 Samba 共享扫描挂载到新的挂载点,强制采用 SMBv3,并使用存储在 /root/smb-credetials.txt 中的用户名和密码。它还传递用户的组标识符(GID)和用户标识符(UID),让你拥有 Linux 挂载的全部所有权。_netdev 选项是必需的,以便在网络正常后(例如重启后)挂载该挂载点,因为该挂载点需要网络来访问。

配置佳能软件

现在你已经创建了 Samba 共享,在服务器上进行了配置,并将该共享配置到 Linux 客户端上,你需要启动“佳能快速实用工具箱”来配置打印机。因为佳能没有为 Linux 发布工具箱,所以这一步需要 Windows。你可以尝试 在 WINE 上运行它,但如果失败了,你就必须向别人借一台 Windows 电脑,或者在 GNOME BoxesVirtualBox 中运行一个 Windows 开发者虚拟机

打开打印机,然后启动佳能快速实用工具箱。它应该能找到你的打印机。如果不能看到你的打印机,你必须先将打印机配置为 LAN 或无线网络。

在工具箱中,点击“ 目标文件夹设置 Destination Folder Settings ”。

 title=

输入打印机管理密码。我的默认密码是 “canon”。

单击“ 添加 Add ”按钮。

 title=

在表格中填写“ 显示名 Displayed Name ”、“ 目标位置共享文件夹名称 Shared Folder Name in Destination ”,以及你的 Samba “ 域名/用户名 Domain Name/User Name ”和“ 密码 Password ”。

我把 “ PIN 码 PIN Code ”留空,但如果你想要求每次从打印机扫描时都要输入 PIN 码,你可以设置一个。这在办公室里很有用,每个用户都有自己的 Samba 共享和 PIN 码来保护他们的扫描。

点击“ 连接测试 Connection Test ”来验证表格数据。

点击 “OK” 按钮。

点击 “ 注册到打印机 Register to Printer ”,将你的配置保存到打印机上。

 title=

一切都设置好了。点击“ 退出 Exit ”。你现在已经完成了 Windows 的操作,可能还有工具箱,除非你需要改变什么。

开始扫描

你现在可以从打印机扫描,并从其 LCD 菜单中选择你的“目标文件夹”。扫描结果将直接保存到 Samba 共享中,你可以从你的 Linux 电脑上访问该共享。

为方便起见,用以下命令在你的 Linux 桌面或家目录上创建一个符号链接:

$ sudo ln -sd /mnt/MB2720-SCANS /home/tux/Desktop/MB2720-SCANS

这就是全部内容了!


via: https://opensource.com/article/21/4/linux-scan-samba

作者:Marc Skinner 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Python 之父要在 Python 3.11 中将速度翻倍

在本周的美国 PyCon 语言峰会上,Python 之父 Guido 发布的一份文件,详细介绍了他要使 Python 成为一种更快的语言的野心,他承诺在 Python 3.11 中使其速度翻倍。

不过,Guido 也不敢保证一定能达成目标,只是乐观地感觉有希望。如果真的能实现,主要受益者将是那些运行 CPU 密集型纯 Python 代码的人。而对于已经用 C 语言编写的代码,如 NumPy 和TensorFlow,I/O 绑定的代码、多线程代码,以及算法效率低下的代码,不会有太大的好处。

我们真的需要更快的 Python 吗?需要更快处理的数据科学和人工智能项目,都依赖于 GPU,所以 CPU 上跑起来快不快真的没那么重要。

祝融号成功着陆火星

5 月 15 日,天问一号着陆巡视器成功着陆于火星乌托邦平原南部预选着陆区,我国首次火星探测任务着陆火星取得圆满成功。着陆巡视器与环绕器分离后,环绕器升轨返回停泊轨道,为着陆巡视器提供中继通信。着陆巡视器包括“祝融号”火星车及进入舱。后续,“祝融号”火星车将依次开展对着陆点全局成像、自检、驶离着陆平台并开展巡视探测。

恭喜我国航天航空事业取得新成就!上午有朋友问我,祝融号是否采用了开源技术?从目前公开的信息看,我们尚不知道“祝融号”所采用的技术是什么,是否涉及开源技术也不得而知。

美国政府发布行政命令,要求加强开源软件安全

5 月 12 日,美国拜登政府发布行政命令,以加强美联邦政府的网络防御,要求“在初步准则公布后的 90 天内……应发布指南,确定加强软件供应链安全的做法。”并特别提到开源软件,要求美国政府必须确保“在可行的范围内,确保产品任何部分所使用的开源软件的完整性和出处”。即提供一个软件材料清单,包含了用于构建软件的各种组件的细节和供应链关系。

Linux 基金会已经发起了诸多项目和基金会,着力于改善日益严重的开源软件安全问题。

在超级信息高速公路上绕行。

 title=

用传奇的 DNS 黑客 Dan Kaminsky 的话说,“事实证明,互联网对全球社会而言意义重大”。为了使互联网发挥作用,计算机必须能够在最复杂的网络万维网(WWW)中找到彼此。这是几十年前给政府工作人员和学术界 IT 人员提出的问题,而今天我们使用的正是他们的解决方案。然而,他们实际上并不是在寻求建立 互联网 the Internet ,他们是在为 互联网络(实际上是 级联网 catenets ,即“ 级联的网络 concatenated networks ”,但这个术语最终不再流行)定义规范,它是一个 互连的网络 interconnected networks 的通用术语。

根据这些规范,网络使用数字组合,作为每台在线计算机的一种家地址,并为每个网站分配一个人性化但高度结构化的“主机名”(如 example.com)。由于用户主要是通过网站 名称 与互联网互动,可以说互联网的运作只是因为我们都同意一个标准化的命名方案。如果有足够多的人决定使用不同的命名方案,互联网的工作方式 可能 会有所不同。一群用户可以形成一个平行的互联网,它使用相同的物理基础设施(电缆、卫星和其他传输方式,将数据从一个地方传送到另一个地方),但使用不同的方法将主机名与编号地址联系起来。

事实上,这已经存在了,这篇文章展示了你如何访问它。

了解名称服务器

术语“ 互联网 internet ”实际上是 互联 interconnected 网络 networks 这两个术语的组合,因为这正是它的本质。就像一个城市里的邻里、一个国家里的城市、或一个大陆里的国家,或一个星球里的大陆一样,互联网通过将数据从一个家庭或办公室网络传输到数据中心和服务器房或其他家庭或办公室网络而跨越了全球。这是一项艰巨的任务,但它并非没有先例。毕竟,电话公司很久以前就把世界连接起来了,在那之前,电报和邮政服务也是这样做的。

在电话或邮件系统中,有一份名单,无论是正式的还是非正式的,都将人名与实际地址联系起来。它过去以电话簿的形式传递到家里,该电话簿是社区内每个电话所有者的目录。邮局的运作方式不同:他们通常依靠寄信人知道预定收信人的姓名和地址,但邮政编码和城市名称被用来把信送到正确的邮局。无论哪种方式,都需要有一个标准的组织方案。

对于计算机来说,IP 协议 描述了必须如何设置互联网上的地址格式。域名服务器 (DNS) 协议 描述了如何将人性化名称分配给 IP 以及从 IP 解析。无论你使用的是 IPv4 还是 IPv6,其想法都是一样的:当一个节点(可能是一台计算机或通往另一个网络的网关)加入一个网络时,它被分配一个 IP 地址。

如果你愿意,你可以在 ICANN(一个帮助协调互联网上的网站名称的非营利组织)注册一个域名,并将该名称指向该 IP。没有要求你“拥有”该 IP 地址。任何人都可以将任何域名指向任何 IP 地址。唯一的限制是,一次只能有一个人拥有一个特定的域名,而且域名必须遵循公认的 DNS 命名方案。

域名及其相关 IP 地址的记录被输入到 DNS 中。当你在浏览器中导航到一个网站时,它会迅速查询 DNS 网络,以找到与你所输入(或从搜索引擎点击)的任何 URL 相关的 IP 地址。

一个不同的 DNS

为了避免在谁拥有哪个域名的问题上发生争论,大多数域名注册商对域名注册收取一定的费用。该费用通常是象征性的,有时甚至是 0 美元(例如,freenom.com 提供免费的 .tk.ml.gq.cf 域名,先到先得)。

在很长一段时间里,只有几个“顶级”域名,包括 .org.edu.com。现在有很多,包括 .club.biz.name.international 等等。本质上它们就是字母组合,但是,有很多潜在的顶级域名是无效的,如 .null。如果你试图导航到一个以 .null 结尾的网站,那么你不会成功。它不能注册,也不是域名服务器的有效条目,而且它根本就不存在。

OpenNIC项目 已经建立了一个备用的 DNS 网络,将域名解析为 IP 地址,但它包括目前互联网不使用的名字。可用的顶级域名包括:

  • .geek
  • .indy
  • .bbs
  • .gopher
  • .o
  • .libre
  • .oss
  • .dyn
  • .null

你可以在这些(以及更多的)顶级域名中注册一个域名,并在 OpenNIC 的 DNS 系统上注册,使它们映射到你选择的 IP 地址。

换句话说,一个网站可能存在于 OpenNIC 网络中,但对于不使用 OpenNIC 名称服务器的人来说,仍然无法访问。这绝不是一种安全措施,甚至不是一种混淆手段。这只是一种有意识的选择,在 超级信息高速公路上绕行

如何使用 OpenNIC 的 DNS 服务器

要访问 OpenNIC 网站,你必须配置你的计算机使用 OpenNIC 的 DNS 服务器。幸运的是,这并不是一个非此即彼的选择。通过使用一个 OpenNIC 的 DNS 服务器,你可以同时访问 OpenNIC 和标准网络。

要配置你的 Linux 电脑使用 OpenNIC 的 DNS 服务器,你可以使用 nmcli 命令,这是 Network Manager 的一个终端界面。在开始配置之前,请访问 opennic.org,寻找离你最近的 OpenNIC DNS 服务器。与标准 DNS 和 边缘计算 一样,服务器在地理上离你越近,你的浏览器查询时的延迟就越少。

下面是如何使用 OpenNIC:

1、首先,获得一个连接列表:

$ sudo nmcli connection
NAME                TYPE             DEVICE
Wired connection 1  802-3-ethernet   eth0
MyPersonalWifi      802-11-wireless  wlan0
ovpn-phx2-tcp       vpn              --

你的连接肯定与这个例子不同,但要关注第一栏。这提供了你的连接的可读名称。在这个例子中,我将配置我的以太网连接,但这个过程对无线连接是一样的。

2、现在你知道了需要修改的连接的名称,使用 nmcli 更新其 ipv4.dns 属性:

$ sudo nmcli con modify "Wired connection 1" ipv4.dns "134.195.4.2"

在这个例子中,134.195.4.2 是离我最近的服务器。

3、防止 Network Manager 使用你路由器设置的内容自动更新 /etc/resolv.conf

$ sudo nmcli con modify "Wired connection 1" ipv4.ignore-auto-dns yes

4、将你的网络连接关闭,然后再次启动,以实例化新的设置:

$ sudo nmcli con down "Wired connection 1"
$ sudo nmcli con up "Wired connection 1"

完成了。你现在正在使用 OpenNIC 的 DNS 服务器。

路由器上的 DNS

你可以通过对你的路由器做这样的修改,将你的整个网络设置为使用 OpenNIC。你将不必配置你的计算机的连接,因为路由器将自动提供正确的 DNS 服务器。我无法演示这个,因为路由器的接口因制造商而异。此外,一些互联网服务提供商 (ISP) 不允许你修改名称服务器的设置,所以这并不总是一种选择。

测试 OpenNIC

为了探索你所解锁的“其他”互联网,尝试在你的浏览器中导航到 grep.geek。如果你输入 http://grep.geek,那么你的浏览器就会带你到 OpenNIC 的搜索引擎。如果你只输入 grep.geek,那么你的浏览器会干扰你,把你带到你的默认搜索引擎(如 SearxYaCy),并在窗口的顶部提供一个导航到你首先请求的页面。

 title=

不管怎么说,你最终还是来到了 grep.geek,现在可以在网上搜索 OpenNIC 的版本了。

广阔天地

互联网旨在成为一个探索、发现和平等访问的地方。OpenNIC 利用现有的基础设施和技术帮助确保这些东西。它是一个可选择的互联网替代方案。如果这些想法吸引了你,那就试一试吧!


via: https://opensource.com/article/21/4/opennic-internet

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Jenkins 的默认日志难以阅读,但日志本不必如此。

 title=

Jenkins 是一个自由开源的自动化服务器,用于构建、测试和部署代码。它是 持续集成 Continuous Integration (CI)、 持续交付 Continuous Delivery (CD)的基础,可以为开发人员每天节约几小时,并保护他们免受失败的代码上线的影响。一旦代码失效或开发人员需要查看测试输出时,Jenkins 提供了日志文件以供检查。

默认的 Jenkins 管道 Pipeline 日志可能难以阅读。这篇关于 Jenkins 日志的基础知识的总结文章提供了一些技巧(和代码),说明了如何提升它们的可读性。

你获得什么

Jenkins 管道分为 几个阶段。Jenkins 自动记录每个阶段的开始,记录内容如下:

[Pipeline] // stage
[Pipeline] stage (hide)
[Pipeline] { (Apply all openshift resources)
[Pipeline] dir

上文显示的内容没有太大区分度,重要的内容(如阶段的开始)未突出显示。在多达数百行的管道日志中,要找到一个阶段的起始和另外一个阶段的终止位置可能会很艰巨。当随意浏览日志寻找一个特定的阶段的时候,这种艰巨尤其明显。

Jenkins 管道是由 Groovy 和 Shell 脚本混合编写的。在 Groovy 代码中,日志记录很少。很多时候,日志是由命令中的不起眼的文本组成,没有详细信息。在 Shell 脚本中,打开了调试模式(set -x),所以每条命令都会被完全 具现化 realized (变量被解除引用并打印出数值)并详细记录,输出也是如此。

鉴于日志可能有很多内容,通读日志获取相关信息可能很繁琐。由于在管道中被处理,并跟着一个 Shell 脚本的 Groovy 日志可读性差,它们很多时候缺少上下文:

[Pipeline] dir
Running in /home/jenkins/agent/workspace/devop-master/devops-server-pipeline/my-repo-dir/src
[Pipeline] { (hide)
[Pipeline] findFiles
[Pipeline] findFiles
[Pipeline] readYaml
[Pipeline] }

我可以知道我正在使用的目录,并且知道我正在使用 Jenkins 的步骤搜索文件、读取 YAML 文件。但是我在寻找什么?我找到并读取的内容是什么?

能做什么?

我很高兴你这么问,因为这里有一些简单的做法和一些小的代码片段可以提供帮助。首先,代码如下:

def echoBanner(def ... msgs) {
   echo createBanner(msgs)
}

def errorBanner(def ... msgs) {
   error(createBanner(msgs))
}

def createBanner(def ... msgs) {
   return """
       ===========================================

       ${msgFlatten(null, msgs).join("\n        ")}

       ===========================================
   """
}

// flatten function hack included in case Jenkins security
// is set to preclude calling Groovy flatten() static method
// NOTE: works well on all nested collections except a Map
def msgFlatten(def list, def msgs) {
   list = list ?: []
   if (!(msgs instanceof String) && !(msgs instanceof GString)) {
       msgs.each { msg ->
           list = msgFlatten(list, msg)
       }
   }
   else {
       list += msgs
   }

   return  list
}

将这段代码添加到每个管道的末尾,也可以 加载一个 Groovy 文件 或者使其成为 Jenkins 共享库 的一部分,这样更有效。

在每个阶段起始处(或者在阶段中的特定位置),只需调用 echoBanner

echoBanner("MY STAGE", ["DOING SOMETHING 1", "DOING SOMETHING 2"])

你的 Jenkins 日志会展示如下:

    ===========================================

    MY STAGE
    DOING SOMETHING 1
    DOING SOMETHING 2

    ===========================================

这个横幅很容易从日志中分辨出来。当正确使用它们时,它们还有助于界定管道流,并且可以很好的将日志分解开来进行阅读。

我已经在某些地方专业地使用这些代码一些时间了。在帮助管道日志更易读和流程更易理解方面,反馈是非常积极的。

上述的 errorBanner 方法以相同的方式工作,但是它会立即使脚本失效。这有助于突显失败的位置与原因。

最佳实践

  1. 在你的 Groovy 代码中大量使用 echo Jenkins 步骤来通知用户你在做什么。这些也可以帮助记录你的代码。
  2. 使用空的日志语句(Groovy 中空的 echo 步骤、echo '' 或 Shell 中的 echo)来分割输出,提高可读性。你可能在你的代码中为同样的目的使用空行。
  3. 避免在脚本中使用 set +x 的陷阱,因为它隐藏了日志记录已执行的 Shell 语句。它并没有清理你的日志,而是使你的管道成为一个黑盒子,隐藏了管道正在做的行为以及出现的任何错误。确保管道功能尽可能透明。
  4. 如果你的管道创建了 中间工件 Intermediate Artifacts ,开发人员和 DevOps 人员可以使用这些工件来帮助调试问题,那么也要记录它的内容。是的,它会加长日志,但这只是文本。在某些时候,这会是有用的信息,而(利用得当的)日志不就是关于发生了什么和为什么发生的大量信息吗?

Kubernetes 机密信息:无法完全透明的地方

有些事情你不希望出现在日志里暴露出来。如果你在使用 Kubernetes 并引用保存在 Kubernetes 机密信息 Secrets 中的数据,那么你绝对不希望在日志中公开该数据,因为这些数据只是被混淆了,而没有被加密。

假如你想获取一些保存在机密信息中的数据,然后将其注入模板化 JSON 文件中。(机密信息和 JSON 模板的完整内容与此例无关。)按照最佳实践,你希望保持透明并记录你的操作,但你不想公开机密信息数据。

将脚本模式从调试(set -x)更改为命令记录(set -v)。在脚本敏感部分的结尾,将 Shell 重置为调试模式:

sh """
   # change script mode from debugging to command logging
   set +x -v

   # capture data from secret in shell variable
   MY_SECRET=\$(kubectl get secret my-secret --no-headers -o 'custom-column=:.data.my-secret-data')

   # replace template placeholder inline
   sed s/%TEMPLATE_PARAM%/${MY_SECRET_DATA}/ my-template-file.json

   # do something with modified template-file.json...

   # reset the shell to debugging mode
   set -x +v
"""

这将输出此行到日志:

sed s/%TEMPLATE_PARAM%/${MY_SECRET_DATA}/ my-template-file.json

与 Shell 调试模式中不同,这不会具现化 Shell 变量 MY_SECRET_DATA。显然,如果管道中在这一点出现问题,而你试图找出问题出在哪里,那么这不如调试模式有用。但这是在保持管道执行对开发人员和 DevOps 透明的同时,也保持你的秘密的最佳平衡。


via: https://opensource.com/article/21/5/jenkins-logs

作者:Evan "Hippy" Slatis 选题:lujun9972 译者:DCOLIVERSUN 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Cloudflare 呼吁终结验证码

这种名为“CAPTCHAS”的验证码你肯定见过,它们要求用户识别某种图像,事实上被利用来训练某些公司的 AI。Cloudflare 估计平均需要 32 秒才能完成这种验证,它们在移动设备上效果不佳,还假定你对展示的物体有文化知识,往往需要某些认知能力。研究人员假设互联网用户平均每 10 天看到一次这种验证码,并将其乘以全球 46 亿互联网用户和 32 秒,那么人类每天总共花在这种验证上的时间就达 500 年。

Cloudflare 提出了一种“加密人格证明”的替代方案,基本上是通过硬件安全密钥或手机 NFC 来完成验证,Cloudflar 认为完成这一流程只需五秒钟,更重要的是,这一验证保护了用户的隐私,身份证明与用户设备没有唯一的联系。

CAPTCHAS 验证码实在太烦了,是该让这种给 AI 打白工的验证码消失了。但是 Cloudflare 是个更好的替代品吗?

微软将关闭其 Azure 区块链服务

微软对 Azure 区块链即服务(BaaS)的最初尝试始于 2015 年。近日,微软宣布将在 2021 年 9 月 10 日关闭其 Azure 区块链服务,而在今年的 5 月 10 日,就已经不支持新的部署或成员创建了。但是微软没有说明为什么关闭 Azure 区块链服务。

在我看来,这种所谓的“联盟链”,本身就是一种伪命题,是一种夹在分布式数据库和区块链公链之间的一种怪物。所以,其实真正能用起来联盟链的企业客户并不算多。

System76 发布了开源键盘

这款名为 “Launch Configurable Keyboard” 的键盘是 100% 开源的,不但其配置软件是开源的,其固件和硬件也是开源的。其配置软件支持 Linux、Windows 和 macOS。它配备了额外的键帽和拔键器,人们可以根据个人工作流程的偏好来调换按键。它只使用三种键帽尺寸,还具有新颖的分离式空格键,允许用户将其中一个空格键的键帽换成 Shift、退格键或功能键。这款键盘售价为 285 美元。

虽然看起来颜值不够高,不过如果你喜欢,你可以使用开源方式来自己定制一个。

开始探索 kubectl、容器、吊舱等,接着下载我们的免费的速查表,这样你就可以随时掌握关键的命令了。

 title=

云计算主要是在 Kubernetes 上运行,Kubernetes 主要是在 Linux 上运行,而 Linux 在有熟练的系统管理员控制时运行得最好。无论你认为自己是云计算架构师还是只是一个保守的系统管理员,现代互联网都需要了解如何在容器中创建应用和服务,按需扩展,按需扩展以及如何明智地进行监视和管理。

进入勇敢的容器世界的第一步是学习 Kubernetes 和它的基本命令:kubectl

安装 kubectl

kubectl 命令允许你在 Kubernetes 集群上运行命令。你使用 kubectl 来部署应用、查看日志、检查和管理集群资源,并在出现问题时进行故障排除。kubectl(以及整个 Kubernetes)的典型“问题”是,要对集群运行命令,你首先需要一个集群。然而,有一些简单的解决方案。

首先,你可以创建自己的 Kubernetes 集群,只需买三块树莓派板和相关外围设备(主要是电源)。当你获得了硬件,阅读 Chris Collins 的 使用树莓派构建 Kubernetes 集群,你就会拥有自己的安装有 kubectl 的集群。

另一种获得集群的方法是使用 Minikube,这是一个 Kubernetes 的实践环境。在所有建立和运行集群的方法中,这是最简单的。

还有更多的选择;例如,你可以参加一个关于 Kubernetes 的课程,以获得一个运行集群的实验室,或者你可以在云上购买时间。只要你有一个 Kubernetes 环境来练习,如何获得集群并不重要。

当你你能访问一个集群,你就可以开始探索 kubectl 命令。

了解吊舱和容器

容器是一个轻量级的、部分的 Linux 系统,专门用于运行一个应用或服务。容器受到 内核命名空间 的限制,这使它能够访问其主机(运行容器的计算机)上的重要系统组件,同时防止它向其主机发送数据。容器以容器镜像(或简称 镜像)的形式保存,并由称为 ContainerfileDockerfile 的文本文件定义。

吊舱 Pod 是容器的正式集合,也是管理员扩展、监控和维护任何数量的容器的一种简单方法。

这些一起就像 Kubernetes 的“应用程序”。创建或获取容器镜像是你在云上运行服务的方式。

运行一个吊舱

容器镜像的两个可靠的仓库是 Docker Hub 和 Quay。你可以在仓库中搜索可用的镜像列表。通常有由项目提供的大型项目的官方镜像,也有专门的、定制的或特殊项目的社区镜像。最简单和最小的镜像之一是 BusyBox 容器,它提供了一个最小的 shell 环境和一些常用命令。

无论你是从仓库中拉取镜像,还是自己编写镜像定义并从 Git 仓库中拉取到集群中,其工作流程都是一样的。当你想在 Kubernetes 中启动一个吊舱时:

  1. Docker HubQuay 上找到一个你想使用的镜像
  2. 拉取镜像
  3. 创建一个吊舱
  4. 部署吊舱

以 BusyBox 容器为例子,你可以用一条命令完成最后三个步骤:

$ kubectl create deployment my-busybox --image=busybox

等待 kubectl 完成这个过程,最后你就有了一个正在运行的 BusyBox 实例。这个吊舱并没有暴露给其他人。它只是在后台安静地在你的集群上运行。

要看你的集群上有哪些吊舱在运行:

$ kubectl get pods --all-namespaces

你也可以获得关于吊舱部署的信息:

$ kubectl describe deployment my-busybox

与吊舱互动

容器通常包含使其自动化的配置文件。例如,将 Nginx httpd 服务器作为容器安装,应该不需要你的互动。你开始运行容器,它就会工作。对于你添加到吊舱中的第一个容器和之后的每个容器都是如此。

Kubernetes 模型的优点之一是,你可以根据需要扩展你的服务。如果你的网络服务被意外的流量淹没,你可以在你的云中启动一个相同的容器(使用 scaleautoscale 子命令),使你的服务处理传入请求的能力增加一倍。

即便如此,有时还是很高兴看到一些证明吊舱正在按预期运行的证据,或者能够对似乎无法正常运行的某些问题进行故障排除。为此,你可以在一个容器中运行任意的命令:

$ kubectl exec my-busybox -- echo "hello cloud"

另外,你可以在你的容器中打开一个 shell,用管道将你的标准输入输入到其中,并将其输出到终端的标准输出:

$ kubectl exec --stdin --tty my-busybox -- /bin/sh

暴露服务

默认情况下,吊舱在创建时不会暴露给外界,这样你就有时间在上线前进行测试和验证。假设你想把 Nginx Web 服务器作为一个吊舱安装和部署在你的集群上,并使其可以访问。与任何服务一样,你必须将你的吊舱指向服务器上的一个端口。kubectl 子命令 expose 可以为你做到这点:

$ kubectl create deployment \
  my-nginx --image=nginx
$ kubectl expose deployment \
  my-nginx --type=LoadBalancer --port=8080

只要你的集群可以从互联网上访问,你就可以通过打开浏览器并导航到你的公共 IP 地址来测试你的新 Web 服务器的可访问性。

不仅仅是吊舱

Kubernetes 提供了很多东西,而不仅仅是存储普通服务的镜像。除了作为一个 容器编排 系统,它还是一个云开发的平台。你可以编写和部署应用,管理和监控性能和流量,实施智能负载平衡策略等。

Kubernetes 是一个强大的系统,它已经迅速成为各种云的基础,最主要的是 开放混合云。今天就开始学习 Kubernetes 吧。随着你对 Kubernetes 的进一步了解,你会需要一些关于其主要概念和一般语法的快速提醒,所以 下载我们的 Kubernetes 速查表 并将它放在身边。


via: https://opensource.com/article/21/5/kubernetes-cheat-sheet

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出