分类 树莓派 下的文章

开始在 Mac 上使用 Raspberry Pi Imager。

有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统。要在树莓派上安装操作系统,只需将操作系统镜像 “闪存” 到 SD 卡即可。为了使之尽可能简单,树莓派基金会推出一个 Raspberry Pi Imager 实用程序,你可以在所有主流平台上下载它。下面就来简单介绍一下这个有用的新工具。

安装 Imager

你通常可以在树莓派下载页面上找到 Raspberry Pi Imager。它有 Mac、Ubuntu 和 Windows 版本。我将下载并演示 Mac 版本。

Mac 的安装包是常规的 DMG 镜像,它会挂载到你的桌面,然后经典的安装界面就会出现:

只需将可爱的树莓图标拖到“应用”文件夹,就可以完成。从启动台中调用它,你会看到一系列简单的按钮和菜单供你选择。真的不能比这更简单了:

可用的镜像和选项

默认选项包含各种树莓派型号的镜像。Raspbian 是首选,它有两个可用的选项,较小的 “Lite” 版本和较大的 “Full” 版本。LibreELEC Kodi 娱乐系统有各种特定于型号的版本。Ubuntu 18 和 19 有适用于不同树莓派型号的 32 位和 64 位版本。有一个 RPi 4 EEPROM 恢复程序,以及使用 FAT32 格式化卡的功能。最后,有一个通用的镜像安装程序选项,稍后我将进行尝试。这个简单而紧凑的程序非常方便。

安装一些镜像

我决定使用 16g 的 micro SD 卡。我选择了默认的 Raspbian 镜像,选择已连接的 USB/SD 设备,然后按下 “WRITE” 按钮。这是一个简短的演示:

我没有在此处发布整个操作过程。我认为它是在写入的时候下载了镜像,对于我的无线连接这花费了几分钟。该过程在完成之前要先经过写入,然后经过验证环节。完成后,我弹出设备,并将卡插入到我的树莓派 3 中,然后按照通常的图形 Raspbian 安装向导和桌面环境进行设置。

这对我来说还不够。我每天都会下载许多 Linux,今天我还在寻找更多。我回到了树莓派下载页面,并下载了 RISC OS 镜像。这个过程几乎一样容易。下载 RISCOSPi.5.24.zip 文件,将其解压缩,然后找到 ro524-1875M.img 文件。在 “Operating System” 按钮中,我选择了 “Use Custom” 并选择了所需的镜像文件。这个过程几乎是相同的。唯一真正的不同是我必须在下载目录中搜寻并选择一个镜像。文件写完后,回到树莓派 3,RISC OS 可以使用了。

对 USB C 的抱怨

顺便说一句,如今有多少人对 USB C 带来的不便感到沮丧?我使用的是只有 USB C 口的 MacBook Pro,我需要不断更换适配器才能完成工作。看看这个:

是的,那是一个 USB C 到 USB A 适配器,然后是一个 USB 到 SD 卡读卡器,以及一个 SD 到 micro SD 适配器。我可能可以在网上找到一些东西来简化此过程,但这些都是我手头有的部件,以支持我家五花八门的 Mac、Windows 和 Linux 主机。说到这里就不多说了,但我希望你能从这些疯狂的东西中得到一个笑点。

总结

新的 Raspberry Pi Imager 是一种简单有效的工具,可以快速烧录树莓派镜像。BalenaEtcher 是用于对可移动设备进行烧录的类似工具,但是新的 Raspberry Pi Imager 通过省去了获取那些常见镜像的步骤,使普通树莓派系统安装(如 Raspbian)更加容易。


via: https://opensource.com/article/20/4/raspberry-pi-imager-mac

作者:James Farrell 选题:lujun9972 译者:geekpi 校对:wxy

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

手把手教你怎样以低成本的硬件和简易步骤搭建自己的社交网络。

近年来,社交网络已经革新了人们的生活习惯。人们每天都会使用社交频道与朋友和家人联系。但是涉及到隐私和数据安全时,仍有一些共同的问题。尽管社交网络创建了复杂的隐私策略来保护用户的信息,但如果你不想自己的信息被泄露,最好的办法还是把数据保存在自己的服务器上。

一个树莓派 — 多才多艺的 Raspbian Lite 版本就可以让你搭建很多有用的家庭服务(参照我的文章树莓派项目)。通过搜索开源软件你就可以实现一些令人痴迷的功能,你也可以用这个神奇的设备来感受那些功能。其中一个有趣的尝试就是在你的树莓派上安装 OSSN。

OSSN 是什么?

开源社交网络 OpenSource Social Network (OSSN)是用 PHP 写的一个快速开发社交网络软件,让你可以搭建自己的社交网站。OSSN 可以用来搭建不同类型的社交应用,如:

  • 私人内部网
  • 公用/公开网络
  • 社区

OSSN 支持的功能:

  • 照片
  • 个人资料
  • 朋友圈
  • 表情
  • 搜索
  • 聊天

OSSN 运行在 LAMP 服务器上。硬件需求很简单,却能提供强大的用户界面,也友好支持移动端。

我们需要准备什么

这个项目很简单,而且由于我们只安装远程 Web 服务,因此我们只需要一些便宜的零件就够了。我使用的是树莓派 3B+,但是用树莓派 3A+ 或其他更新的板应该也可以。

硬件:

  • 带有电源模块的树莓派 3B+
  • 一张 SD 卡(最好是性能好点的卡,至少 16 GB)
  • 一台有 SFTP 软件(如免费的 Filezilla)的桌面 PC,用来把安装包传到你的树莓派上

操作步骤

我们首先搭建一个传统的 LAMP 服务器,然后配置数据库用户和安装 OSSN。

1、安装 Raspbian Buster Lite 操作系统

你可以直接参照我的文章在你的树莓派上安装 Raspbian Buster Lite

为了确保你的系统是最新的,ssh 登录到树莓派后在终端输入下面的命令:

sudo apt-get update
sudo apt-get upgrade

2、安装 LAMP 服务

LAMP(Linux–Apache–Mysql–Php)服务通常与 MySQL 数据库配合。在我们的项目中,我们选择 MariaDB,因为它更轻量,完美支持树莓派。

安装 Apache 服务:

sudo apt-get install apache2 -y

你可以通过在浏览器输入 http://<<YouRpiIPAddress>> 来检查 Apache 是否安装正确:

安装 PHP:

sudo apt-get install php -y

安装 MariaDB 服务和 PHP connector:

sudo apt-get install mariadb-server php-mysql -y

安装 phpMyAdmin:

在 OSSN 中 phpMyAdmin 不是强制安装的,但我建议你安装,因为它可以简化数据库的管理。

sudo apt-get install phpmyadmin

在 phpMyAdmin 配置界面,执行以下步骤:

  • 按下空格和 “OK” 选择 apache(强制)。
  • 在 dbconfig-common 选择“Yes”,配置 phpMyAdmin 的数据库。
  • 输入想设置的密码,按下 “OK”。
  • 再次输入 phpMyAdmin 密码来确认,按下 “OK”。

为 phpMyAdmin 用户添加数据库权限来管理数据库:

我们用 root 用户连接 MariaDB(默认没有密码)来设置权限。

sudo mysql -uroot -p
grant all privileges on *.* to 'phpmyadmin'@'localhost';
flush privileges;
quit

最后,重启 Apache 服务:

sudo systemctl restart apache2.service

在浏览器输入 http://<<YouRpiIPAddress>>/phpmyadmin/ 来检查 phpMyAdmin 是否正常:

默认的 phpMyAdmin 登录凭证:

  • 用户名:phpmyadmin
  • 密码:在 phpMyAdmin 安装步骤中你设置的密码

3、安装 OSSN 所需的其他包和配置 PHP

在第一次配置 OSSN 前,我们还需要在系统上安装一些所需的包:

  • PHP 版本 5.6、7.0 或 7.1
  • MYSQL 5 及以上
  • APACHE
  • MOD\_REWRITE
  • 需要打开 PHP 扩展 cURL 和 Mcrypt
  • PHP GD 扩展
  • PHP ZIP 扩展
  • 打开 PHP 设置 allow_url_fopen
  • PHP JSON 支持
  • PHP XML 支持
  • PHP OpenSSL

在终端输入以下命令来安装上述包:

sudo apt-get install php7.3-curl php7.3-gd php7.3-zip php7.3-json php7.3-xml

打开 mod\_rewrite:

sudo a2enmod rewrite

修改默认的 Apache 配置,使用 mod\_rewrite:

sudo nano /etc/apache2/sites-available/000-default.conf

000-default.conf 文件中添加下面的内容:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    # 需要添加的部分开始 --------------------------------
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Require all granted
        </Directory>
    # 需要添加的部分结束 --------------------------------
</VirtualHost>

安装 Mcrypt:

sudo apt install php-dev libmcrypt-dev php-pear
sudo pecl channel-update pecl.php.net
sudo pecl install mcrypt-1.0.2

打开 Mcrypt 模块:

/etc/php/7.3/apache2/php.ini 文件中 extension=mcrypt.so(或取消注释):

sudo nano /etc/php/7.3/apache2/php.ini

allow_url_fopen 应该已经在 /etc/php/7.3/apache2/php.ini 文件中打开了。OpenSSL 应该在 php7.3 中安装了。

我建议的另一个设置是把 PHP 最大上传文件数修改为 16 MB:

sudo nano /etc/php/7.3/apache2/php.ini

搜索到 upload_max_filesize 所在的行,参照下面的设置:

upload_max_filesize = 16M

保存并退出,重启 Apache:

sudo systemctl restart apache2.service

4、安装 OSSN

创建数据库,设置用户

回到 phpmyadmin web 页面(浏览器输入 http://<<YouRpiIPAddress>>/phpmyadmin/)并登录:

  • 用户名: phpmyadmin
  • 密码:在 phpMyAdmin 安装步骤中你设置的密码

点击数据库标签页:

创建一个数据库,记下数据库的名字,因为在之后的安装过程中,你要手动输入它。

现在为 OSSN 创建一个数据库用户,我使用下面的凭证:

  • 用户名: ossn_db_user
  • 密码: ossn_db_password

在终端输入下面的命令(如果你没有修改过密码,root 密码应该仍然是空):

sudo mysql -uroot -p
CREATE USER 'ossn_db_user'@'localhost' IDENTIFIED BY 'ossn_db_password';
GRANT ALL PRIVILEGES ON ossn_db.* TO 'ossn_db_user'@'localhost';
flush privileges;
quit
安装 OSSN 软件

在你 PC 上从 OSSN 下载页面 下载 OSSN 安装压缩文件,保存为文件 ossn-v5.2-1577836800.zip

使用你习惯的 SFTP 软件把整个压缩文件通过 SFTP 传到树莓派的新目录 /home/pi/download 下。常用的(默认)SFP 连接参数是:

  • 主机:你树莓派的 IP 地址
  • 用户名:pi
  • 密码:raspberry(如果没有修改过默认密码)
  • 端口: 22

在终端输入:

cd /home/pi/download/ # 进入上传的 OSSN 安装文件的目录。
unzip ossn-v5.2-1577836800.zip # 从压缩包中提取所有文件
cd /var/www/html/ # 进入 Apache Web 目录
sudo rm index.html # 删除 Apache 默认页面 - 我们将使用 OSSN
sudo cp -R /home/pi/download/ossn-v5.2-1577836800/* ./ #Copy installation files to web directory
sudo chown -R www-data:www-data ./

创建数据文件夹:OSSN 需要一个文件夹来存放数据。出于安全目的,OSSN 建议这个文件夹创建在公开文档根目录之外。所以,我们在 /opt 下创建。

sudo mkdir /opt/ossn_data
sudo chown -R www-data:www-data /opt/ossn_data/

在浏览器输入 http://<<YourRpiIPAddress>> 来开始安装向导。

所有项都检查完后,点击页面最下面的下一步按钮。

阅读证书验证并点击页面最下面的下一步按钮来接受证书。

输入数据库用户名,密码和你选择的数据库名字,记得也要输入 OSSN 数据文件夹名称。点击安装。

输入你的管理员账号信息,点击创建按钮。

现在所有的工作应该都完成了。点击结束,进入管理员首页。

你可以通过 URL http://<<YourRpiIPAddress>>/administrator 进入管理员控制面板,普通用户可以访问链接是 http://<<YourRpiIPAddress>>

本文首发在 peppe8o.com。已获得转载授权。


via: https://opensource.com/article/20/3/raspberry-pi-open-source-social

作者:Giuseppe Cassibba 选题:lujun9972 译者:lxbwolf 校对:wxy

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

使用这些简单、经济高效的开源工具构建自己真正的私人聊天和消息解决方案。

互联网提供了大量免费的消息服务。像 WhatsApp 和 Viber 这样的应用已经是我们日常生活的一部分,也是我们与亲朋好友沟通的最常见方式。但是,安全意识的提高,让人们对真正的私密聊天解决方案的需求越来越大。此外,消息类应用在我们的设备中占用了大量空间,因此一个备用聊天渠道可能对于我们与朋友分享媒体、信息和联系人很有作用。

今天,我们将了解如何使用树莓派和 Rocket.Chat 安装一个私人聊天和消息服务器。

什么是 Rocket.Chat?

Rocket.Chat 是一个开源解决方案,它提供了一个增强的聊天服务。它包括媒体共享、屏幕共享和视频/音频呼叫支持等协作工具。

它可以通过浏览器或从所有主要应用商店(Google Play、App Store 等)下载使用。

除了社区版本外,Rocket.Chat 还提供企业版和专业版,包括支持和其他附加功能。

我们需要什么

对于这个项目,我将使用更便宜的树莓派 3A+。树莓派 3B 和 3B+ 以及树莓派 4B 应该也可以用同样的方法。

我也建议使用一块高性能 SD 卡,因为 Rocket.Chat 会给树莓派带来很大的负载。如其他文章中所述,高性能 SD 卡可显著提高 Raspbian 操作系统的性能。

我们将使用 Raspbian 的精简版本,拥有预配置的 WiFi 访问和 SSH 服务,因此不需要键盘或 HDMI 线缆。

分步过程

安装最新版本的 Raspbian Buster Lite 开始。

我们将使用 Snap 简化 Rocket.Chat 安装。通过 SSH 登录并从终端输入:

sudo apt-get update
sudo apt-get upgrade

安装 Snap:

sudo apt-get install snapd

安装 Snap 后,我们需要重启系统使其正常工作:

sudo reboot

再次通过 SSH 登录,并用以下简单的命令安装 Rocket.Chat:

sudo snap install rocketchat-server

从终端安装后,请等待一段时间,让 Rocket.Chat 初始化数据库和服务。休息一下,几分钟后,你应该能够在浏览器中访问 http://<<YOUR_RPI_IP_ADDRESS>>:3000,你应该看到以下内容:

 title=

填写所需的表单就可以了。经过四个简单的设置窗口后,你应该会进入 Rocket.Chat 主页:

 title=

享受吧!

本文最初发表在 peppe8o.com,并获许重新发布。


via: https://opensource.com/article/20/3/raspberry-pi-rocketchat

作者:Giuseppe Cassibba 选题:lujun9972 译者:geekpi 校对:wxy

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

如何在树莓派上使用 k3s 和 Let's Encrypt 来加密你的网站。

上一篇文章中,我们在 k3s 集群上部署了几个简单的网站。那些是未加密的网站。不错,它们可以工作,但是未加密的网站有点太过时了!如今,大多数网站都是加密的。在本文中,我们将安装 cert-manager 并将其用于在集群上以部署采用 TLS 加密的网站。这些网站不仅会被加密,而且还会使用有效的公共证书,这些证书会从 Let's Encrypt 自动获取和更新!让我们开始吧!

准备

要继续阅读本文,你将需要我们在上一篇文章中构建的 k3s 树莓派集群。另外,你需要拥有一个公用静态 IP 地址,并有一个可以为其创建 DNS 记录的域名。如果你有一个动态 DNS 提供程序为你提供域名,可能也行。但是,在本文中,我们使用静态 IP 和 CloudFlare 来手动创建 DNS 的 A 记录。

我们在本文中创建配置文件时,如果你不想键入它们,则可以在此处进行下载。

我们为什么使用 cert-manager?

Traefik(在 k3s 预先捆绑了)实际上具有内置的 Let's Encrypt 支持,因此你可能想知道为什么我们要安装第三方软件包来做同样的事情。在撰写本文时,Traefik 中的 Let's Encrypt 支持检索证书并将其存储在文件中。而 cert-manager 会检索证书并将其存储在 Kubernetes 的 “ 机密信息 secret ” 中。我认为,“机密信息”可以简单地按名称引用,因此更易于使用。这就是我们在本文中使用 cert-manager 的主要原因。

安装 cert-manager

通常,我们只是遵循 cert-manager 的文档在 Kubernetes 上进行安装。但是,由于我们使用的是 ARM 体系结构,因此我们需要进行一些更改,以便我们可以完成这个操作。

第一步是创建 cert-manager 命名空间。命名空间有助于将 cert-manager 的 Pod 排除在我们的默认命名空间之外,因此当我们使用自己的 Pod 执行 kubectl get pods 之类的操作时,我们不必看到它们。创建名称空间很简单:

kubectl create namespace cert-manager

安装说明会让你下载 cert-manager 的 YAML 配置文件并将其一步全部应用到你的集群。我们需要将其分为两个步骤,以便为基于 ARM 的树莓派修改文件。我们将下载文件并一步一步进行转换:

curl -sL \
https://github.com/jetstack/cert-manager/releases/download/v0.11.0/cert-manager.yaml |\
sed -r 's/(image:.*):(v.*)$/\1-arm:\2/g' > cert-manager-arm.yaml

这会下载配置文件,并将包含的所有 docker 镜像更新为 ARM 版本。来检查一下它做了什么:

$ grep image: cert-manager-arm.yaml
          image: "quay.io/jetstack/cert-manager-cainjector-arm:v0.11.0"
          image: "quay.io/jetstack/cert-manager-controller-arm:v0.11.0"
          image: "quay.io/jetstack/cert-manager-webhook-arm:v0.11.0"

如我们所见,三个镜像现在在镜像名称上添加了 -arm。现在我们有了正确的文件,我们只需将其应用于集群:

kubectl apply -f cert-manager-arm.yaml

这将安装 cert-manager 的全部。我们可以通过 kubectl --namespace cert-manager get pods 来检查安装何时完成,直到所有 Pod 都处于 Running 状态。

这就完成了 cert-manager 的安装!

Let's Encrypt 概述

Let's Encrypt 的好处是,它免费为我们提供了经过公共验证的 TLS 证书!这意味着我们可以拥有一个完全有效的、可供任何人访问的 TLS 加密网站,这些家庭或业余的爱好活动挣不到钱,也无需自己掏腰包购买 TLS 证书!以及,当通过 cert-manager 使用 Let's Encrypt 的证书时,获得证书的整个过程是自动化的,证书的续订也是自动的!

但它是如何工作的?下面是该过程的简化说明。我们(或代表我们的 cert-manager)向 Let's Encrypt 发出我们拥有的域名的证书请求。Let's Encrypt 通过使用 ACME DNS 或 HTTP 验证机制来验证我们是否拥有该域。如果验证成功,则 Let's Encrypt 将向我们提供证书,这些证书将由 cert-manager 安装在我们的网站(或其他 TLS 加密的端点)中。在需要重复此过程之前,这些证书可以使用 90 天。但是,cert-manager 会自动为我们更新证书。

在本文中,我们将使用 HTTP 验证方法,因为它更易于设置并且适用于大多数情况。以下是幕后发生的基本过程。cert-manager 向 Let's Encrypt 发出证书请求。作为回应,Let's Encrypt 发出所有权验证的 质询 challenges 。这个质询是将一个 HTTP 资源放在请求证书的域名下的一个特定 URL 上。从理论上讲,如果我们可以将该资源放在该 URL 上,并且让 Let's Encrypt 可以远程获取它,那么我们实际上必须是该域的所有者。否则,要么我们无法将资源放置在正确的位置,要么我们无法操纵 DNS 以使 Let's Encrypt 访问它。在这种情况下,cert-manager 会将资源放在正确的位置,并自动创建一个临时的 Ingress 记录,以将流量路由到正确的位置。如果 Let's Encrypt 可以读到该质询要求的资源并正确无误,它将把证书发回给 cert-manager。cert-manager 将证书存储为“机密信息”,然后我们的网站(或其他任何网站)将使用这些证书通过 TLS 保护我们的流量。

为该质询设置网络

我假设你要在家庭网络上进行设置,并拥有一个以某种方式连接到更广泛的互联网的路由器/接入点。如果不是这种情况,则可能不需要以下过程。

为了使质询过程正常运行,我们需要一个我们要申请证书的域名,以将其路由到端口 80 上的 k3s 集群。为此,我们需要告诉世界上的 DNS 系统它的位置。因此,我们需要将域名映射到我们的公共 IP 地址。如果你不知道你的公共 IP 地址是什么,可以访问 WhatsMyIP 之类的地方,它会告诉你。接下来,我们需要输入 DNS 的 A 记录,该记录将我们的域名映射到我们的公共 IP 地址。为了使此功能可靠地工作,你需要一个静态的公共 IP 地址,或者你可以使用动态 DNS 提供商。一些动态 DNS 提供商会向你颁发一个域名,你可以按照以下说明使用它。我没有尝试过,所以不能肯定地说它适用于所有提供商。

对于本文,我们假设有一个静态公共 IP,并使用 CloudFlare 来设置 DNS 的 A 记录。如果愿意,可以使用自己的 DNS 服务器。重要的是你可以设置 A 记录。

在本文的其余部分中,我将使用 k3s.carpie.net 作为示例域名,因为这是我拥有的域。你显然会用自己拥有的任何域名替换它。

为示例起见,假设我们的公共 IP 地址是 198.51.100.42。我们转到我们的 DNS 提供商的 DNS 记录部分,并添加一个名为 k3s.carpie.net 的类型为 A 的记录(CloudFlare 已经假定了域的部分,因此我们只需输入 k3s),然后输入 198.51.100.42 作为 IPv4 地址。

请注意,有时 DNS 更新要传播一段时间。你可能需要几个小时才能解析该名称。在继续之前该名称必须可以解析。否则,我们所有的证书请求都将失败。

我们可以使用 dig 命令检查名称是否解析:

$ dig +short k3s.carpie.net
198.51.100.42

继续运行以上命令,直到可以返回 IP 才行。关于 CloudFlare 有个小注释:ClouldFlare 提供了通过代理流量来隐藏你的实际 IP 的服务。在这种情况下,我们取回的是 CloudFlare 的 IP,而不是我们的 IP。但对于我们的目的,这应该可以正常工作。

网络配置的最后一步是配置路由器,以将端口 80 和 443 上的传入流量路由到我们的 k3s 集群。可悲的是,路由器配置页面的差异很大,因此我无法确切地说明你的外观是什么样子。大多数时候,我们需要的管理页面位于“端口转发”或类似内容下。我甚至看到过它列在“游戏”之下(显然是端口转发主要用于的游戏)!让我们看看我的路由器的配置如何。

如果你和我的环境一样,则转到 192.168.0.1 登录到路由器管理应用程序。对于此路由器,它位于 “ NAT/QoS” -> “端口转发”。在这里,我们将端口 80/TCP 协议设置为转发到 192.168.0.50(主节点 kmaster 的 IP)的端口 80。我们还设置端口 443 也映射到 kmaster。从技术上讲,这对于质询来说并不是必需的,但是在本文的结尾,我们将部署一个启用 TLS 的网站,并且需要映射 443 来进行访问。因此,现在进行映射很方便。我们保存并应用更改,应该一切顺利!

配置 cert-manager 来使用 Let's Encrypt(暂存环境)

现在,我们需要配置 cert-manager 来通过 Let's Encrypt 颁发证书。Let's Encrypt 为我们提供了一个暂存(例如用于测试)环境,以便审视我们的配置。这样它更能容忍错误和请求的频率。如果我们对生产环境做了错误的操作,我们很快就会发现自己被暂时禁止访问了!因此,我们将使用暂存环境手动测试请求。

创建一个文件 letsencrypt-issuer-staging.yaml,内容如下:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # The ACME server URL
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: <your_email>@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-staging
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
          class: traefik

请确保将电子邮件地址更新为你的地址。如果出现问题或我们弄坏了一些东西,这就是 Let's Encrypt 与我们联系的方式!

现在,我们使用以下方法创建 发行者 issuer

kubectl apply -f letsencrypt-issuer-staging.yaml

我们可以使用以下方法检查发行者是否已成功创建:

kubectl get clusterissuers

clusterissuers 是由 cert-manager 创建的一种新的 Kubernetes 资源类型。

现在让我们手动请求一个测试证书。对于我们的网站,我们不需要这样做;我们只是在测试这个过程,以确保我们的配置正确。

创建一个包含以下内容的证书请求文件 le-test-certificate.yaml

apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: k3s-carpie-net
  namespace: default
spec:
  secretName: k3s-carpie-net-tls
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer
  commonName: k3s.carpie.net
  dnsNames:
  - k3s.carpie.net

该记录仅表示我们要使用名为 letsencrypt-staging(我们在上一步中创建的)的 ClusterIssuer 来请求域 k3s.carpie.net 的证书,并在 Kubernetes 的机密信息中名为 k3s-carpie-net-tls 的文件中存储该证书。

像平常一样应用它:

kubectl apply -f le-test-certificate.yaml

我们可以通过以下方式查看状态:

kubectl get certificates

如果我们看到类似以下内容:

NAME                    READY   SECRET                  AGE
k3s-carpie-net          True    k3s-carpie-net-tls      30s

我们走在幸福之路!(这里的关键是 READY 应该是 True)。

解决证书颁发问题

上面是幸福的道路。如果 READYFalse,我们可以等等它,然后再次花点时间检查状态。如果它一直是 False,那么我们就有需要解决的问题。此时,我们可以遍历 Kubernetes 资源链,直到找到一条告诉我们问题的状态消息。

假设我们执行了上面的请求,而 READYFalse。我们可以从以下方面开始故障排除:

kubectl describe certificates k3s-carpie-net

这将返回很多信息。通常,有用的内容位于 Events: 部分,该部分通常位于底部。假设最后一个事件是 Created new CertificateRequest resource "k3s-carpie-net-1256631848。然后我们 描述 describe 一下该请求:

kubectl describe certificaterequest k3s-carpie-net-1256631848

现在比如说最后一个事件是 Waiting on certificate issuance from order default/k3s-carpie-net-1256631848-2342473830

那么,我们可以描述该顺序:

kubectl describe orders default/k3s-carpie-net-1256631848-2342473830

假设有一个事件,事件为 Created Challenge resource "k3s-carpie-net-1256631848-2342473830-1892150396" for domain "k3s.carpie.net"。让我们描述一下该质询:

kubectl describe challenges k3s-carpie-net-1256631848-2342473830-1892150396

从这里返回的最后一个事件是 Presented challenge using http-01 challenge mechanism。看起来没问题,因此我们浏览一下描述的输出,并看到一条消息 Waiting for http-01 challenge propagation: failed to perform self check GET request ... no such host。终于!我们发现了问题!在这种情况下,no such host 意味着 DNS 查找失败,因此我们需要返回并手动检查我们的 DNS 设置,正确解析域的 DNS,并进行所需的任何更改。

清理我们的测试证书

我们实际上想要使用的是域名的真实证书,所以让我们继续清理证书和我们刚刚创建的机密信息:

kubectl delete certificates k3s-carpie-net
kubectl delete secrets k3s-carpie-net-tls

配置 cert-manager 以使用 Let's Encrypt(生产环境)

现在我们已经有了测试证书,是时候移动到生产环境了。就像我们在 Let's Encrypt 暂存环境中配置 cert-manager 一样,我们现在也需要对生产环境进行同样的操作。创建一个名为 letsencrypt-issuer-production.yaml 的文件(如果需要,可以复制和修改暂存环境的文件),其内容如下:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
 # The ACME server URL
  server: https://acme-v02.api.letsencrypt.org/directory
  # Email address used for ACME registration
  email: <your_email>@example.com
  # Name of a secret used to store the ACME account private key
  privateKeySecretRef:
    name: letsencrypt-prod
  # Enable the HTTP-01 challenge provider
  solvers:
  - http01:
      ingress:
        class: traefik

(如果要从暂存环境进行复制,则唯一的更改是 server: URL。也请不要忘记修改电子邮件!)

应用它:

kubectl apply -f letsencrypt-issuer-production.yaml

申请我们网站的证书

重要的是需要注意,我们到目前为止完成的所有步骤都只需要进行一次!而对于将来的任何其他申请,我们可以从这个说明开始!

让我们部署在上一篇文章中部署的同样站点。(如果仍然可用,则可以修改 YAML 文件。如果没有,则可能需要重新创建并重新部署它)。

我们只需要将 mysite.yamlIngress 部分修改为:

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mysite-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  rules:
  - host: k3s.carpie.net
    http:
      paths:
      - path: /
        backend:
          serviceName: mysite-nginx-service
          servicePort: 80
  tls:
  - hosts:
    - k3s.carpie.net
    secretName: k3s-carpie-net-tls

请注意,上面仅显示了 mysite.yamlIngress 部分。所做的更改是添加了注解 cert-manager.io/cluster-issuer: letsencrypt-prod。这告诉 traefik 创建证书时使用哪个发行者。 其他唯一增加的是 tls: 块。这告诉 traefik 我们希望在主机 k3s.carpie.net 上具有 TLS 功能,并且我们希望 TLS 证书文件存储在机密信息 k3s-carpie-net-tls 中。

请记住,我们没有创建这些证书!(好吧,我们创建了名称相似的测试证书,但我们删除了这些证书。)Traefik 将读取这些配置并继续寻找机密信息。当找不到时,它会看到注释说我们想使用 letsencrypt-prod 发行者来获取它。由此,它将提出请求并为我们安装证书到机密信息之中!

大功告成! 让我们尝试一下。

它现在具有了加密 TLS 所有优点!恭喜你!


via: https://opensource.com/article/20/3/ssl-letsencrypt-k3s

作者:Lee Carpenter 选题:lujun9972 译者:wxy 校对:wxy

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

将流量引入 Kubernetes 树莓派集群的分步指南。

在本文中,我们将部署几个简单的网站,并学习如何使用 Traefik 将来自外部世界的流量引入到我们的集群中。之后,我们还将学习如何删除 Kubernetes 资源。让我们开始吧!

准备

要继续阅读本文,你只需要我们在上一篇文章中构建的 k3s 树莓派集群。由于你的集群将从网络上拉取镜像,因此该集群需要能够访问互联网。

出于解释目的,本文将显示一些配置文件和示例 HTML 文件。所有示例文件都可以在此处下载。

部署一个简单的网站

之前,我们使用 kubectl 进行了直接部署。但是,这不是典型的部署方法。一般情况都会使用 YAML 配置文件,这也是我们要在本文中使用的配置文件。我们将从顶部开始,并以自顶向下的方式创建该配置文件。

部署配置

首先是部署配置。配置如下所示,并在下面进行说明。我通常以 Kubernetes 文档中的示例为起点,然后根据需要对其进行修改。例如,下面的配置是复制了部署文档中的示例后修改的。

创建一个文件 mysite.yaml,其内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysite-nginx
  labels:
    app: mysite-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysite-nginx
  template:
    metadata:
      labels:
        app: mysite-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

其中大部分是样板。重要的部分,我们会将该部署命名为 mysite-nginx,并为其加上同名的 app 标签。我们指定了一个 副本 replica ,这意味着将只创建一个 Pod。我们还指定了一个容器,我们将其命名为 nginx。我们将 镜像 image 指定为 nginx。这意味着在部署时,k3s 将从 DockerHub 下载 nginx 镜像并从中创建一个 Pod。最后,我们指定了 容器端口 containerPort 80,这只意味着在容器内部 Pod 会监听 80 端口。

我在上面强调了“在容器内部”,因为这是一个重要的区别。由于我们是按容器配置的,因此只能在容器内部访问它,并且进一步将其限制为内部网络。这对于允许多个容器在同一容器端口上监听所是必要的。换句话说,通过这种配置,其他一些 Pod 也可以在其容器端口 80 上侦听,并且不会与此容器冲突。为了提供对该 Pod 的正式访问权限,我们需要一个 服务 service 配置。

服务配置

在 Kubernetes 中, 服务 service 是一种抽象。它提供了一种访问 Pod 或 Pod 集合的方法。当连接到服务时,服务会路由到单个 Pod,或者如果定义了多个 Pod 副本,会通过负载均衡路由到多个 Pod。

可以在同一配置文件中指定该服务,这就是我们将在此处要做的。用 --- 分隔配置区域,将以下内容添加到 mysite.yaml 中:

---
apiVersion: v1
kind: Service
metadata:
  name: mysite-nginx-service
spec:
  selector:
    app: mysite-nginx
  ports:
    - protocol: TCP
      port: 80

在此配置中,我们将服务命名为 mysite-nginx-service。我们提供了一个 选择器 selector app: mysite-nginx。这是服务选择其路由到的应用程序容器的方式。请记住,我们为容器提供了 app 标签:mysite-nginx 。这就是服务用来查找我们的容器的方式。最后,我们指定服务协议为 TCP,在端口 80 上监听。

入口配置

入口 Ingress 配置指定了如何将流量从集群外部传递到集群内部的服务。请记住,k3s 预先配置了 Traefik 作为入口控制器。因此,我们将编写特定于 Traefik 的入口配置。将以下内容添加到 mysite.yaml 中(不要忘了用 --- 分隔):

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mysite-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: mysite-nginx-service
          servicePort: 80

在此配置中,我们将入口记录命名为 mysite-nginx-ingress。我们告诉 Kubernetes,我们希望 traefik 成为我们的入口控制器,再加上 kubernetes.io/ingress.class 的注解。

规则 rules 部分中,我们基本上是说,当 http 流量进入时,并且 path 匹配 /(或其下的任何内容),将其路由到由 serviceName mysite-nginx-service 指定的 后端 backend 服务中,并将其路由到 servicePort 80。这会将传入的 HTTP 流量连接到我们之前定义的服务。

需要部署的东西

就配置而言,就是这样了。如果我们现在部署,我们将获得默认的 nginx 页面,但这不是我们想要的。让我们创建一些简单但可自定义的部署方式。创建具有以下内容的文件 index.html

<html>
<head><title>K3S!</title>
  <style>
    html {
      font-size: 62.5%;
    }
    body {
      font-family: sans-serif;
      background-color: midnightblue;
      color: white;
      display: flex;
      flex-direction: column;
      justify-content: center;
      height: 100vh;
    }
    div {
      text-align: center;
      font-size: 8rem;
      text-shadow: 3px 3px 4px dimgrey;
    }
  </style>
</head>
<body>
  <div>Hello from K3S!</div>
</body>
</html>

我们尚未介绍 Kubernetes 中的存储机制,因此在这里我们偷懒一下,仅将该文件存储在 Kubernetes 配置映射中。这不是我们推荐的部署网站的方式,但对于我们的目的来说是可行的。运行以下命令:

kubectl create configmap mysite-html --from-file index.html

该命令从本地文件 index.html 创建名为 mysite-html 配置映射 configmap 资源。这实际上是在 Kubernetes 资源中存储一个文件(或一组文件),我们可以在配置中调出该文件。它通常用于存储配置文件(因此而得名),我们在这里稍加滥用。在以后的文章中,我们将讨论 Kubernetes 中适当的存储解决方案。

创建配置映射后,让我们将其挂载在我们的 nginx 容器中。我们分两个步骤进行。首先,我们需要指定一个 volume 来调出配置映射。然后我们需要将该卷挂载到 nginx 容器中。通过在 mysite.yaml 中的 container 后面的 spec 标签下添加以下内容来完成第一步:

      volumes:
      - name: html-volume
        configMap:
          name: mysite-html

这告诉 Kubernetes 我们要定义一个名为 html-volume 的卷,并且该卷应包含名为 html-volume(我们在上一步中创建的)的配置映射的内容。

接下来,在 nginx 容器规范中的 端口 ports 下方,添加以下内容:

        volumeMounts:
        - name: html-volume
          mountPath: /usr/share/nginx/html

这告诉 Kubernetes,对于 nginx 容器,我们想在容器中的 /usr/share/nginx/html 路径上挂载名为 html-volume 的卷。 为什么要使用 /usr/share/nginx/html?那个位置就是 nginx 镜像提供 HTML 服务的地方。通过在该路径上挂载卷,我们用该卷内容替换了默认内容。

作为参考,配置文件的 deployment 部分现在应如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysite-nginx
  labels:
    app: mysite-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysite-nginx
  template:
    metadata:
      labels:
        app: mysite-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html-volume
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html-volume
        configMap:
          name: mysite-html

部署它!

现在我们准备部署! 我们可以这样做:

kubectl apply -f mysite.yaml

你应该看到类似于以下内容:

deployment.apps/mysite-nginx created
service/mysite-nginx-service created
ingress.networking.k8s.io/mysite-nginx-ingress created

这意味着 Kubernetes 为我们指定的三个配置分别创建了资源。使用以下方法检查 Pod 的状态:

kubectl get pods

如果看到状态为 ContainerCreating,请给它一些时间并再次运行 kubectl get pods。通常,第一次会花一些时间,因为 k3s 必须下载 nginx 镜像来创建 Pod。一段时间后,你应该看到 Running 的状态。

尝试一下!

Pod 运行之后,就该尝试了。打开浏览器,然后在地址栏中输入 kmaster

恭喜你!你已经在 k3s 集群上部署了一个网站!

另一个

因此,现在我们有了一个运行单个网站的整个 k3s 集群。但是我们可以有更多的网站!如果我们要在同一集群中提供另一个网站怎么办?让我们看看如何做到这一点。

同样,我们需要部署一些东西。碰巧我的狗有一条她想让全世界都知道的信息,她想了好久了。因此,我专门为她制作了一些 HTML(可从示例 zip 文件中获得)。同样,我们将使用配置映射的技巧来托管这些 HTML。这次我们将把整个目录(html 目录)放到配置映射中,但是调用是相同的。

kubectl create configmap mydog-html --from-file html

现在,我们需要为此站点创建一个配置文件。它几乎与用于 mysite.yaml 的完全相同,因此首先将 mysite.yaml 复制为 mydog.yaml。现在将 mydog.yaml 修改为:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mydog-nginx
  labels:
    app: mydog-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mydog-nginx
  template:
    metadata:
      labels:
        app: mydog-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html-volume
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html-volume
        configMap:
          name: mydog-html
---
apiVersion: v1
kind: Service
metadata:
  name: mydog-nginx-service
spec:
  selector:
    app: mydog-nginx
  ports:
    - protocol: TCP
      port: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mydog-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
    traefik.frontend.rule.type: PathPrefixStrip
spec:
  rules:
  - http:
      paths:
      - path: /mydog
        backend:
          serviceName: mydog-nginx-service
          servicePort: 80

我们只需进行搜索并将 mysite 替换为 mydog即可完成大多数修改。其他两个修改在入口部分中。我们将 path 更改为 /mydog,并添加了一个注解 traefik.frontend.rule.type: PathPrefixStrip

/mydog 路径的规范指示 Traefik 将以 /mydog 路径开头的所有传入请求路由到 mydog-nginx-service。任何其他路径将继续路由到 mysite-nginx-service

新的注解 PathPrefixStrip 告诉 Traefik 在将请求发送到 mydog-nginx-service 之前先去除前缀 /mydog。我们这样做是因为 mydog-nginx 应用程序不需要前缀。这意味着我们可以简单地通过更改入口记录中的前缀来更改挂载的服务的位置。

现在我们可以像以前一样进行部署:

kubectl apply -f mydog.yaml

现在,我的狗的消息应该可以在 http://kmaster/mydog/ 上找到。

呼!消息发出去了!也许今晚我们都可以睡一觉。

因此,现在,我们有了一个 k3s 集群,该集群托管了两个网站,Traefik 根据路径名决定将请求传递给哪个服务!但是,不仅限于基于路径的路由,我们也可以使用基于主机名的路由,我们将在以后的文章中进行探讨。

另外,我们刚刚托管的网站是标准的未加密 HTML 网站,而如今的所有内容都使用 SSL/TLS 加密。在我们的下一篇文章中,我们将为 k3s 集群添加支持以托管 SSL/TLS HTTPS 站点!

清理

在开始之前,由于本文主要涉及的是示例站点,因此我想向你展示如何删除内容,以防万一你不希望将这些示例丢在集群中。

对于大多数配置,只需使用与部署时使用的相同配置文件运行 delete 命令即可撤消配置。因此,让我们同时清理 mysitemydog

kubectl delete -f mysite.yaml
kubectl delete -f mydog.yaml

由于我们是手动创建配置映射的,因此我们也需要手动删除它们。

kubectl delete configmap mysite-html
kubectl delete configmap mydog-html

现在,如果我们执行 kubectl get pods,我们应该看到我们的 nginx Pod 不存在了。

$ kubectl get pods
No resources found in default namespace.

一切都清理了。

请在下面的评论中告诉我你对这个项目有什么想法。


via: https://opensource.com/article/20/3/kubernetes-traefik

作者:Lee Carpenter 选题:lujun9972 译者:wxy 校对:wxy

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

跟随接下来的介绍,自己搭建一个三节点的 Kubernetes 集群。

我对在树莓派上搭建 Kubernetes 集群已经感兴趣很长时间了,只要照着网上的教程,我可以在由三个树莓派组成的集群中搭建一套 Kubernetes 并正常运行。但在这种情况下,主节点上的内存和 CPU 资源捉襟见肘,执行 Kubernetes 任务的时候往往性能不佳,想要升级 Kubernetes 就更不可能了。

这个时候,我非常激动地发现了 K3s 这个项目。K3s 被誉为在可用于资源受限环境下的轻量级 Kubernetes,它还针对 ARM 处理器做出了优化,这让 Kubernetes 集群可以在树莓派上运行得更好。在下文中,我们将会使用 K3s 来创建一个 Kubernetes 集群。

准备

要按照本文介绍的方式创建 Kubernetes 集群,首先需要准备:

  • 至少一个树莓派(包括 SD 卡和电源)
  • 网线
  • 将所有树莓派连接到一起的交换机或路由器

我们会通过在线安装的方式安装 K3s,因此还需要可以连接到互联网。

集群概览

在这个集群里,我们会使用三个树莓派。其中一个树莓派作为主节点,我们将它命名为 kmaster,并为其分配一个静态 IP 192.168.0.50(注:假设使用的私有网段是 192.168.0.0/24),而另外两个树莓派作为工作节点,分别命名为 knode1knode2,也分别分配 192.168.0.51192.168.0.52 两个 IP 地址。

当然,如果你实际的网络布局和上面不同,只要将文中所提及到的 IP 替换成你实际可用的 IP 就可以了。

为了不需要通过 IP 来引用某一个节点,我们将每个节点的主机名记录到 PC 的 /etc/hosts 文件当中:

echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hosts
echo -e "192.168.0.51\tknode1" | sudo tee -a /etc/hosts
echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts

部署主节点

我们首先部署主节点。最开始的步骤当然是使用镜像安装最新的 Raspbian,这个步骤可以参考我的另一篇文章,在这里就不展开介绍了。在安装完成之后,启动 SSH 服务,将主机名设置为 kmaster,然后分配静态 IP 192.168.0.50

在主节点上安装 Raspbian 完成后,启动树莓派并通过 ssh 连接上去:

ssh pi@kmaster

在主节点上执行以下命令安装 K3s:

curl -sfL https://get.k3s.io | sh -

等到命令跑完以后,一个单节点集群就已经运行起来了。让我们检查一下,还在这个树莓派上执行:

sudo kubectl get nodes

就会看到这样的输出:

NAME     STATUS   ROLES    AGE    VERSION
kmaster  Ready    master   2m13s  v1.14.3-k3s.1

获取 连接令牌 join token

之后我们需要部署工作节点。在工作节点上安装 K3s 的时候,会需要用到连接令牌,它放置在主节点的文件系统上。首先把连接令牌保存出来以便后续使用:

sudo cat /var/lib/rancher/k3s/server/node-token

部署工作节点

通过 SD 卡在每个作为工作节点的树莓派上安装 Raspbian。在这里,我们把其中一个树莓派的主机名设置为 knode1,为其分配 IP 地址 192.168.0.51,另一个树莓派的主机名设置为 knode2,分配 IP 地址 192.168.0.52。接下来就可以安装 K3s 了。

启动主机名为 knode1 的树莓派,通过 ssh 连接上去:

ssh pi@knode1

在这个树莓派上,安装 K3s 的过程和之前差不多,但需要另外加上一些参数,表示它是一个工作节点,需要连接到一个已有的集群上:

curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=刚才保存下来的连接令牌 sh -

K3S_TOKEN 的值需要替换成刚才保存下来的实际的连接令牌。完成之后,在主机名为 knode2 的树莓派上重复这个安装过程。

通过 PC 访问集群

现在如果我们想要查看或者更改集群,都必须 ssh 到集群的主节点才能使用 kubectl,这是比较麻烦的。因此我们会将 kubectl 放到 PC 上使用。首先,在主节点上获取一些必要的配置信息,sshkmaster 上执行:

sudo cat /etc/rancher/k3s/k3s.yaml

复制上面命令的输出,然后在你的 PC 上创建一个目录用来放置配置文件:

mkdir ~/.kube

将复制好的内容写入到 ~/.kube/config 文件中,然后编辑该文件,将

server: https://localhost:6443

改为

server: https://kmaster:6443

出于安全考虑,只对自己保留这个配置文件的读写权限:

chmod 600 ~/.kube/config

如果 PC 上还没有安装 kubectl 的话,就可以开始安装了。Kubernetes 官方网站上有各种平台安装 kubectl方法说明,我使用的是 Ubuntu 的衍生版 Linux Mint,所以我的安装方法是这样的:

sudo apt update && sudo apt install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install kubectl

上面几个命令的作用是添加了一个包含 Kubernetes 的 Debian 软件库,获取 GPG 密钥以确保安全,然后更新软件包列表并安装 kubectl。如果 kubectl 有更新,我们将会通过 标准软件更新机制 standard software update mechanism 收到通知。

现在在 PC 上就可以查看 Kubernetes 集群了:

kubectl get nodes

输出大概会是这样:

NAME     STATUS  ROLES   AGE   VERSION
kmaster  Ready   master  12m   v1.14.3-k3s.1
knode1   Ready   worker  103s  v1.14.3-k3s.1
knode1   Ready   worker  103s  v1.14.3-k3s.1

至此,我们已经搭建了一个三节点的 Kubernetes 集群。

K3s 的彩蛋

如果执行 kubectl get pods --all-namespaces,就会看到其它服务的一些 Pod,比如 Traefik。Traefik 在这里起到是反向代理和负载均衡器的作用,它可以让流量从单个入口进入集群后引导到集群中的各个服务。Kubernetes 支持这种机制,但 Kubernetes 本身不提供这个功能,因此 Traefik 是一个不错的选择,K3s 安装后立即可用的优点也得益于此。

在后续的文章中,我们会继续探讨 Traefik 在 Kubernetes ingress 中的应用,以及在集群中部署其它组件。敬请关注。


via: https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s

作者:Lee Carpenter 选题:lujun9972 译者:HankChow 校对:wxy

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