需求
有时候需要测试业务程序,把时间指定到一个特定的时间去测试,如何在修改容器时间
而不影响宿主机时间
?
解决方法
GitHub 有一个开源的 libfaketime
项目,能解决这个问题。目前该项目有 1.3k
Star。
项目地址
支持平台
- Linux
- MacOs
闪射理想之光吧心灵之星!把光流注入未来的暮霭之中。
优雅停止(Graceful shutdown)
这个说法来自于操作系统,我们执行关机之后都得 OS 先完成一些清理操作,而与之相对的就是硬中止(Hard shutdown),比如拔电源。
到了分布式系统中,优雅停止就不仅仅是单机上进程自己的事了,往往还要与系统中的其它组件打交道。比如说我们起一个微服务,网关把一部分流量分给我们,这时:
假如我们一声不吭直接把进程杀了,那这部分流量就无法得到正确处理,部分用户受到影响。不过还好,通常来说网关或者服务注册中心会和我们的服务保持一个心跳,过了心跳超时之后系统会自动摘除我们的服务,问题也就解决了;这是硬中止,虽然我们整个系统写得不错能够自愈,但还是会产生一些抖动甚至错误;
假如我们先告诉网关或服务注册中心我们要下线,等对方完成服务摘除操作再中止进程,那不会有任何流量受到影响;这是优雅停止,将单个组件的启停对整个系统影响最小化;
按照惯例,SIGKILL 是硬终止的信号,而 SIGTERM 是通知进程优雅退出的信号,因此很多微服务框架会监听 SIGTERM 信号,收到之后去做反注册等清理操作,实现优雅退出。[4]
Linux容器
是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。[1]
Docker
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
Docker
是目前最流行 Linux容器解决方案
,但有两个不足之处:
Docker
需要在你的系统上运行一个守护进程Docker
是以 root
身份在你的系统上运行该守护程序这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具 Podman
出现了。 [3]
Kubernetes Volume Snapshot
:功能现已在 Kubernetes v1.17 中处于 beta 版。它在 Kubernetes v1.12 中作为 Alpha 引入,第二个 Alpha 在 Kubernetes v1.13 中具有重大变化。
什么是 Volume Snapshot?
许多存储系统(如 Google Cloud Persistent Disks、Amazon Elastic Block Storage 和许多本地存储系统)都可以创建 Persistent Volume(持久卷)的“快照”。快照表示 Volume 的时间点副本,可用于设置新的 Volume(预填充快照数据)或将现有 Volume 还原到先前状态(由快照表示)。
为什么要将 Volume Snapshot 添加到 K8s?
Kubernetes Volume 插件系统提供强大的抽象功能,可以自动配置、附加和挂载块和文件存储。
这些功能都基于 Kubernetes 的工作负载可移植性:Kubernetes 的目标是在分布式系统应用程序和底层集群之间创建一个抽象层,以 便应用程序可以不知道底层集群的具体情况,且在部署时不需要“特定于集群”的知识。
Kubernetes Storage SIG 将快照操作确定为许多有状态工作负载的关键功能。例如,在进行数据库操作之前,数据库管理员可能需要 对数据库卷进行快照。通过提供一种在 Kubernetes API 中触发快照操作的标准方式,Kubernetes 用户现在可以轻松应对上述场景, 而不必使用 Kubernetes API 手动执行针对存储系统的特定操作。
Kubernetes 用户现在被授权以与集群无关的方式,将快照操作合并到他们的工具和策略中,并且可以放心地知道它将针对任意的 Kubernetes 集群,而不需要在意底层存储是什么。
此外,这些 Kubernetes 快照原语是基本的构建块,可用于为 Kubernetes 开发高级的企业级存储管理功能,如应用程序级或集群级 的备份解决方案。 了解更多 https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-cis-volume-snapshot-beta/
云提供商标签达到一般可用性
:v1.17 作为 v1.2 中的 beta 功能添加,可以看到云提供商标签的一般可用性。
CSI 迁移测试版
:容器存储接口(CSI)迁移基础结构的 Kubernetes 存储插件现在是 Kubernetes v1.17 中 beta 版。CSI 迁移在 Kubernetes v1.14 中作为 Alpha 引入。
基于角色的访问控制(Role-Based Access Control, 即 "RBAC")
:使用 “rbac.authorization.k8s.io” API Group 实现授权决策,允许管理员通过 Kubernetes API 动态配置策略。
RBAC 从 Kubernetes v1.6 处于beta版本
,从 v1.8 开始
,RBAC已作为 稳定的功能
。启用 RBAC,请使用 --authorization-mode=RBAC
启动 API Server。[1]
本节将介绍RBAC API
所定义的四种顶级类型
。用户可以像使用其他Kubernetes API资源一样 (例如通过kubectl、API调用等)与这些资源进行交互。例如,命令 kubectl create -f (resource).yml
可以被用于以下所有的例子,当然,读者在尝试前可能需要先阅读以下相关章节的内容。[1]
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true