UMBRELLA

未雨绸缪,举重若轻

Kubernetes(简称:k8s) 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的 workflows 和更高级的自动化任务。

Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力服务滚动升级和在线扩容可扩展的资源自动调度机制、多粒度的资源配额管理能力。Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

Kubernetes是一个分布式服务,所有从架构上可以为Control Plane(Master) Node 和Worker Node,这也是分布式架构的主要特点。

阅读全文 »

获取示例应用

克隆示例应用程序以与本指南一起使用。打开终端,将目录更改为您要工作的目录,然后运行以下命令来克隆存储库:

1
$ git clone https://github.com/docker/docker-rust-hello
为 Rust 创建 Dockerfile

现在您已经有了一个应用程序,您可以docker init为其创建一个 Dockerfile。在docker-rust-hello目录中,运行docker init命令。请参阅以下示例来回答 中的提示docker init

阅读全文 »

昨天我在处理项目时我尝试使用 git pull 命令从远程分支中拉取更改的内容,但最终报错:"fatal: Need to specify how to reconcile divergent branches", 这阻碍了我的工作。我决定写一篇关于这个问题的文章,以便它也能帮助你们。

解决了“reconcile divergent branches”

如果您使用 Git,那么在尝试从远程存储库执行 git pull 时出现此错误并不罕见。虽然大多数时候您会看到"fatal: Need to specify how to reconcile divergent branches"警告,但有时您会看到它是致命错误。如果错误显示为警告,那么您仍然可以从存储库中提取更改,但如果它显示为致命错误,那么您将无法继续进行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git pull origin main
*branch dev -> FETCH_HEAD
提示:您有不同的分支,需要指定如何协调它们。
提示:您可以通过在提示之前运行以下命令之一来完成此操作
:您的下一个拉取:
提示:
提示:git config pull.rebase false#合并
提示:git config pull.rebase true#rebase
提示:git config pull.ff only # 仅快进
提示:
提示:您可以将“git config”替换为“git config --global”以设置默认
提示:所有存储库的首选项。您还可以传递 --rebase, --no-rebase,
在命令行上提示:或 --ff-only 以覆盖每个
提示:调用配置的默认值。fatal:需要指定如何协调不同的分支。
阅读全文 »

什么是容器?

简而言之,容器是计算机的沙盒进程,与主机上的所有其他进程隔离,这种隔离利用了内核命名空间和cgroup,这些功能在linux中已经存在很长时间了。Docker正是利用了这些能力。总而言之,容器包括以下这些能力:

  • 是一个可运行的镜像实例,你可以使用Docker APICLI创建、启动、停止、移动或删除容器。
  • 可以在本地机器、虚拟机、云上部署和运行。
  • 是跨平台并且可移植的。
  • 与其他容器隔离运行自己的应用、二进制文件以及配置。

什么是容器镜像?

运行容器时,它使用隔离的文件系统。该自定义文件系统由容器镜像提供。由于镜像包含容器的文件系统,因此它必须包含运行应用程序所需的所有内容-所有依赖项、配置、脚本、二进制文件等。镜像还包含容器的其它配置,例如环境变量、要运行的默认命令和其它元数据。

将应用程序在容器中部署

准备工作

  • 在机器上下载&安装Docker
  • 在机器上下载&安装git客户端
  • 在机器上安装一个编辑文件的IDE或文本编辑器,这里建议下载&安装Visual Studio Code
阅读全文 »

Rust 的编译速度和跨平台编译相比 Go 语言就要难用很多,但这也是语言特点,当你从中受益时,必然要付出一些代价,本文主要介绍如何实现跨平台编译,使用 cross 这个工具。

我的工作台是 Mac M2,想编译出 LinuxWindows 的可执行文件,使用的代码很简单,就是 Hello World 示例程序,这个不是重点。

使用 cross 首先当然是安装,按照官方的描述,可以使用下面的命令:

1
cargo install cross --git https://github.com/cross-rs/cross

然后是安装 docker 或者 podman,本文以 docker 为例,讲述使用过程中遇到的问题及其解决方案。cross 的使用很简单,例如,如果我要编译 targetaarch64-unknown-linux-gnu,执行:

1
cross build  --target aarch64-unknown-linux-gnu
阅读全文 »

垃圾回收

垃圾收集是通过销毁未使用的对象,回收运行时未使用的内存的过程。垃圾收集器利用垃圾收集根(GCRoots)的概念来识别活动对象和死亡对象。

  • 有系统类加载器加载的类(不是自定义类加载器)
  • 实时线程
  • 当前执行方法的局部变量和参数
  • JNI方法的局部变量和参数
  • 全局的JNI参考
  • 用作同步监视器的对象
  • JVM出于其目的而从垃圾回收中保留的对象
阅读全文 »

很多语言中都有闭包,有的叫匿名函数,有的叫 lambda 函数,用一个最简单的例子演示闭包,例如 sort_by_key 传入的就是一个闭包函数:

1
2
3
4
5
6
7
8
9
10
struct City {
name: String,
population: i64,
country: String,
}

fn main() {
let mut cities = Vec::<City>::new();
cities.sort_by_key(|city| -city.population)
}
阅读全文 »
0%