2023年3月

Terraform 是一种声明性语言,可以作为你正在建设的基础设施的蓝图。

在拥有一个 OpenStack 生产环境和家庭实验室一段时间后,我可以肯定地说,从管理员和租户的角度置备工作负载和管理它是很重要的。

Terraform 是一个开源的基础设施即代码(IaC)软件工具,用于 置备 provisioning 网络、服务器、云平台等。Terraform 是一种声明性语言,可以作为你正在建设的基础设施的蓝图。你可以用 Git 来管理它,它有一个强大的 GitOps 使用场景。

本文介绍了使用 Terraform 管理 OpenStack 集群的基础知识。我使用 Terraform 重新创建了 OpenStack 演示项目。

安装 Terraform

我使用 CentOS 作为跳板机运行 Terraform。根据官方文档,第一步是添加 Hashicorp 仓库:

$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

接下来,安装 Terraform:

$ sudo dnf install terraform -y

验证安装:

$ terraform –version

如果你看到返回的版本号,那么你已经安装了 Terraform。

为 OpenStack 提供者创建一个 Terraform 脚本

在 Terraform 中,你需要一个 提供者 provider ,它是一个转换器,Terraform 调用它将你的 .tf 转换为对你正在协调的平台的 API 调用。

有三种类型的提供者:官方、合作伙伴和社区:

  • 官方提供者由 Hashicorp 维护。
  • 合作伙伴提供者由与 Hashicorp 合作的技术公司维护。
  • 社区提供者是由开源社区成员维护的。

在这个 链接 中有一个很好的 OpenStack 的社区提供者。要使用这个提供者,请创建一个 .tf 文件,并命名为 main.tf

$ vi main.tf

main.tf 中添加以下内容:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “OS_USERNAME”
  tenant_name = “OS_TENANT”
  password    = “OS_PASSWORD”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

你需要修改 OS_USERNAMEOS_TENANTOS_PASSWORDOS_AUTH_URLOS_REGION 变量才能工作。

创建一个 Terraform 管理文件

OpenStack 管理文件的重点是置备外部网络、路由、用户、镜像、租户配置文件和配额。

此示例提供风格,连接到外部网络的路由、测试镜像、租户配置文件和用户。

首先,为置备资源创建一个 AdminTF 目录:

$ mkdir AdminTF

$ cd AdminTF

main.tf 中,添加以下内容:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “OS_USERNAME”
  tenant_name = “admin”
  password    = “OS_PASSWORD”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

resource "openstack_compute_flavor_v2" "small-flavor" {
  name      = "small"
  ram       = "4096"
  vcpus     = "1"
  disk      = "0"
  flavor_id = "1"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "medium-flavor" {
  name      = "medium"
  ram       = "8192"
  vcpus     = "2"
  disk      = "0"
  flavor_id = "2"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "large-flavor" {
  name      = "large"
  ram       = "16384"
  vcpus     = "4"
  disk      = "0"
  flavor_id = "3"
  is_public = "true"
}

resource "openstack_compute_flavor_v2" "xlarge-flavor" {
  name      = "xlarge"
  ram       = "32768"
  vcpus     = "8"
  disk      = "0"
  flavor_id = "4"
  is_public = "true"
}

resource "openstack_networking_network_v2" "external-network" {
  name           = "external-network"
  admin_state_up = "true"
  external       = "true"
  segments {
    network_type     = "flat"
    physical_network = "physnet1"
  }
}

resource "openstack_networking_subnet_v2" "external-subnet" {
  name            = "external-subnet"
  network_id      = openstack_networking_network_v2.external-network.id
  cidr            = "10.0.0.0/8"
  gateway_ip      = "10.0.0.1"
  dns_nameservers = ["10.0.0.254", "10.0.0.253"]
  allocation_pool {
    start = "10.0.0.1"
    end   = "10.0.254.254"
  }
}

resource "openstack_networking_router_v2" "external-router" {
  name                = "external-router"
  admin_state_up      = true
  external_network_id = openstack_networking_network_v2.external-network.id
}

resource "openstack_images_image_v2" "cirros" {
  name             = "cirros"
  image_source_url = "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img"
  container_format = "bare"
  disk_format      = "qcow2"

  properties = {
    key = "value"
  }
}

resource "openstack_identity_project_v3" "demo-project" {
  name = "Demo"
}

resource "openstack_identity_user_v3" "demo-user" {
  name               = "demo-user"
  default_project_id = openstack_identity_project_v3.demo-project.id
  password = "demo"
}

创建一个租户 Terraform 文件

作为一个 租户 Tenant ,你通常会创建虚拟机。你还为这些虚拟机创建网络和安全组。

这个例子使用上面由 Admin 文件创建的用户。

首先,创建一个 TenantTF 目录,用于与租户相关的置备:

$ mkdir TenantTF
$ cd TenantTF

main.tf 中,添加以下内容:

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "1.49.0"
    }
  }
}

provider "openstack" {
  user_name   = “demo-user”
  tenant_name = “demo”
  password    = “demo”
  auth_url    = “OS_AUTH_URL”
  region      = “OS_REGION”
}

resource "openstack_compute_keypair_v2" "demo-keypair" {
  name       = "demo-key"
  public_key = "ssh-rsa ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
}


resource "openstack_networking_network_v2" "demo-network" {
  name           = "demo-network"
  admin_state_up = "true"
}

resource "openstack_networking_subnet_v2" "demo-subnet" {
  network_id = openstack_networking_network_v2.demo-network.id
  name       = "demo-subnet"
  cidr       = "192.168.26.0/24"
}

resource "openstack_networking_router_interface_v2" "demo-router-interface" {
  router_id = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
  subnet_id = openstack_networking_subnet_v2.demo-subnet.id
}

resource "openstack_compute_instance_v2" "demo-instance" {
  name            = "demo"
  image_id        = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
  flavor_id       = "3"
  key_pair        = "demo-key"
  security_groups = ["default"]

  metadata = {
    this = "that"
  }

  network {
    name = "demo-network"
  }
}

初始化你的 Terraform

创建 Terraform 文件后,你需要初始化 Terraform。

对于管理员:

$ cd AdminTF

$ terraform init

$ terraform fmt

对于租户:

$ cd TenantTF

$ terraform init

$ terraform fmt

命令解释:

  • terraform init 从镜像源下载提供者用于置备此项目。
  • terraform fmt 格式化文件,以便在仓库中使用。

创建一个 Terraform 计划

接下来,为你创建一个 计划 plan ,看看将创建哪些资源。

对于管理员:

$ cd AdminTF

$ terraform validate

$ terraform plan

对于租户:

$ cd TenantTF

$ terraform validate

$ terraform plan

命令解释:

  • terraform validate 验证 .tf 语法是否正确。
  • terraform plan 在缓存中创建一个计划文件,所有管理的资源在创建和销毁时都可以被跟踪。

应用你的第一个 TF

要部署资源,使用 terraform apply 命令。该命令应用计划文件中的所有资源状态。

对于管理员:

$ cd AdminTF

$ terraform apply

对于租户:

$ cd TenantTF

$ terraform apply

接下来的步骤

之前,我写了一篇关于在树莓派上部署最小 OpenStack 集群的 文章。你可以找到更详细的 Terraform 和 Ansible 配置,并通过 GitLab 实现一些 CI/CD。


via: https://opensource.com/article/23/1/terraform-manage-openstack-cluster

作者:AJ Canlas 选题:lkxed 译者:geekpi 校对:wxy

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

用于 macOS(如果你需要的话,也包括 Linux)的附加软件包管理器。

如果你在 Mac 上的终端窗口工作,Homebrew 是一个方便的工具,它可以让你快速、轻松地安装广泛的 FOSS 世界中各种熟悉的工具。

这个附加的软件包管理器不需要超级用户权限,可以将程序安装到你的主目录中:它 “对 macOS 的作用就像 apt-get 对 Debian 的作用”。新版本 4.0.0 比以前更快,特别是在更新过程中。自动更新现在每天运行一次,而不是像 3.6 版那样每 5 分钟一次。虽然支持各种 Linux 发行版 —— 其基本要求非常宽松,内核 3.2 或更新版本,以及 Glibc 2.13 或更新版本 —— 但新版本不再正式支持 WSL1。

 title=

Homebrew 团队合影,包括 “冒泡啤酒” —— 项目负责人 Mike McQuaid

尽管 macOS 有 FOSS 的 基础,但苹果公司的产品是针对 Mac 用户设计的,他们倾向于生活在一个图形化的、点击式的世界里。这可能会让来自 Linux 的移民感到困惑:尽管 Mac 的终端环境继承了很多表面上看起来熟悉的来自 FreeBSD 的工具,但它们往往是过时的版本,或者有细微的不同。Linux 用户期望能够仅仅通过 apt 安装 python-3.11 或类似的工具。

这正是 Homebrew 被设计来解决的问题:安装 Homebrew 包,然后你输入 brew install [email protected] 就可以了。而且,至关重要的是,如果你在 macOS 上安装一个新版本的 Python,你可能会破坏操作系统的其他部分,而使用 Homebrew,你安装的任何东西都是你自己的 —— 它不会影响整个操作系统,也不会影响任何其他用户。

Homebrew 最初是为 macOS 建立的,但事实证明这个概念对 Linux 用户也很有用。你可能没有机器的 root 权限 —— 或者即使你有,那也可能只让你安装古老的版本,这些版本没有什么帮助,但你不能轻易更新。

该项目负责人 Mike McQuaid —— 当 Reg FOSS 部门的人在 FOSDEM 上见到他时,他正 穿着 华丽的衣服,像一杯冒泡的啤酒 —— 告诉我们:

Linux 上的 Homebrew 曾经是一个被称为 “Linuxbrew” 的独立复刻。但随着时间的推移,到了如今这些努力和我们已经完全是一个项目了,共享我们的团队和基础设施等等。

它最初的用途是在高端生物信息学机器上,用户没有 root 权限来使用系统的软件包管理器,但想在该机器上从软件包管理器安装新的软件。

以前独立的 Linuxbrew 复刻早在 2019 年就被 并入 了主项目的 1.9 版本。McQuaid 解释说,Homebrew 项目一些特异的 术语,例如,“ 酒桶 cask ” 和 “ 水龙头 tap ”,都源自于合并的各种项目:

Homebrew Cask 是一个独立的项目(现在基本上已经统一),允许 Homebrew 用于安装闭源软件的上游二进制包(相比之下,我们的主仓库 homebrew-core 只允许我们从源头构建自己的二进制的开源软件),例如 Chrome、Firefox 等。

Homebrew 的 “我们从源代码构建” 的描述文件被称为 “ 配方 formulae ”,我们用它构建我们的二进制包,“ 瓶子 bottle ”。

Homebrew 的 “分发上游二进制文件” 的描述文件被称为 “ 酒桶 cask ”。

Homebrew 也可以在 Windows 10 或 11 上的 WSL 内工作,尽管在版本 4 中只支持 WSL2。它支持 Debian 和 Red Hat 家族的发行版,包括 Ubuntu、CentOS 和 RHEL,可以运行在 x86-64 和 Arm 32/64 机器上。


via: https://www.theregister.com/2023/02/27/homebrew_version_4_is_here/

作者:Liam Proven 译者:wxy 校对:wxy

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

Safari 将爆发性地带来 135 项功能

苹果即将发布的 Safari 16.4 及其 WebKit 引擎将带来重大更新,如支持主屏幕 Web 应用的网络推送通知、可构建的 CSS 样式表对象、声明式影子 DOM、iFrame 延迟加载、新的 JavaScript 导入地图功能、WASM SIMD 支持等等。这些都是很大的变化,在一定程度上缓解了开发者对 Safari 成为新 IE 的担忧。为什么苹果现在要在网络技术方面加大投入呢?这可能与欧盟数字市场法案有关,该法案可能要求苹果允许第三方浏览器在 iOS 上使用 WebKit 之外的引擎,以及要求允许从第三方应用商店侧载应用。

消息来源:Dev Class
老王点评:苹果对实施网络技术犹豫不决的可能原因是,它有助于确保 iOS 的应用程序由应用商店提供。现在面临法案管理,才一口气发出这么多的功能。

Meta 发布能运行在单张显卡上的大语言模型

Meta 上周宣布了一个新的大语言模型 LLaMA-13B,称其参数规模更小但性能强于 OpenAI 的 GPT-3 模型,且它能运行在单张显卡上。LLaMA 语言模型的规模从 70 亿到 650 亿参数,而 OpenAI GPT-3 模型有 1750 亿个参数。Meta 使用 Common Crawl、维基百科和 C4 等公开数据集训练其模型。LLaMA-13B 模型在多项基准测试中的性能超过了 GPT-3。GPT-3 等模型需要数据中心规模的计算能力进行处理,而 LLaMA-13B 能运行在单张显卡上。

此外,Nebuly AI 推出了首个基于人类反馈强化学习的 LLaMA AI 聊天机器人开源实现 ChatLLaMA

消息来源:Facebook
老王点评:在新的 AI 军备竞赛中,AI 技术将得到空前的发展,变化将可能令人目不暇接。

未来的福特汽车可能会自动跑路

福特公司申请了一项专利“收回车辆的系统和方法”。该专利详细描述了几种方法,使那些错过了几次汽车付款的人的生活更加艰难。该系统可以安装在汽车制造商未来任何有数据连接的车辆上,能够禁用“车辆的一个或多个部件的功能”,从发动机到空调等一切。对于具有自主或半自主驾驶能力的车辆,该系统可以 “将车辆从第一地点移动到更便于拖车拖曳的第二地点……诸如收回机构的场所”,或者,如果贷款机构认为 “执行收回程序的财务可行性” 不合理,车辆可以自己开到垃圾场。

消息来源:The Drive
老王点评:从汽车联网支持订阅的那一天起,它就越来越能作妖了。