使用网真改进微服务开发

什么是远程呈现?

Telepresence 最初由 Datawire 开发,是 CNCF 支持的新开源工具(Cloud 本机计算基金会)。 它允许开发人员在连接到远程 Kubernetes 集群时运行本地软件。 该应用程序使用双向网络代理将 TCP 连接、环境变量和其他服务量模拟为本地进程。 此链接允许通过代理连接在集群本地完成远程工作。

该软件允许开发人员:

  • 即使我们正在处理的本地服务依赖于我们集群的其他远程服务,也可以提高开发速度。
  • 利用本地工具来测试、编辑或调试服务。
  • 允许本地计算机像 Kubernetes 集群的一部分一样运行。

为什么要使用网真?

假设我们有一个远程服务来监听 端口 8080 使用 Dockerfile。 此 Dockerfile 构建到名为 examplecom/servicename 的映像中。 此外,我们的服务依赖于其他 Kubernetes 服务实例(称为 thing1 和 thing2)和基于云的数据库。

我们的 Kubernetes 暂存环境将如下所示:

归功于: 远程呈现.io

由于我们需要基于云的数据库和两个附加服务来测试我们的软件,因此我们需要完成以下任务来检查代码更改:

  1. 在本地更改我们的代码。
  2. 根据该更改构建 Docker 映像。
  3. 将 Docker 映像推送到位于云中的 Docker 注册表。
  4. 更新集群登台环境以使用新映像。
  5. 等待图像下载。
分期2

归功于: 远程呈现.io

Telepresence 通过在本地运行我们的代码(作为典型进程)来缓解此过程中固有的迟缓,然后将这些请求转发到/来自 Kubernetes 集群。

分期3

归功于: 远程呈现.io

这个应用程序提高了开发速度。 我们只需要更改我们的代码并重新启动我们的流程。 此外,由于多个 Web 开发框架会自动重新加载代码,因此我们不需要重新启动该过程。

安装网真

Telepresence 在多个操作系统上都有本地包,包括 macOS X 和各种 Linux 发行版。

苹果电脑操作系统

要在 macOS X 上安装网真,请运行以下命令。

 root@host:~# brew cask install osxfuse
 root@host:~# brew install datawire/blackbird/telepresence 

Debian/Ubuntu

要在 Ubuntu 服务器上安装 Telepresence,请运行以下命令。

root@host:~# curl -s https://packagecloud.io/install/repositories/datawireio/telepresence/script.deb.sh | sudo bash

如果使用安装了 Python 3.5 的基于 Debian 的发行版,并且它作为 蟒蛇3 命令,文档说明我们可以使用 Ubuntu 16.04 (Xenial) 软件包。 以下安装过程适用于 Linux Mint 18.2 (Sonya) 和 Debian 9 (Stretch)。 这些命令强制 PackageCloud 安装程序访问 Ubuntu 16.04 软件包。

root@host:~# curl -sO https://packagecloud.io/install/repositories/datawireio/telepresence/script.deb.sh
root@host:~# env os=ubuntu dist=xenial bash script.deb.sh
root@host:~# apt install --no-install-recommends telepresence
root@host:~# rm script.deb.sh 

类似的方法可能适用于使用 Ubuntu 17.10 包运行 Python 3.6 的基于 Debian 的发行版。

CentOS/Fedora

在 CentOS 8 服务器上,我们可以使用这些命令安装软件。

root@host:~# curl -s https://packagecloud.io/install/repositories/datawireio/telepresence/script.rpm.sh | sudo bash
root@host:~# dnf install telepresence 

CentOS 7

对于 CentOS 7,可以使用以下脚本来使用其他方法。

源安装

对于源安装,我们可以使用 Git 在本地克隆软件。 在运行 Python 3.5+ 的系统上,我们可以将软件安装到我们的 /usr/local/share/远程呈现 文件夹,然后将二进制文件复制到 /usr/local/bin 通过运行以下命令。

root@host:~# mkdir /usr/local/share/telepresence
root@host:~# cd /usr/local/share/telepresence
root@host:~# git clone https://github.com/telepresenceio/telepresence.git
root@host:~# env PREFIX=/usr/local ./install.sh 

依赖项

接下来,我们必须安装依赖项以完成该过程。 如果使用预构建的软件包之一安装 Telepresence,则依赖项(kubectl 除外)由软件包管理器处理,因此这些选项是首选的安装方法。 如果我们进行源安装,我们还需要安装以下软件:

  • kubectl(OpenShift 用户可以使用 oc)。
  • Python 3.5 或更新版本。
  • OpenSSH(ssh 命令)。
  • sshfs 挂载 pod 的文件系统。
  • Linux 上的 conntrack 和 iptables 用于 vpn-tcp 方法。
  • 躯干 注入-tcp 方法。
  • Docker 用于容器方法。
  • sudo 允许 Telepresence:
    • 修改本地网络(通过 sshuttle 和 pf/iptables) vpn-tcp 方法。
    • 在 Linux 上的某些配置中运行 docker 命令。
    • 在 Docker 容器中挂载远程文件系统以进行访问。

如果需要,可以通过在调用安装脚本之前调整环境变量来将软件安装在不同的位置。 查看下面的脚本以获取更多具体信息。

安装后,我们可以删除源代码。

连接到集群

我们的下一个任务涉及将软件连接到我们的集群。 为此,我们需要在集群内运行代理。 有三种方法可以执行此操作。

方法 1:创建新部署

该方法涉及使用 –新部署 选项,它允许网真为我们创建新的部署。 需要注意的是,当本地智真进程结束时,该连接将被删除。 如果未指定默认值,则此框架是典型的部署方法。

以下命令创建一个名为 mylw 的部署。

root@local:~# telepresence --new-deployment mylw --run-shell

此命令创建两个 Kubernetes 对象,均名为 mylw:

  • 部署
  • 服务

如果我们选择不命名 Deployment,我们使用以下命令。

root@host:~# telepresence --run-shell

如果远程呈现严重崩溃(例如,您使用了 kill -9),您将需要删除 部署与服务 Telepresence 创建的对象。

方法 2:交换现有部署

如果我们已经在集群中运行了我们的代码,我们可以使用 –交换部署 使用 Telepresence 代理重建现有部署。 当 Telepresence 进程退出时,它会恢复 Deployment 的早期状态。

root@host:~# telepresence --swap-deployment mylw --run-shell

如果我们在部署创建的 Pod 中有多个容器,我们还可以指定容器名称:

root@host:~# telepresence --swap-deployment mylw:newname --run-shell

如果远程呈现严重崩溃(例如,您使用了 kill -9),您将需要手动恢复部署。

方法三:手动运行网真

最后,我们可以通过启动在 Pod 中运行代理的 Deployment 来手动运行 Telepresence 软件。 Deployment 应该只有一个副本并使用不同的 Telepresence 映像。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myservice
spec:
  replicas: 1 # only one replica
  template:
    metadata:
      labels:
        name: myservice
    spec:
      containers:
      - name: myservice
        image: datawire/telepresence-k8s:0.108 # new image

我们还应该通过 kubectl 命令将此文件添加到我们的集群中。

root@host:~# kubectl apply -f telepresence-deployment.yaml

现在,我们需要在您的机器上运行本地 Telepresence 客户端,使用 –部署 标明名称的标志 部署 pod 正在运行的对象 远程呈现/datawire-k8s

root@host:~# telepresence --deployment mylw --run-shell

这样一来,Telepresence 会在部署退出时保持原样。

结论

Telepresence 是开发人员与远程系统进行本地交互的一种新的创新方法。 它使用双向网络代理将 TCP 连接、环境变量和其他服务量模拟为本地进程。 我们可以对远程服务进行本机反应,因此可以像在集群内的普通 pod 中修改代码一样访问代码。 最后,它使我们能够快速实施变更,从而提高开发周期的整体速度。 Telepresence 是根据 Apache 2.0 许可证。