通用电气GE微服务实践:在容器中部署有状态应用

Portworx阅读(2708)评论(0)

 

通用电气GE

 

通用电气GE,创立于1892年,是世界上最大的技术和服务跨国公司。自托马斯·爱迪生创建通用电气公司以来,业务遍及世界上100多个国家,拥有员工315,000人。

 

GE在航空,电力,运输,能源等行业具备丰富的产品线和运营经验。同时GE也通过数字化的方式帮助客户进行产品的运维,数据分析和改进。GE为此建立了自己的物联网数字化平台。

 

GE采用微服务架构并通过容器来运行有状态应用。为此,需要建立CSI(Container Storage Interface),GE尝试了一些办法,但是从使用上来说并不成熟,无法给平台的用户和合作伙伴,提供简单易操作的容器存储和数据管理方法。需要有一个能够同时运行无状态应用和有状态应用的基础层。

 

最终,GE选择了与Portworx携手,来建立CSI对容器存储和数据进行有效管理。

 

Portworx建立了物理存储之上的软件定义的存储抽象层,用户不需要思考具体在使用那种物理存储,也不需要知道承载应用的是哪朵公有云或者私有云。

在没有这样一个抽象层之前,用户需要手动的把物理存储卷来分配到某个容器上。传统的存储,都是通过虚拟机和操作系统来驱动存储的,对于容器来说则很不适用。因为容器通常被编排程序Orchestrator排程在多节点的环境下来运行。应用程序也不都是在单一的容器内运行。比如Cassandra, 通常是部署在一系列的容器上。一个Cassandra集群可能会有3个、10个、15个Cassandra容器,被部署在15个不同的虚拟机上,甚至可能在不同的物理数据中心里。所以当我们尝试把某个卷添加到这样一个分布式系统里的时候,就会出现非常多的问题。这些问题需要运维工程师花大量的时间来做调整,让卷与这样的分布式系统产生映射。假如说一个5节点的Cassandra集群,这些节点都运行在哪些虚拟机上呢?又是在哪个存储上呢?于是我们不得不把应用跟虚拟机对应起来,因为我们在使用虚拟机对应的存储资源。如果虚拟机停机了,我们就不得不去手动寻找相对应的存储,然后把它和新的虚拟机对应起来。这跟云原生的思想和容器排程器Orchestrator的定位并不对路。同时新的问题又会产生,如何在这样的分布式系统里为存储设定密码?如何做快照?这些问题都将留给我们的用户,这就更有问题了。

 

作为GE,我们并不想把这样的复杂的基础架构爬坑工作留给用户。

 

Portworx本身是一种基于容器的超融合架构,将计算资源与存储有机结合在一起。同时Portworx与K8S的调度软件scheduler无缝集成。

 

像数据库这样的有状态型容器化应用需要在分布式节点上的永久数据。Portworx使用有状态的Stateful Fabric来管理数据卷,即container-SLA-aware,来做到这一点。复制卷数据确保其状态,同时满足容器化应用的性能和可用性。更重要的是,Portworx可在每个容器级别中管理其快照、克隆副本和复制操作,使DevOps能够单独管理微服务,而不是像LUNs那用做传统存储系统的绑定组。使用Portworx管理有状态容器Stateful Containers很方便,每个容器级别的数据的可用性和管理也很简单,且高度自动化。

 

如果需要部署一个Cassandra集群,而又并不想让所有的节点在同一个环网上,在同一个Availability Zone或者Failure domain,Portworx可以帮助用户更好的来架构这些分布式的应用。另外通常我们希望物理资源能够有80%以上的利用率。我们需要让不同的应用在同一个硬件内共存,而不产生IO的冲突。Portworx并不是直接把存储或者物理的LUNs跟应用连接起来,我们提供一个虚拟的存储卷层来避免IO的冲突,并实现容器的加密或者是快照。尤其是当一个容器宕机,然后又从另外一个位置恢复后,我们就能够快速找到原来的存储,并且在新的容器中恢复。同时Portworx的安全与合规管理功能,帮助GE满足公司内部对于平台架构的安全合规要求,也满足了用户和客户的存储加密,存储快照这样的需求。

Service Mesh 是新瓶装旧酒吗?

alicloudnative阅读(2805)评论(0)

本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书。

作者 | 李云(花名:至简) 阿里云高级技术专家

导读:在即将过去的 2019 年,Service Mesh 开源产品的成熟度虽在全球范围内没有发生质的变化,但在国内仍出现了一些值得特别关注的事件。比如:阿里巴巴在 双11 的部分电商核心应用上落地了完整的 Service Mesh 解决方案,借助 双11 的严苛业务场景完成了规模化落地前的初步技术验证。本文作者将结合自己在阿里巴巴落地实践 Service Mesh 过程中的观察与思考,来和大家进行分享。

Service Mesh 是新瓶装旧酒吗?

新技术出现时所主张的价值一定会引发相应的探讨,Service Mesh 也不例外。

以往,怀疑 Service Mesh 价值的观点主要有两大类。

  • 第一类是应用的数量并没有达到一定的规模,在 Service Mesh 增加运维和部署复杂度的情形下,认为所带来的成本和复杂度高于所获得的收益。

从根本上来看,这一类并非真正怀疑 Service Mesh 的价值,而是主张在 Service Mesh 还没有完全成熟和普及的情形下,在未来合适的时机再考虑采纳。当然,我在与外部客户交流时也碰到一些特例,他们即便在应用数很少的情形下,仍希望通过 Service
Mesh 去解决非 Java 编程语言(比方说 Go)的分布式链路追踪等服务治理问题,虽说这些能力在 Java 领域有相对成熟的解决方案,但在非 Java 领域确实偏少,所以很自然地想到了采用 Service Mesh。

  • 第二类怀疑 Service Mesh 价值的,是应用的数量具有相当的规模且对分布式应用的规模问题也有很好的认知,但由于在发展的过程中已经积累了与 Service Mesh 能力相当的那些(非体系化的)技术,造成初识 Service Mesh 时有“老酒换新瓶”的感觉而不认可其价值。阿里巴巴过去也曾属于这一阵营。

阿里巴巴在分布式应用的开发和治理方面的整体解决方案的探索有超过十年的历程,且探索过程持续地通过 双11 这样的严苛场景做检验和孵化,采用单一的 Java 语言打造了一整套的技术。即便如此,应对分布式应用的规模问题依然不轻松,体现于因为缺乏顶层设计而面临体系性不足,加之对技术产品自身的用户体验缺乏重视,最终导致运维成本和技术门槛都偏高。在面临这些阵痛之际,云原生的概念逐渐清晰地浮出了水面。

云原生主张技术产品在最为严苛的场景下仍能提供一定质量的服务而体现良好弹性,同时也强调技术产品本身应当具有良好的易用性,以及将来为企业需要多云和混合云的 IT 基础设施提供支撑(即:帮助实现分布式应用的可移植性)。

云原生的概念不仅很好地契合了阿里巴巴集团在技术发展上亟待解决的阵痛,也迎合了阿里巴巴将云计算作为集团战略、让云计算普惠社会的初衷。在这一背景下,阿里巴巴做出了全面云原生化的决定,Service Mesh 作为云原生概念中的关键技术之一,当然也包含在其中。

Service Mesh 给阿里巴巴带来的价值

Service Mesh 所带来的第一个变化体现于:服务治理手段从过去的框架思维向平台思维转变。

这种转变并非后者否定前者,而是前后者相结合去更好地发挥各自的优势。两种思维的最大区别在于,平台思维不仅能实现应用与技术基础设施更好的解耦,也能通过平台的聚集效应让体系化的顶层设计有生发之地。

框架思维向平台思维转变在执行上集中体现于“轻量化”和“下沉”两个动作。

  • 轻量化是指将那些易变的功能从框架的 SDK 中移出,结果是使用了 SDK 的应用变得更轻,免除了因易变功能持续升级所带来的低效;也彻底让应用的开发者无需关心这些功能,让他们能更好地聚焦于业务逻辑本身;
  • 从框架中移出的功能放到了 Service Mesh 的 Sidecar 中实现了功能下沉。

Service Mesh 作为平台性技术,将由云厂商去运维和提供相应的产品,通过开源所构建的全球事实标准一旦被所有云厂商采纳并实现产品化输出,那时应用的可移植性问题就能水到渠成地解决。

功能下沉在阿里巴巴落地 Service Mesh 的过程中也看到了相应的价值。阿里巴巴的电商核心应用基本上都是用 Java 构建的,在 Mesh 化之前,RPC 的服务发现与路由是在 SDK 中完成的,为了保证 双11 这样的流量洪峰场景下的消费者用户体验,会通过预案对服务地址的变更推送做降级,避免因为频繁推送而造成应用进程出现 Full GC。Mesh 化之后,SDK 的那些功能被放到了 Sidecar(开发语言是 C++)这一独立进程中,这使得 Java 应用进程完全不会出现类似场景下的 Full GC 问题。

软件设计的质量主要体现在“概念”和“关系”两个词上。

同样功能的一个系统,不同的概念塑造与切分将产生完全不同的设计成果,甚至影响到最终软件产品的工程质量与效率。当概念确定后,关系也随之确立,而关系的质量水平体现在解耦的程度上。Service Mesh 使得应用与技术基础设施之间的关系变得更松且稳定,通过流量无损的热升级方案,使得应用与技术基础设施的演进变得独立,从而加速各自的演进效率。软件不成熟、不完善并不可怕,可怕的是演进起来太慢、包袱太重。

阿里巴巴在落地 Service Mesh 的过程中,体会到了松耦合所带来的巨大工程价值。当应用被 Mesh 化后,接下来的技术基础设施的升级对之就透明了,之前因为升级工作所需的人力配合问题可以通过技术产品化的手段完全释放。另外,以往应用进程中包含了业务逻辑和基础技术的功能,不容易讲清楚各自对计算资源的消耗,Service Mesh 通过独立进程的方式让这一问题得以更好地隔离而实现量化,有了量化结果才能更好地对技术做优化。

Service Mesh 所带来的第二个变化在于:技术平台的建设从面向单一编程语言向面向多编程语言转变。

对于初创或小规模企业来说,业务应用的开发采用单一的编程语言具有明显优势,体现于因为个体掌握的技术栈相同而能带来良好的协作效率,但当企业的发展进入了多元化、跨领域、规模更大的更高阶段时,多编程语言的诉求就随之产生,对于阿里巴巴这样的云厂商来说更是如此(所提供的云产品不可能过度约束客户所使用的编程语言)。多编程语言诉求的背后是每种编程语言都有自己的优势和适用范围,需要发挥各自的优势去加速探索与创新。

从技术层面,这一转变意味着:

  • 第一,技术平台的能力需要尽可能地服务化,避免因为服务化不彻底而需要引入 SDK,进而带来多编程语言问题(即因为没有相应编程语言的 SDK 而无法使用该编程语言);
  • 第二,在无法规避 SDK 的情形下,让 SDK 变得足够的轻且功能稳定,降低平台化和多编程语言化的工程成本,支持多编程语言 SDK 最好的手段是采用 IDL。

从组织层面,这一转变意味着平台技术团队的人员技能需要多编程语言化。一个只有单一编程语言的团队是很难做好面向多编程语言的技术平台的,不只是因为视角单一,还因为无法“吃自己的狗食”而对多编程语言问题有切肤之痛。

Service Mesh 带来的发展机遇

在这两个变化之下,我们来聊一聊 Service Mesh 所带来的发展机遇。

  • 首先,Service Mesh 创造了一次以开发者为中心去打造面向未来的分布式应用开发平台的机会。

在 Service Mesh 出现之前,各种分布式服务治理技术产品的发展,缺乏强有力的抓手去横向拉通做体系化设计和完成能力复用,因而难免出现概念抽象不一致和重新造轮子的局面,最终每个技术产品有自己的一套概念和独立的运维控制台。当多个运维控制台交到开发者手上时,他们需要做大量的学习,去理解每个运维控制台的概念以及它们之间的关系,背后所带来的困难和低效是很容易被人忽视的。

本质上,Service Mesh 的出现是解决微服务软件架构之下那些藏在应用与应用之间的复杂度的。它的出现使得所有的分布式应用的治理问题被放到了一起去考虑。换句话说,因为 Service Mesh 的出现,我们有机会就分布式应用的治理做一次全局的设计,也有机会将各种技术产品整合到一起而避免重复建设的问题。

未来的分布式应用开发平台一定是基于 Service Mesh 这一基础技术的。为此,需要借这个契机从易用性的角度重新梳理应给开发者塑造的心智。易用性心智的确立,将使得开发者能在一个运维控制台上做最少的操作,通过为他们屏蔽背后的技术实现细节,而减轻他们在使用时的脑力负担,以及降低操作失误带来安全生产事故的可能性。

理论上,没有 Service Mesh 之前这些工作也能做,但因为没有具体的横向技术做抓手而无法落地。

  • 其次,Service Mesh 给其他技术产品创造了重新思考云原生时代的发展机会。

有了 Service Mesh 后,以前很多独立的技术产品(比如,服务注册中心、消息系统、配置中心)将变成 BaaS(Backend as a Service)服务,由 Service Mesh 的 Sidecar 负责与它们对接,应用对这些服务的访问通过 Sidecar 去完成,甚至有些 BaaS 服务被 Sidecar 终结而完全对应用无感。

这些变化并非弱化了那些 BaaS 服务的重要性。相反,因为其重要性而需要与 Service Mesh 做更好的整合去为应用提供服务,与此同时探索做一定的能力增强。比方说,Service Mesh 所支持的应用版本发布的灰度功能(包括蓝绿发布、金丝雀发布、A/B 测试),并非每一个 BaaS 服务在 Mesh 化后就能很好地支持这一功能,而是需要做相应的技术改造才行。请注意,这里主要讲的是应用的灰度能力,而非 BaaS 服务自身的灰度能力。当然,并不妨碍探索通过 Service Mesh 让 BaaS 服务自身的灰度工作变得简单且低风险。

未来很多技术产品的竞争优势将体现于它能否与 Service Mesh 形成无缝整合。

无缝整合的核心驱动力,源于用户对技术产品的易用性和应用可移植性的需要。基于这一认识,阿里巴巴正在将 RocketMQ/MetaQ 消息系统的客户端中的重逻辑剥离到 Envoy 这一 Sidecar 中(思路依然是“下沉”),同时基于 Service Mesh 所提供的能力做一定的技术改造,以便 RocketMQ/MetaQ 能很好地支撑应用的灰度发布。类似这样的思考与行动,相信未来会在更多的技术产品上出现。

  • 再次,Service Mesh 给技术基础设施如何与业务基础技术更好地协同提供了一次探索机会。

每一种业务(比如电商)都会构建基于所在领域的基础技术,这类技术我们称之为业务基础技术。当阿里巴巴希望将某一业务的基础技术搬到外部去服务客户时,面临业务基础技术如何通过服务化去满足客户已选择的、与业务基础技术不同的编程语言的问题,否则会出现基于 Java 构建的业务基础技术很难与 Go 所编写的应用协同。

在 Service Mesh 致力于解决服务化问题的过程中,能否通过一定的技术手段,让业务基础技术的能力通过插件的形式“长”在 Service Mesh 之上是一个很值得探索的点。当业务基础技术以插件的形式存在时,业务基础技术无需以独立的进程存在而取得更好的性能,且这一机制也能被不同的业务复用。阿里巴巴的 Service
Mesh 技术方案所采用的 Sidecar 开源软件 Envoy 正在积极地探索通过 Wasm 技术去实现流量处理的插件机制,将该机制进一步演变成为业务基础技术插件机制是值得探索的内容。

下图示例说明了业务基础技术的插件机制。

图中两个彩色分别代表了不同的业务(比如一个代表电商,另一个代表物流),两个业务的基础技术并非开发了两个独立的应用(进程)然后做发布和运维管理,而是基于 Wasm 所支持的编程语言实现了业务技术插件,这一点可以理解为用多编程语言的方式解决业务服务化问题,而非强制要求采用与 Sidecar 一样的编程语言。插件通过 Service Mesh 的运维平台进行管理,包含安装、灰度、升级、监控等能力。

至简.png

由于插件是“长”在 Service Mesh 之上的,插件化的过程就是业务技术服务化的过程。

另外,Service Mesh 需要提供一种选择能力,让业务的应用开发者或运维者选择自己的机器上需要哪些插件(可以理解为插件市场)。另一个值得关注的点是:插件的运维和管理能力以及一定的质量保证手段由 Service Mesh 平台提供,但运维、管理和质量保证的责任由各插件的提供者承担。这种划分将有效地杜绝所有插件的质量由 Service Mesh 平台去承担而带来的低效,分而治之仍是改善很多工程效率的良方。

  • 最后,Service Mesh 给探索面向未来的异地多活、应用永远在线的整体技术解决方案打开了一扇大门。

服务之间的互联互通,服务流量的控制、观测和安全加固是微服务软件架构下所要解决的关键问题,这些问题与规模化下的服务可用性和安全性紧密相关。未来,通过 Service Mesh 的流量控制能力能做很多改善应用发布和运维效率的文章,那时才能真正看到一个灵动、称手的云平台。

Service Mesh 的“三位一体”发展思路

阿里巴巴作为云计算技术的供应商,在探索 Service Mesh 技术的道路上,不只是考虑如何让云原生技术红利在阿里巴巴内部兑现,同时还思考着如何将技术红利带给更多的阿里云客户。基于此,阿里巴巴就 Service Mesh 的整体发展思路遵循“三位一体”,即阿里巴巴内部、阿里云上的相应商业产品和开源软件将采用同一套代码。

就我们与阿里云客户交流的经验来看,他们乐于尽最大可能采用非云厂商所特有的技术方案,以免被技术锁定而在未来的发展上出现掣肘。另外,他们只有采纳开源的事实标准软件才有可能达成企业的多云和混合云战略。基于客户的这一诉求,我们在 Service Mesh 的技术发展上特别重视参与开源事实标准的共建。在 Istio 和 Envoy 两个开源项目上,我们都会致力于将内部所做的那些优化反哺给开源社区。

未来,我们将在 Service Mesh 领域坚定而扎实地探索,也一定会将探索成果和思考持续地分享给大家。

点击下载《不一样的 双11 技术:阿里巴巴经济体云原生实践》

ban.jpg

本书亮点

  • 双11 超大规模 K8s 集群实践中,遇到的问题及解决方法详述
  • 云原生化最佳组合:Kubernetes+容器+神龙,实现核心系统 100% 上云的技术细节
  • 双 11 Service Mesh 超大规模落地解决方案

阿里巴巴云原生微信公众号(ID:Alicloudnative)关注微服务、Serverless、容器、Service Mesh等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术公众号。”

如何跨不同版本K8S,为有状态工作负载做蓝绿部署

Portworx阅读(3446)评论(0)

容器的生态正在爆发!不仅仅应用层在快速变化,还有用于管理应用程序的平台:Kubernetes,也在快速变化。这就为Ops团队带来了一个必须要解决的难题。IT团队如何才能保证一款应用程序能够在各种不同版本的Kubernetes上都能良好运行呢?

PX-Motion演示:如何跨不同版本Kubernetes,为有状态的工作负载做蓝绿部署

蓝-绿部署是一种专门用于解决这一问题的技术,并能够降低生产环境部署的过程中的停机或错误风险。在蓝绿部署场景下,用户需要构建两个完全相同的生产环境(分别称为蓝与绿),这两个环境之间仅在需要部署的新的变更方面存在差异。每一次仅激活一个环境,两个环境之间的数据传输也是部署过程的一部分。该技术对于不含任何数据的无状态应用非常有效,但对于数据库这类有状态应用则存在一定的困难,因为用户不得不保留两份生产数据副本。这种情况下可能会需要使用Postgres、MySQL以及其他数据库备份和恢复脚本,或定制化操作手册或自动脚本等将数据从一个数据源人工移动到另一个数据源,这个过程将会非常复杂并且会耗费大量的时间。

Portworx采用PX-Motion解决了有状态应用程序的蓝绿部署过程中的数据管理问题。PX-Motion使IT团队能够很方便地在各种环境之间进行数据和应用配置的迁移,极大地简化了有状态应用的蓝绿部署。

本篇博文将对PX-Motion的功能与能力进行探讨。具体地说,笔者将展示如何对两个不同版本的Kubernetes上运行的有状态LAMP堆栈进行蓝绿部署。

总结来说,我们会:

1.   将两个Kubernetes集群(分别称为来源集群和目标集群)配对,从而使数据、配置和Pods能够这两个集群之间进行转移,这是蓝绿部署的一部分。

2.   使用Kubernetes将一个LAMP堆栈部署到来源集群上,并验证应用程序能够运行。

3.   使用PX-Motion可以将Kubernetes的部署、加密文件、副本集、服务、持久卷、持久卷连接以及数据等,从来源集群迁移到目标集群上进行测试和验证。在迁移完成之后,所有的Pods都能够在来源集群上继续运行。现在我们已经有了两个集群在运行,分别是蓝色和绿色。

4.   使用Kubernetes验证我们的应用以及自身数据是否正在目标集群上正常运行。

5.   在新集群上的部署验证完成之后,我们就可以更新我们的负载平衡设置,从而使所有的流量指向新集群。此时蓝绿部署就完成了。

我们开始吧!

安装PX-Motion

前提条件

如果你正在尝试PX-Migration,请确认已经满足所有的前提条件(https://docs.portworx.com/cloud-references/migration/migration-stork/#overview)。

配对Kubernetes集群为数据迁移做准备

从来源集群(Kubernetes 1.10.3)向目标集群(Kubernetes 1.12.0)进行工作载荷迁移之前,我们需要将这两个集群配对起来。配对的概念相当于将手机和蓝牙播放器进行配对,使两种不同的设备结合起来工作。

集群配对首先要做的是对目标集群进行配置。首先,建立对于pxctl (“pixie-cuttle”)的访问,即Portworx CLI。下面将介绍如何在可被kubectl访问的工作站上使用pxctl。

$ kubectl config  use-context <destination-cluster>
$ PX_POD_DEST_CLUSTER=$(kubectl get pods --context
   <DESTINATION_CLUSTER_CONTEXT> -l name=portworx -n kube-system 
   -o jsonpath='{.items[0].metadata.name}')
$ alias pxctl_dst="kubectl exec $PX_POD_DEST_CLUSTER \
   --context <DESTINATION_CLUSTER_CONTEXT>
   -n kube-system /opt/pwx/bin/pxctl"

下一步,对目标集群对象存储进行设置,使其准备好与来源集群进行配对。我们需要在目标集群上设置一个对象存储端点,作为数据在迁移过程中进行分级的位置。

$ pxctl_dst -- volume create --size 100 objectstore
$ pxctl_dst -- objectstore create -v objectstore
$ pxctl_dst -- cluster token show
Token is <UUID>

下一步,创建一个集群配对YAML配置文档,从而对应到来源Kubernetes集群上。这个clusterpair.yaml(https://docs.portworx.com/cloud-references/migration/migration-stork/#overview)文档将包含如何与目标集群调度程序和Portworx存储进行验证的信息。运行如下命令并编辑YAML文档即可建立配对:

$ storkctl generate clusterpair --context <destination-cluster> > clusterpair.yaml

1.   说明:你可以用你自己的名称替换“metadata.name”。

2.   说明:在如下示例中,options.token可以使用通过上述“cluster tokenshow”命令生成的令牌。

3.   说明:在如下示例中,对于options.ip,将需要负载均衡器或Portworx节点的IP或者DNS,这样我们才能够访问9001和9010端口。

下一步,使用kubectl,将这个集群配对应用到来源集群上。

$ kubectl config use-context <source-cluster>
$ kubectl create -f clusterpair.yaml

在这种架构下,集群配对通过互联网(VPC至VPC)进行连接。这就需要确保我们的目标存储能够良好地与来源集群连接。 请参照如下说明。(https://docs.portworx.com/cloud-references/migration/)

1.   说明:这些步骤均是暂用措施,后续新版本的发布后将由自动化过程取代。

2.   说明:   云到云、本地环境到云、云到本地环境,都需要类似的步骤。

如果所有步骤均操作成功,则请使用storkctl列出集群配对,程序将显示存储调度程序Ready状态。如果显示Error,则请使用kubectl describe clusterpair,以获取更多信息。

$ storkctl get clusterpair
NAME      STORAGE-STATUS   SCHEDULER-STATUS   CREATED
green     Ready            Ready              19 Nov 18 11:43 EST
$ kubectl describe clusterpair new-cluster | grep paired
  Normal  Ready   2m    stork  Storage successfully paired
  Normal  Ready   2m    stork  Scheduler successfully paired

pxctl也可以用于列出集群配对。

$ pxctl_src cluster pair list
CLUSTER-ID  NAME               ENDPOINT                      CREDENTIAL-ID
c604c669    px-cluster-testing http://portworx-api.com:9001  a821b2e2-788f

我们的集群现在已经配对成功了。

在Kubernetes 1.12.0上测试工作负载

目前Kubernetes 1.10.3来源集群已经和1.12.0目标集群完成了配对,我们可以将运行的工作负载、配置以及数据从一个集群迁移到另一个集群上,来测试目标集群1.12.0Kubernetes上的应用程序是否能够正常运行。在迁移过程中及完成后,所有的Pods都将继续在来源集群上运行。我们现在有了两个集群,即蓝色和绿色,只在其运行的Kubernetes版本上存在差异。

$ kubectl config  use-context <1.10.3 source cluster context>

如果想要检查当前使用的Kubernetes版本,请运行kubectl version命令。这个命令能够输出当前的客户端和服务器版本。如下所示,服务器版本为1.10.3。

$ kubectl version --short | awk -Fv '/Server Version: / {print "Kubernetes Version: " $3}'
Kubernetes Version: 1.10.3-eks

在1.10.3上部署应用程序

在迁移工作负载时,我们需要一个来源集群上已经存在的工作负载。在演示中,我们将使用Heptio的示例LAMP堆栈在来源集群上创建一个LAMP堆栈(http://docs.heptio.com/content/tutorials/lamp.html),从而在MySQL卷上使用Portworx。这个堆栈包含了一个存储分类,包括Portworx、加密文件、HPH网页前端,以及一个具备Porworx卷副本的mySQL数据库。

$ kubectl create ns lamp   
                                                                                              
$ kubectl create -f . -n lamp
job.batch "mysql-data-loader-with-timeout" created
storageclass.storage.k8s.io "portworx-sc-repl3" created
persistentvolumeclaim "database" created
deployment.extensions "mysql" created
service "mysql" created
deployment.extensions "php-dbconnect" created
service "web" created
secret "mysql-credentials" created

使用kubectl对Pods进行检索,确保其处于Running状态下。

$ kubectl get po -n lamp
NAME                                   READY     STATUS    RESTARTS   AGE
mysql-6f95f464b8-2sq4v                 1/1       Running   0          1m
mysql-data-loader-with-timeout-f2nwg   1/1       Running   0          1m
php-dbconnect-6599c648-8wnvf           1/1       Running   0          1m
php-dbconnect-6599c648-ckjqb           1/1       Running   0          1m
php-dbconnect-6599c648-qv2dj           1/1       Running   0          1m

提取Web服务。记录服务的CLUSTER-IP和EXTERNAL-IP。迁移完成后,这两个数据将会因为处于新的集群上而发生变化。

$ kubectl get svc web -n lamp -o wide
NAME      TYPE           CLUSTER-IP       EXTERNAL-IP             PORT(S)      AGE   SELECTOR
web       LoadBalancer   172.20.219.134   abe7c37c.amazonaws.com  80:31958/TCP 15m   app=php-dbconnect

访问端点或使用curl确认WordPress已安装、运行正常且已连接至MySQL。

MySQL连接

$ curl -s abe7c37c.amazonaws.com/mysql-connect.php | jq
{
  "outcome": true
}

验证是否也为MySQL容器创建了PVC。如下我们将看到PVC、数据库,各有三个副本用于部署。这个卷是MySQL的ReadWriteOnce卷块。

$ kubectl get pvc -n lamp
NAME       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
database   Bound     pvc-c572277d-ec15-11e8-9f4d-12563b3068d4   2Gi        RWO            portworx-sc-repl3   28m

卷信息也可以使用pxctl进行展示。Volume list命令的输出如下。

$ pxctl_src -- volume list
ID                 NAME                                      SIZE  HA STATUS                       
618216855805459265 pvc-c572277d-ec15-11e8-9f4d-12563b3068d4  2 GiB 3  attached on 10.0.3.145

将应用程序迁移至Kubernetes 1.12.0

对本地kubectl客户端进行配置,使其使用正在运行1.12.0的目标集群。

$ kubectl config use-context <1.12.0 destination cluster context>

运行kubectl Version命令,这个命令将输出当前的客户端和服务器版本,如下看到运行的1.12.0。

$ kubectl version --short | awk -Fv '/Server Version: / {print "Kubernetes Version: " $3}'
Kubernetes Version: 1.12.0

验证LAMP堆栈Pods是否正在运行中。如下所示,该集群的Namespace没有资源,即表示迁移还未发生。

$ kubectl get po
No resources found.

下一步,使用Stork客户端storkctl,创建一次迁移,将LAMP堆栈资源和卷从1.10.3集群迁移到1.12.0集群上。向storkctl create migration的命令的输入包括clusterPairnamespaces以及可选的includeResourcesstartApplications,从而将相关资源纳入并在迁移完成后启动应用程序。该命令的更多信息请点击这里(https://docs.portworx.com/cloud-references/migration/migration-stork/)。

$ storkctl --context <source-cluster-context> \
   create migration test-app-on-1-12 \
   --clusterPair green \
   --namespaces lamp \
   --includeResources \
   --startApplications
Migration test-app-on-1-12 created successfully

迁移创建后,使用storkctl获取迁移状态。

$  storkctl --context <source-cluster-context> get migration
NAME               CLUSTERPAIR   STAGE     STATUS       VOLUMES   RESOURCES   CREATED
test-app-on-1-12   green         Volumes   InProgress   0/1       0/7         19 Nov 18 13:47 EST

pxctl也可以用于查看迁移状态。卷将显示出与迁移有关的STAGESTATUS

$ pxctl_src cloudmigrate status

CLUSTER UUID: 33293033-063c-4512-8394-d85d834b3716
TASK-ID            VOLUME-ID               VOLUME-NAME                               STAGE     STATUS     
85d3-lamp-database 618216855805459265      pvc-c572277d-ec15-11e8-9f4d-12563b3068d4  Done      Initialized

完成后,迁移将显示STAGE → Final和 STATUS → Successful

$ storkctl --context  <source-cluster-context> get migration

NAME               CLUSTERPAIR   STAGE     STATUS       VOLUMES   RESOURCES   CREATED
test-app-on-1-12   green         Final     Successful   1/1       7/7         19 Nov 18 13:47 EST

现在从目标集群中获得Pods。如下所示,PHP与MySQL现在都在目的集群上运行。

$ kubectl get po -n lamp
NAME                            READY     STATUS    RESTARTS   AGE
mysql-66d895ff69-z49jl          1/1       Running   0          11m
php-dbconnect-f756c7854-2fc2l   1/1       Running   0          11m
php-dbconnect-f756c7854-c48x8   1/1       Running   0          11m
php-dbconnect-f756c7854-h8tgh   1/1       Running   0          11m

注意CLUSTER-IPEXTERNAL-IP现在已经发生了变化。这表示服务现在在新的Kubernetes 1.12集群上运行,并且因此包含了与此前不同的子网。

$  kubectl get svc web -n lamp -o wide
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP            PORT(S)       AGE  SELECTOR
web       LoadBalancer   10.100.0.195   aacdee.amazonaws.com   80:31958/TCP  12m  app=php-dbconnect

如果网站能够在1.12.0集群上被访问、运行正常并且数据已经正确迁移到了1.12.0集群,则将会返回相同的输出内容。

Web网页前端

MySQL连接

$ curl -s http://aacdee.amazonaws.com//mysql-connect.php | jq
{
  "outcome": true
}

如下我们可以看到来源(下)和目标(上)集群上,kubectl get po -n lamp的输出。注意Pods的AGE,目的集群(上)中有最近迁移进来的LAMP堆栈。

两个集群在迁移后运行的是相同的程序和数据。

回顾整个过程:

1.   第一步,1.10.3 EKS集群与1.12.0集群配对。

2.   LAMP堆栈(Linux, Apache, MySQL, PHP)部署到1.10.3集群上。

3.   使用PX-Motion将Kubernetes部署、加密文件、副本集、服务、持久卷、持久卷连接,以及LAMP堆栈数据迁移到1.12.0集群上。

4.   应用程序在1.12.0集群上被访问,并验证其是否正确运行。

持久卷和连接都使用PX-Motion(https://docs.portworx.com/cloud-references/migration)在各个集群之间进行迁移,Kubernetes资源和副本都使用Portworx Stork在目标集群上进行启动。

现在我们拥有了两个完全可运行的Kubernetes集群和两个环境,即蓝色和绿色部署环境。在实际操作中,你需要在绿色集群上进行所有测试,从而确保应用程序不会在新的集群上发生预期之外的问题。确认测试完成之后,将负载均衡从蓝色集群切换至新的绿色集群,此时部署就完成了!

结论

PX-Motion具有将Portworx卷和Kubernetes资源在集群之间进行迁移的能力。上述样例就是使用PX-Motion帮助团队实现蓝绿部署的过程:对其工作负载和数据在新版本的Kubernetes上进行测试,并帮助团队在新的绿色集群上运行应用程序。在不同版本的Kubernetes上进行真实负载和数据测试,使得运营团队能够在发布新版本的Kubernetes之前获得充足的信心。蓝绿部署并不是PX-Motion唯一的功能,请查看我们其他的PX-Motion博文了解更多。

K8S数据迁移方法

Portworx阅读(6296)评论(0)

Kubernetes改变了我们所有人对计算平台的看法。我们同样也需要改变现代应用程序存储数据的方式。企业越来越多地依赖数字服务来接触客户,传统企业正在Kubernetes上重新部署它们的IT应用和服务。容器的可移植性和Kubernetes自动化的好处意味着在整个IT开发/测试和生产生命周期中我们可以更快、更可靠地交付应用程序。与此同时,企业必须认识到多云部署不仅仅是一种供应策略,而且还是一种对客户最合理的应用程序交付方式。

传统的存储行业还没有做好足够的工作来解决K8S的问题:容器可移植性、K8S自动化和多云交付。Portworx企业版首先为K8S中大数据量的工作负载提供无缝的高可用性,无论这些工作负载是在本地系统还是在公共云中运行,都将提供无缝的高可用性。通过Portworx,开发团队可以获得集成调度程序、完整的数据生命周期管理,以及核心生产功能,如BYOK加密和云备份。

通过与那些已经把应用部署在主要的公有云平台或自有硬件平台上的优秀客户合作,Portworx已经掌握了完整的数据可迁移性、操作自动化、以及将含有大量数据的应用交付到多云部署中的真正能力。

可迁移性和易操作性

通过控制与K8S的集成方式,PX-Motion为大量数据型工作负载带来了充分的可迁移性。现在,类似Kubernetes为无状态工作负载带来的方便一样,我们在有状态工作负载上为客户的数据库、分析堆栈、机器学习和其他类型的应用提供数据服务。只需一个命令,PX-Motion就可以跨集群和跨云移动K8S应用程序、Kubernetes配置和Portworx数据卷。
PX-Motion的功能有:
  • 扩展容量:将较低优先级的应用程序转移到次要集群,为关键集群释放容量。
  • 蓝绿部署:通过应用程序和数据来测试新版本的Kubernetes和Portworx。这一方法同云原生应用程序团队使用蓝绿部署法相同——现在你也可以将它用于您的容器基础架构。
  • 清洁安装:从Kubernetes到Portworx的每一个基础架构安装都是全新安装,而不是就地升级。无论是本地部署还是在公有云中,全新安装提供了一种更稳定的基础架构。
  • Dev/test:以自动化的方式将工作负荷从dev升级到分段集群。因此,它消除了人工准备数据的过程(这些步骤会影响测试准确性)。
  • 迁移:将应用程序和数据从本地部署集群迁移到AWS、谷歌、Azure、IBM或其他地方的云托管Kubernetes集群。同时反过来也支持。
  • 维护:它可在几分钟内迁移整个集群的应用程序和数据,以方便执行硬件的维护服务。

PX-Motion支持跨集群和云迁移,而PX-Central提供了必要的可视性操作界面来管理和控制数据的迁移。管理员和应用程序团队可以在每个应用程序级别上可视化的调度、控制正在进行的迁移的应用状态。

不仅如此,PX-Central还从根本上简化了对量数据工作负荷的管理。通过使用PX-Central,客户可以跨越多个集群或云,来管理、监视和元数据服务。

PX-Central的主要功能有:

  • 多集群管理GUI:为您的所有容器数据需求(包括跟踪容量、配置和监视)提供统一的管理界面。
  • 集中配置和调度:简单设置即可完成关键数据保护机制,包括使用PX-企业版 CloudSnap™完成快照和云中备份。
  • 内置元数据服务:在使用PX-企业版时,消除了客户自己处理etcd服务的繁琐,并使集群更加易于管理。
  • 主动监控:已经为跟踪和分析指标、警报和异常进行了配置,让团队在规模化配置上更有效地操作。

点击鼠标即可完成的K8S企业级备份: PX-Backup & PX-Autopilot

Portworx阅读(3575)评论(0)

Portworx,容器存储与数据管理专业解决方案提供商,对其行业领先的容器原生存储解决方案Portworx Enterprise进行了更新,使其企业用户能够在Kubernetes上对关键应用程序进行扩展、备份和恢复。PX-Backup和PX-Autopilot均用于实现存储容量管理。Portworx通过PX-Backup进入企业级备份市场,使企业用户能够方便而安全地对其所有的Kubernetes应用备份进行云原生方式的管理。PX-Backup在容器领域内的独特性在于它支持使用单个命令进行单个Pod、多个Pod以及整个Kubernetes NameSpace的备份,即便企业使用的是Microsoft Azure、AWS或谷歌存储。
此外,用于进行存储容量管理的PX-Autopilot还使企业能够采用智能化的方式管理存储,仅在需要时扩充容量,从而削减50%的云端存储成本,消除长期以来的云端存储在配置时即收费,而非使用时才收费的问题。
在企业认识到云原生技术对于其数字化转型的巨大作用之后,容器技术被更加广泛的使用。Gartner预测认为,到2022年,超过20%的企业存储容量都将用于支持容器工作负载,而这一数字现在还未达到1%。这样一来,企业就需要容器原生存储平台来解决Kubernetes上运行容器应用中的各种问题。此次更新奠定了Portworx的行业领先地位:唯一的容器原生存储与数据管理全面能力供应商:为Kubernetes上运行的容器应用程序提供快速、可扩展的容器存储,自动化容量管理,备份与恢复,容灾,多云迁移,以及数据安全服务
“企业的数字化转型是由容器和Kubernetes等技术不断推动的。这些技术能够帮助团队快速向用户和客户提供更好的服务,”Portworx首席技术官Gou Rao说,“利用这些新功能,我们正在不断努力实现全栈支持,使用户能够在Kubernetes上运行含有大量数据的应用程序,从而帮助企业实现其转型目标,同时节省成本并满足合规要求。”
PX-Backup

今年早些时候Portworx发布了PX-DR,行业内第一款针对Kubernetes应用的容灾恢复服务。虽然并不是每一个应用程序都需要容灾恢复(DR),但基于市场调查机构451 Research的研究表明,即便对于非关键应用和数据,53%的公司都设定了24小时内恢复数据的RPO目标,因此数据备份对于所有企业的应用程序至关重要。为解决这个问题,Portworx发布了PX-Backup,这是一款针对Kubernetes应用程序的点击式备份与恢复服务。在得到了PX-Backup的扩充之后,Portworx Enterprise的企业用户已经能够对Kubernetes上运行的所有含有大量数据的应用程序进行管理、保障以及备份。
PX-Backup能够捕捉应用程序数据、配置以及Kubernetes对象并将其作为一个单元,使用户能够将关键性的数据存储在任意的S3-兼容的对象存储器中。备份完成后,Kubernetes应用程序就可以通过重新运行Kubernetes部署文件的方式进行恢复和重新部署。此外,PX-Backup还能够对备份中的大量数据进行捕捉,使企业能够回答备份负责人、备份内容、备份时间、备份地点、备份时长等规定与管理方面的重要问题。
其他功能还包括:
  • 这是首次,正在使用云端存储的企业,虽然尚未使用Portworx Enterprise,也可以使用这款为Kubernetes应用程序打造的备份服务PX-Backup。比如企业正在使用类似Microsoft Azure      Managed Disks、Amazon Web Services EBS以及 Google Persistent Disks。
  • Portworx的备份服务甚至可以为Cassandra、Kafka、Elasticsearch以及MongoDB等多节点分布式数据库进行备份,而其他备份服务方式,要达到这样的目标,则需要面临数据损坏的风险
  • 备份的数据可以发送至任何S3-兼容的对象存储器,使备份能够在单独的云或数据中心进行存储和恢复,也可以进行跨云和数据中心的存储和恢复。
PX-Autopilot 实现存储容量管理

Kubernetes能够实现应用程序部署的自动化,但企业也必须能够使其下层基础架构实现自动化,才能确保有足够的计算力和存储来扩展应用。虽然企业在云端获得了按使用量付费的模式,但实际上,企业都是通过过度部署存储空间的方式(通常超出2-3倍),来应对难以衡量Kubernetes上运行的数据服务的存储容量的问题。这意味着他们要为未被使用的存储付费。PX-Autopilot使企业能够通过自动检测存储容量,并在需要的时候才扩充容量的方式节省空间,降低存储费用。PX-Autopilot能够按用户定义的规则,对单个容器的容量或整个存储集群的容量进行扩充。如果不使用PX-Autopilot,则在通常客户使用的企业环境下,采用多步操作过程扩充存储空间将需要花费平台管理员将近20小时的时间。

汉莎航空使用portworx在容器集群架构和DevOps下进行数据管理

Portworx阅读(3207)评论(0)

德国汉莎航空股份公司(Deutsche Lufthansa AG),世界上第五大航空公司。汉莎航空下属的IT公司-汉莎系统公司(Lufthansa Systems),它支撑了汉莎所有线路,百万乘客,从机上到机下,从起飞到降落的所有信息化系统的建设和运营。
汉莎系统开发的机上娱乐系统采用了容器技术作为底层技术支撑。对系统的扩展性,稳定性、模块化、用户友好度,要求非常之高。微服务和容器技术逐渐成为汉莎系统产品开发的底层支撑,并应用DevOps的方式来进行开发和管理。但在这个过程中,汉莎遇到了重要的挑战,就是如何在系统灵活、易用、快速的前提下,保持数据的永久性。

汉莎发现并使用了Portworx来解决问题

我们来看看汉莎系统软件架构师麦克·威廉姆斯(Michael Wilmes)怎么评价Portworx:
 “Portworx与我们的IT系统是一个完美的结合,它对于传统的、云原生、第三方应用,非常便捷和易用。”我们的BoardConnecd系统,采用了微服务架构,运行Docker Swarm环境,和Consul-backed Service Discovery。我们采用了云上的对象存储功能与BoardConnecd系统进行数据交换,,同时我们运维大量的Block存储的服务。

以BoardConnect系统为基础的机上娱乐系统(CMS),采用的是传统的数据管理方式,数据被存储到硬盘和数据库里。当IT希望在项目上自动开启CMS的instance的时候,或者需要管理客户生产环境的每个CMS Instance的时候,就产生了对Docker 调度的强烈需要。

容器能够帮助我们提高开发速度,同时,能够帮我们更好的调节各个应用的部署和管理。以及同时保持容器的数据永久性和灵活性。使用Portworx,我们可以在几分钟内部署完整的CMS系统,并且不需要手动的干预。而之前我们需要几个小时。在生产系统中,Portworx可以帮助我们在不同的Cluster中移动CMS环境,并且同步移动数据。

不论是云环境还是硬件环境,Portworx都有工具能够帮助我们快速部署,这个实在太有价值了。Portworx帮助我们在更多的应用中使用Docker,同时更好的对应用进行生命周期管理。在我们的应用中,容器的Dev&Ops带来了易用性和快捷,就产生进一步的用传统方式管理存储的需要。但这种方式并不简单。某些服务需要基于Block服务的高I/O。而另一些服务,比如CMS和数据库,本身并不支持云存储。而Portworx解决了这样的问题

Operations也有基于Docker的挑战:通过先部署的Host Mounts,再部署Docker命名的卷,我们就能够快速进行开发,但是这些容器就会被绑定到某个具体的Docker host上,而数据被延迟到了下一个host中。这就产生了很大的问题,正常的容器可以在cluster上自动漂移,而需要数据永久性的容器就需要很多的手工动作来完成

一些通常的容器永久性解决方案,主要是建立存储应用和Docker的连接。但是这样的方式产生了1)对于某个存储和云服务的依赖性 2)存储的类型也受限。这样的解决方案无法真正满足需求。而Portworx的方案,则能够很好的解决这些问题。

部署Portworx相对简单,有很好的文档支持。Portworx让我们的Docker变得与Cluster无关,也与底层的软件堆栈无关,我们可以基于不同的云服务提供商和数据中心来进行Docker一致性的管理。同时可以把不同种类的容器用同样的方式来处理,包括云原生微服务,传统的CMS系统,和数据库。Portworx帮助我们同时对CMS,数据库,和文件系统进行自动部署和管理。当Portworx在Docker Cluster上安装完成后,管理容器变得非常简单,可以通过图形化界面,也可以通过命令行的方式,升级也很直接,存储系统可以用JSON来直接调用。

 

Portworx演示:在K8S集群间迁移有状态的应用和数据

Portworx阅读(3566)评论(0)

越来越多的企业选择Kubernetes作为基础架构,它能够帮助我们缩短软件项目上市时间、降低基础架构成本、并提高软件质量。由于Kubernetes比较新,因此IT团队都在学习如何在生产环境中,在Kubernetes上对应用程序进行运行和维护。本文将探讨,当在需要额外的计算能力时,将Kubernetes应用程序迁移至另一个新的集群。
 
Portworx演示视频:https://v.qq.com/x/page/u3014njr3a5.html
需要对当前的Kubernetes集群进行扩充的一些原因
1.某个集群的资源即将被全部占用,你需要将工作负载迁移到新的具有更多的计算资源的地方。
2.你希望使用的服务在另一个区域或云中,但想要使用这些服务,你需要转移应用程序和数据。
3.硬件到期,需要升级硬件到下一代,而新硬件的计算的规格、要求以及内存容量都已经发生了变化,这就导致了迁移的必要性。
4.集群资源受限并且进行扩展instance的成本越来越高,因此你需要采用新的集群架构,这样的集群需要使用网络附加的块存储而非本地磁盘,这样才能够将存储独立于计算进行扩展。
5.开发人员希望将工作负载转移到一个具有不同的硬件、网络、操作系统或其他配置的集群进行测试或分级。
上述所列原因并不详尽,但也说明在许多条件下扩充Kubernetes环境和将工作负载从一个集群迁移到另一个集群是有必要的。这个问题在涉及无状态应用时较为简单,但对于有状态的服务,如数据库、队列、关键存储、大数据以及机器学习应用时等时,你就必须将数据转移到新的、扩容的环境中去,然后应用程序设计才能加速运行。
解决数据移动性问题:PX-Enterprise™新功能
PX-Motion不仅具有对数据进行跨环境转移的能力,它还能够对应用程序配置以及相关的有状态的资源,如PV(永久卷)等进行转移,使得操作团队能够非常方便地将一个卷、一个Kubernetes名字空间、或整个Kubernetes集群在环境之间进行转移,即便其中存在永久数据。
本文将对PX-Motion的功能与能力进行探讨。同时,我们将演示如何将一个Kubernetes命名空间以及其中运行的所有应用程序转移到一个具有资源拓展能力的新的Kubernetes集群上。在这个演示中,集群1表示资源已经过度利用的、不灵活的,已经无法满足我们不断增长的应用程序需求的集群。集群2表示一个更加灵活且可扩展的集群,我们将把工作负载转移到这个集群2上。
除了在集群之间进行整个Kubernetes命名空间的转移之外,我们还将展示如何将配置在集群1中使用本地存储的应用程序,迁移到使用网络附加的块存储的集群2中。
通过这种方式,你将看到我们需要转移真正的数据,而不是通过管理块设备映射这种小伎俩来实现的。
总的来说,在将一个有状态的Kubernetes应用程序转移到另一个集群时,你需要:
  1. 将这两个集群进行配对,从而指定一个目标集群和一个目的集群;
  2. 使用PX-Motion开始迁移,其中包括移动数据卷和配置;

数据和配置迁移完成后,Kubernetes会自动将应用程序部署到新的环境中。

我们开始吧!

配置与设置

在展示中,我们使用google Kubernetes Engine (GKE)作为Kubernetes集群,但你也可以在任意的Kubernetes集群中进行如下的操作。使用Portworx installer online spec generator获得的DaemonSet Spec, 将Portworx安装到各个集群上。逐步完成安装,Portworx安装过程在此不作赘述,可以查看portworx.com上的文档了解如何在Kubernetes上安装Portworx 。环境架构示意图如下。注意集群1和集群2的如下方面:

Cluster Name Machine Type Storage Type
Cluster 1 (Source) n1-standard-2 local-ssd
Cluster 2 (Destination) n1-standard-8 provisioned PDs

在这种情况下,第一个集群(集群1)资源面临限制,操作团队希望从本地SSD转移到更大instance的自动配置的永久磁盘(PD)中。

为什么?本地SSD在处理特定工作负载时较为有效,但其自身也存在着局限性,这也是我们在这里讨论将应用程序从一个命名空间转移到另一个命名空间的原因所在。依照谷歌的描述,本地SSD的限制包括:

  • “由于本地SSD是以物理方式附加到节点的虚拟机instance上的,其中存储的所有数据都只存在于这个节点上。而由于数据是本地存储的,因此你的应用必须要能够面对数据不可用的情况。”
  • 存储在SSD的数据是短期性的向本地SSD写入内容的Pod会在被调度离开这一节点时失去对磁盘中存储的数据进行访问的能力。”     此外,如果节点被撤销、升级或维修,则数据就会被擦除。
  • “我们并不能向现有的节点池添加本地SSD。

Portworx能够克服对上述部分限制,因为它能够将数据复制到集群中的其他提供高可用的主机上。但如果我们希望在不对计算按比例进行扩展的情况下,不断向我们的集群添加额外的存储,那么使用本地存储仍旧会存在一定的限制。上文所述的GKE上的第二个集群使用Portworx Disk Template,从而自动允许Portworx从Google云对磁盘进行管理,这比本地磁盘更加灵活一些。

第二个集群提前运行,现在使用的是自动配置的PD,可以进行工作负载的迁移。

大量应用程序的运行需要更多的计算能力

源集群如下。它是由单个命名空间(NameSpace)内运行的大量应用构成的:Cassandra, Postgres,WordPress和MySQL。所有的这些应用程序都会在集群中产生非常高的负载。如下是demo命名空间内运行的应用。注意,在单个Kubernetes集群上运行多个命名空间是可行且常见的。在演示中,我们只移动一个命名空间,让剩余的其他命名空间继续运行,不做变动。

$ kubectlconfig  use-context <source-cluster>

$ kubectlget po -n demo

NAME                                READY     STATUS    RESTARTS   AGE

cassandra-1-0                       1/1       Running  0          17m

cassandra-1-1                       1/1       Running  0          16m

cassandra-1-2                       1/1      Running   0          14m

cassandra-2-0                       1/1       Running  0          17m

cassandra-2-1                       1/1       Running  0          16m

cassandra-2-2                       1/1       Running  0          14m

mysql-1-7f58cf8c7c-srnth            1/1       Running  0          2m

mysql-2-8498757465-gqs5h            1/1       Running  0          2m

postgres-2-68c5d6b845-c4gbw         1/1       Running  0          26m

postgres-77bf94ccb5-hs7dh           1/1       Running  0          26m

wordpress-mysql-2-5fdffbdbb4-dpqm9  1/1       Running  0          17m

在某一个时间点上,当添加了更多的应用程序,如MySQL数据库时,这个集群就会遭遇其内存限制并出现“OutOfmemory”等错误,见如下。为解决这个问题,我们将demo这个命名空间迁移到一个新的集群上,从而为demo这个命名空间增添新的可用资源。

$ kubectlget po -n demo

NAME                                READY     STATUS       RESTARTS   AGE

cassandra-1-0                       1/1      Running       0         16m

cassandra-1-1                       1/1      Running       0         14m

cassandra-1-2                      1/1      Running       0         13m

cassandra-2-0                       1/1      Running       0         16m

cassandra-2-1                       1/1      Running       0         14m

cassandra-2-2                       1/1      Running      0          13m

mysql-1-7f58cf8c7c-srnth            1/1      Running      0          1m

mysql-2-8498757465-gqs5h            1/1      Running      0          25s

mysql-3-859c5dc68f-2gcdj            0/1       OutOfmemory  0          10s

mysql-3-859c5dc68f-4wzmd            0/1       OutOfmemory  0          9s

mysql-3-859c5dc68f-57npr            0/1       OutOfmemory  0          11s

mysql-3-859c5dc68f-6t8fn            0/1       Terminating  0          16s

mysql-3-859c5dc68f-7hcf6            0/1       OutOfmemory  0          6s

mysql-3-859c5dc68f-7zbkh            0/1       OutOfmemory  0          5s

mysql-3-859c5dc68f-8s5k6            0/1       OutOfmemory  0          9s

mysql-3-859c5dc68f-d49nv            0/1       OutOfmemory  0          10s

mysql-3-859c5dc68f-dbtd7            0/1       OutOfmemory  0          15s

mysql-3-859c5dc68f-hwhxw            0/1       OutOfmemory  0          19s

mysql-3-859c5dc68f-rc8tg            0/1       OutOfmemory  0          12s

mysql-3-859c5dc68f-vnp9x            0/1       OutOfmemory  0          18s

mysql-3-859c5dc68f-xhgbx            0/1       OutOfmemory  0          12s

mysql-3-859c5dc68f-zj945            0/1       OutOfmemory  0          14s

postgres-2-68c5d6b845-c4gbw         1/1      Running      0          24m

postgres-77bf94ccb5-hs7dh           1/1      Running      0          24m

wordpress-mysql-2-5fdffbdbb4-dpqm9  1/1      Running      0          16m

除PX-Motion之外,最新发布的PX-Enterprise也包含了PX-Central™,这是一个用于监视、数据分析和管理的界面,能够对Grafana、Prometheus和Alertmanager进行配置。这些仪表板会对卷、集群、etcd以及其他内容进行监控。在本文所讨论的情况下,查看集群级仪表盘,就能够了解资源方面的问题。

 

如下所示的PX-Central截屏展示了该集群正在使用的内存和CPU的情况。该集群的高CPU和内存占用率为扩展带来了问题,并且由于集群存在过载问题,很有可能导致上文所述的“OutOfMemory(内存不足)”的问题。

使用PX-Motion迁移一个Kubernetes命名空间,包括其数据。

既然已经找到了问题,现在我们来使用PX-Motion将数据迁移到新的集群上。首先,我们将两个GKE集群配对起来,实现源集群和目标集群之间的迁移连接。集群的配对和蓝牙播放器与手机的配对类似。配对过程是为了将两个不同的设备连接起来。

前提条件

如果你正在尝试PX-Migration,请确认已经满足所有的前提条件。

为了将工作负载从集群1迁移到集群2,我们需要对PX-Motion进行配置。首先要做的是配置目标集群。为实现这一点,首先建立对于pxctl (“pixie-cuttle”)的访问,即Portworx CLI。如下是pxctl在具有kubectl访问的情况下在工作站的运作情况。

$ kubectl config use-context <destination-cluster>

$PX_POD_DEST_CLUSTER=$(kubectl get pods –context

<DESTINATION_CLUSTER_CONTEXT> -lname=portworx -n kube-system

-o jsonpath='{.items[0].metadata.name}’)

$ aliaspxctl_dst=”kubectl exec $PX_POD_DEST_CLUSTER

–context <DESTINATION_CLUSTER_CONTEXT>\

-n kube-system /opt/pwx/bin/pxctl”

下一步,对目标集群进行设置使其准备好与来源集群进行配对。目标集群应当首先运行Portworx objectstore。我们需要在目标集群上设置一个对象存储端点,为数据在迁移过程中进行分级的位置。然后,为来源集群创建一个token在配对过程中使用。

$pxctl_dst — volume create –size 100 objectstore

$ pxctl_dst– objectstore create -v objectstore

$pxctl_dst — cluster token show

Token is<UUID>

现在可以创建一个集群配对YAML配置文档,从而应用到来源Kubernetes集群中去。这个clusterpair.yaml文档将包含如何与目标集群调度程序和Portworx存储进行验证的信息。运行如下命令并编辑YAML文档即可建立集群配对:

$ storkctlgenerate clusterpair –context <destination-cluster> > clusterpair.yaml

1.   说明:你可以用你自己的名称替换“metadata.name”。

2.   说明:在如下示例中,options.token可以使用通过上述“cluster token show”命令生成的令牌。

3.   说明:在如下示例中,对于options.ip,将需要一个可访问的负载均衡或Portworx节点的IP或DNS,来访问9001和9010端口。

在使用GKE时,在应用到集群之前,我们需要向Stork添加许可。Strok是由PX-Enterprise使用的Kubernetes的OSS智能调度程序扩展和迁移工具,同时我们还需要知道如何对新集群进行验证,从而对应用程序进行迁移。首先,使用谷歌云指令生成服务账户。然后,对Stork部署和验证进行编辑,从而确保其能够访问目标集群。指令请见如下。

下一步,应用这个集群并使用kubectl与来源集群进行配对。

$ kubectl config use-context <source-cluster>

$ kubectlcreate -f clusterpair.yaml

应用完成后,使用已经设置的storkctl检查集群配对的状态。

$ storkctlget clusterpair

kubectl和pxctl也可以对集群配对进行查看。

$ kubectldescribe clusterpair new-cluster | grep paired

Normal Ready   2m    stork  Storage successfully paired

Normal Ready   2m    stork  Scheduler successfullypaired

$ pxctlcluster pair list

CLUSTER-ID NAME         ENDPOINT                 CREDENTIAL-ID

c604c669   px-cluster-2  http://35.185.59.99:9001  a821b2e2-788f

开始迁移

下一步,有两种方式开始迁移动作:通过storkctl生成迁移 CLI,或参考对迁移进行描述的spec文件。我们使用第二种方法,请见如下,对演示资源和卷进行迁移。

apiVersion:stork.libopenstorage.org/v1alpha1

kind: Migration

metadata:

name: demo-ns-migration

spec:

clusterPair: new-cluster

includeResources: true

startApplications: true

namespaces:

– demo

依照上述spec文档使用kubectl创建迁移。

kubectlcreate -f migration.yaml

检查迁移状态。成功的迁移分为如下步骤:卷→应用程序→完成

$ storkctlget migration

NAME               CLUSTERPAIR   STAGE      STATUS       VOLUMES  RESOURCES   CREATED

demo-ns-migration  new-cluster   Volumes     InProgress  2/12     0/37        08 Nov 18 15:14 EST

 

$ storkctlget migration

NAME               CLUSTERPAIR   STAGE      STATUS       VOLUMES   RESOURCES  CREATED

demo-ns-migration  new-cluster   Application InProgress  12/12     30/37       08 Nov18 15:25 EST

 

$ storkctlget migration

NAME               CLUSTERPAIR   STAGE      STATUS       VOLUMES  RESOURCES   CREATED

demo-ns-migration  new-cluster   Final      Successful   12/12    37/37       08 Nov 18 15:27 EST

为了解哪些资源,如卷、PVC、状态集、复制集处于“进行中”或“已完成”状态,可以使用“kubectldescribe”命令。

$ kubectldescribe migration demo-ns-migration

迁移的状态也可以使用来源Portworx集群的pxctl进行查看。

$ pxctl –cloudmigrate status

 

CLUSTERUUID: c604c669-c935-4ca4-a0bc-550b236b2d7b

 

TASK-ID                                              VOLUME-ID              VOLUME-NAME                               STAGE  STATUS

6cb407e0-e38e-demo-cassandra-data-1-cassandra-1-0    673298860130267347     pvc-2c2604f4-e381-11e8-a985-42010a8e0017  Done   Complete

6cb407e0-e38e-demo-cassandra-data-1-cassandra-1-1    782119893844254444     pvc-7ef22f64-e382-11e8-a985-42010a8e0017  Done   Complete

6cb407e0-e38e-demo-cassandra-data-1-cassandra-1-2    486611245472798631     pvc-b8af3c05-e382-11e8-a985-42010a8e0017  Done   Complete

这样根据集群迁移资源的状态显示,迁移完成了,如下图示展示的就是进行的过程。来自集群1的命名空间、应用、配置以及数据等都迁移到集群2。

随后,查看目标集群以确保应用确实已经完成迁移并且能够良好运行,因为我们使用的是“startApplications: true”属性。

$ kubectl config  use-context<destination cluster>

$  kubectl get po -n demo

NAME                                READY     STATUS    RESTARTS   AGE

cassandra-1-0                       1/1       Running  0          7m

cassandra-1-1                       1/1      Running   0          5m

cassandra-1-2                       1/1       Running  0          4m

cassandra-2-0                       1/1       Running  0          7m

cassandra-2-1                       1/1       Running  0          5m

cassandra-2-2                       1/1       Running  0          4m

mysql-1-7f58cf8c7c-gs8p4            1/1       Running  0          7m

mysql-2-8498757465-4gkr2            1/1       Running  0          7m

postgres-2-68c5d6b845-cs9zb         1/1       Running  0          7m

postgres-77bf94ccb5-njhx4           1/1       Running  0          7m

wordpress-mysql-2-5fdffbdbb4-ppgsl  1/1       Running   0         7m

完美! 所有的程序都在运行中! 现在我们返回PX-CentralGrafana仪表板就可以看到集群上使用的内存和CPU都变少了。该截屏显示的是工作负载迁移后的工作节点的CPU和内存使用情况。

这正是我们希望达到的效果。如下是GKE仪表板上显示的集群1和集群2之间可用CPU和内存的量,因此上述结果是有效的。

现在我们拥有了额外的计算力,我们就可以创建额外的MySQL数据库了。这个数据库将在新集群上拥有足够的资源进行运行。

$ kubectlcreate -f specs-common/mysql-3.yaml

storageclass.storage.k8s.io”mysql-tester-class-3″ created

persistentvolumeclaim”mysql-data-3″ created

deployment.extensions”mysql-3″ created

$ kubectlget po -n demo

NAME                                READY     STATUS    RESTARTS   AGE

cassandra-1-0                       1/1      Running   0          22m

cassandra-1-1                       1/1       Running  0          20m

cassandra-1-2                       1/1       Running  0          18m

cassandra-2-0                       1/1       Running  0          22m

cassandra-2-1                       1/1       Running  0          20m

cassandra-2-2                       1/1       Running  0          18m

mysql-1-7f58cf8c7c-gs8p4            1/1       Running  0          22

mysql-2-8498757465-4gkr2            1/1       Running  0          22m

mysql-3-859c5dc68f-6mcc5            1/1       Running  0          12s

postgres-2-68c5d6b845-cs9zb         1/1       Running  0          22m

postgres-77bf94ccb5-njhx4           1/1       Running  0          22m

wordpress-mysql-2-5fdffbdbb4-ppgsl  1/1       Running  0          22m

 

成功!

集群扩增的益处是显而易见的。用户和操作员可以将旧的命名空间或应用从来源集群上删除,也可以直接将整个集群删除掉,从而回收这些资源。新的集群使用的是自动配置PD而非本地SSD,因此其存储与计算能力都能够依照IT团队的需求进行扩展。

 

结论

PX-Motion具有着将Portworx卷和Kubernetes资源在集群之间进行迁移的能力。上述案例就利用了PX-Motion这一功能,使得团队能够对Kubernetes环境实现无缝扩增。在Kubernetes上的环境之间对命名空间、卷或整个应用程序进行迁移就变得轻而易举了。扩增并不是PX-Motion唯一的功能,请查看我们其他的PX-Motion系列文章了解更多信息。

K8s项目最高技术委员会新增4人,2人来自红帽

中文社区阅读(4818)评论(0)

Kubernetes社区最近一次的技术委员会票选结果出炉,这次选出了4名新的委员,Christoph Blecker和Derek Carr来自红帽,K8s大规模部署产品提供商Loodse也有一人入选,另外还有一位Paris Pittman则来自Google。他们四人任期2年,将与现有3名委员共同主导K8s的未来发展战略方向。现有3人,其中2人来自VMware,1人来自Google。这意味着,本次K8s技术委员会中,Google、红帽和VMware的人数相同,将成为三巨头主导发展K8s的局势。

Кластерный Индикатор Для Mt4

数人云阅读(856)评论(0)

рынок

Если последовательность роста или падения https://fxdu.ru/ нарушена, советник открывает сделки. Высокочастотная торговля, или высокочастотная торговля, или стратегии HFT на финансовых рынках, которые позволяют со… Рады Вам объявить о выходе нового советника “Crypto Mainer”.

рынке

  • Обязательным условием входа в позицию является окончание дня, на котором строились уровни.
  • Каждая свеча имеет свою основу на рабочем графике.
  • Этот аспект нужно понимать, и с его применением нужно осознать, что настроения рынка быстрее отразится не на цене инструмента, а на объеме сделок.

И на сегодня все чаще востребованными являются посредники, которые торгуют долларами на этой торговой площадке. Сегодня мы затронем тему вывода Ваших средств у брокера Pocket Option. Сразу оговоримся, что в трейдинге есть много случаев, когда компания не выводит деньги клиентов, порой даже блокируя аккаунты, как например это делают в Quotex.

Скачать [Индикатор] ClusterChart Indicator – Кластерный график на форексе

Как известно, именно столкновение интересов быков и медведей заставляет цену актива двигаться. В этом аспекте нужно понимать, что изменение настроений рынка в большей степени отразится не на цене инструмента, а на объеме сделок, и только после этого цена начнет свое движение. Меня зовут Виктор Брель, я являюсь трейдером Академии Форекса. На текущий момент аналитический портал Cluster Delta предлагает ряд индикаторов, которые используют данные, поступающие с фьючерсного рынка. И сегодня, в данной статье, мы рассмотрим индикатор фьючерсных объемов и индикатор профиля рынка . Для того чтобы получить информацию о дельте объемов, предлагаю вам скачать кластер дельта объемы.

цена

И не будет открывать торговые позиции автоматически. Торговля на валютном рынке Форекс сопряжена с финансовыми рисками и подходит не всем инвесторам. Ниже мы видим, что можно провести уровни, подтвержденные объемом, и получить зону сопротивления, которая впоследствии была пробита. При возврате цены нет ни крупных кластеров, ни остановки цены в месте пробоя. Поэтому можно предположить, что произошел захват ликвидности на стопах покупателей и тех, кто входил на пробой уровня.

САМАЯ ЛУЧШАЯ АНТИКРИЗИСНАЯ СТРАТЕГИЯ, КОТОРАЯ РАБОТАЕТ ПРЯМО СЕЙЧАС “Старички”, особенно ВИПы, имеют такой индикатор как direction. Мы его взяли, поколдовали и сделали трендовую скользящую. Используем в качестве трендовой (торгуем только в направл… Советник – разгонник, при должном везении удваивает депозит за 1-2 недели. Настраиваемые параметры лотности, шага и алгоритма открытия сделок. YETTI – это автоматизированный торговый алгоритм, представляющий собой универсального скальпера торгующий на тайм-фрейме м1 на ряде отобранных пар.

Кластерный анализ Форекс в трейдинге — что это? Обзор индикаторов объема для форекс от ClusterDelta Кластер дельта объемы

У вас также есть возможность отказаться от этих файлов cookie. Но отказ от некоторых из этих файлов cookie может повлиять на ваше использование данного веб-сайта. Какой из рассмотренных 6 способов более точный – правильного и однозначного ответа нет. Каждый сам должен решить для себя, руководствуясь своими навыками, знаниями.

работы

А индикаторы объема Форекс в этом случае, наряду с другими алгоритмами, помогают понять эти закономерности и суть трейдинга в целом. Предварительный анализ финансового состояния рынка – необходимость перед использованием индикаторов. Нанесение инструмента на график упрощает визуальную информацию.

Рекомендую использовать на счете для снижения просадки. Если просадка более 70%, рекомендую долить счет, так как роботу нужны свободные средства для работы и обработки этой просадки. Alpha Z – это автоматическая торговая система, разработанная для платформы Metatrader 4.

Индикаторы Форекс

Тиковые сведения, которые отображают число тиков, то есть изменений что такое плечо на бирже, за единицу времени. Проще говоря, это своеобразный счетчик, который фиксирует колебания котировок без акцента на денежную сумму каждой из совершенных сделок. При каждом росте или снижении котировок движение приобретает большую значимость и силу, если подкрепляется соответствующими объемами. Горизонтальные, которые размещаются непосредственно на графике с левой стороны и представлены уровневой шкалой. Они наглядно демонстрируют стоимость актива, в районе которой игроки провели больше всего сделок. В качестве актива могут быть ценные бумаги, фьючерсы, валюты и так далее.

значение

Чаще всего трейдеры торгуют по классическим трендовым торговым системам, но можно торговать и в контр-тренд, против большинства трейдеров. Индикаторы для расчета кластеров помогают анализировать разницу между спросом и предложением, и позволяют определить, кто одержал верх – медведи или же быки. Это дает шанс торговать в ту же сторону, что и крупные участники рынка, двигающие цену.

А вот если бы использовали Кластер Дельта, то могли бы вовремя заметить, что график собирается совершить откат или разворот, так как объемы рынка поменялись. И не стоит забывать, что успешная торговля не может вестись без хорошего брокера, найти которого можно в нашем рейтинге брокеров бинарных опционов. Также данная версия индикатора Scalper Signal продается в сети за $10, так как в нее встроены алерты, но с нашего сайта для ознакомления индикатор можно скачать бесплатно. Индикатор Closed Cycle обладает хорошей точностью, Поскольку сила валют измеряется конкретными цифрами. Поэтому можно сказать, что этот инструмент дает объективную картину рынка, которая всегда пригодится для принятия решения, рассматривать ли данный актив для входа или нет.

Этот урок придется по душе тем, кто задумался о . Второй, заслуживающий внимания индикатор из пакета отображает разницу между объемом, прошедшим по Ask и отдельно — по Bid. Тем не менее, ничто не мешает использовать показания этого для своего индикатора, уже с нормировкой. Обратите внимание, как точно отрабатывают уровни максимальной проторговки предыдущего дня, отмеченные красными линиями. Цена подходит к ним и отбивается, затем пробивает и идет дальше.

Помогают игрокам подбирать оптимальные точки для входа в сделки и выхода из них. Но как только методики становятся более понятными игроку, а их применение приносит результаты, ситуация меняется. Каждый участник рынка формирует собственный набор наиболее эффективных помощников, с помощью которых и воплощает в жизнь свои торговые идеи. Желтые столбики в гистограмме обычно минимальной высоты.

Главная отличительная черта этого алгоритма в том, что при изменении таймфрейма его данные V остаются прежними. Благодаря этому индикатору трейдер визуально может оценить уровни поддержки, сопротивления, а также зоны неопределенности. Этот алгоритм показывает тиковый объем в отдельном окне для конкретной свечи или бара либо для целого периода. Является индикатором горизонтального V, его данные представлены в виде гистограммы. Именно от их корректности и будет зависеть правильность построения диаграмм.

Как и свидетельствует название, для их расчета используются объемы активов . HighVolumeBar VertikalHistogram – популярный алгоритм поиска объемов. Особенность работы – отображение одинакового значения на всех отрезках таймфрейма (уровень – не выше Н4). Доступен для установки начинающим и профессиональным трейдерам. VOLUMECLUSTER 2_1 – написан опытным программистом по авторскому техническому заданию. В работе советника используются чистые первоисточники – цена, объёмы и фибо.

Смотрите дополнительно видео по теме статьи – Кластерные инструменты для торговли на Форекс

Далее остается лишь следовать за ними, открывая сделки в сторону соответствующего тренда. К примеру, если ClusterDelta показывает резкий рост объемов в сторону покупок, то следует открываться именно в этом направлении, устанавливая на график Buy-ордер. Если же по индикатору будет наблюдаться резкий рост объемов в сторону продаж, то соответственно, торговать нужно в сторону нисходящего тренда. Данный инструмент показывает кластерные объемы рынка. Его применяют как в целях дополнительной фильтрации сигналов, так и для определения основного тренда рынка и выбора нужной валютной пары для торговли.

Euro Master – это современный, полностью автоматизированный робот разработан для торговли на EURUSD. Робот используют уникальную технологию искусственного интеллекта для анализа рынка, чтобы найти лучшие точки входа. Втехническом анализедля построенияиндикаторовчаще всего используется цена закрытия — Close. По этой цене строятся, например,скользящие средние. Также могут использоваться цены High и Low, реже — Open. Многие специалисты проводят аналогии между этим алгоритмом и RSI, однако в первом случае при расчетах используется еще и объем.

Steps To Take When You’re Depressed and Can’t Find A Job

数人云阅读(549)评论(0)

Or borrow something from a friend or family member. Make sure you have the proper fonts, font sizes, and spacing. Make a meal plan so that you can cook all of your meals at home. Doing this will take a bit of extra planning and work, but it will save you money in the long run.Pack a lunch and snacks if you will be away from home for the day.

wood screw broke off – Manatt, Phelps & Phillips, LLP

wood screw broke off.

Posted: Sat, 25 Feb 2023 08:00:00 GMT [source]

But you’ll also limit this time to work on other productive tasks. Rather than blasting out as many resumes as you can handle, or only looking once a day, you should take a more targeted approach. You may even fear being forced to take a job you don’t enjoy simply for the paycheck. Nobody is perfect, but we’re blessed with the opportunity to grow from our mistakes — adopting a “growth mindset” will help you embrace and improve from errors.

Recommended Reading:

Contact your credit card company and loan providers. To make sure that you don’t get charged late fees or default on a loan, contact your credit card company and loan providers right away. If you quit, got fired or were laid off from your job, you might qualify for unemployment benefits which would provide you with some money to help you survive. Each state has different rules for who can receive unemployment.

In March of 2022, nonfarm payrolls increased by 431,000. So, it is a great time to find a job, but without a proper search strategy in place, it’s challenging to secure it. This means that companies are pulling from a national applicant pool, making competition for highly sought-after roles much more intense.

More Navigate Life

At job search depression we believe that success is the result of hard work, education and persistence. Examples of PhDs who have successfully transitioned should not be considered typical and there is never a guarantee of results. Information provided is informative in nature and is not intended to be legal, vocational or financial advice. By using this website or any related materials you agree to take full responsibility for your own results, or lack thereof. Our team is here to support you, but you should always do your own due diligence before making any investment or taking any risk.

career advice

There is no reason why you should let the negative academic culture limit your future prospects and leave you feeling hopeless. It was not just a successful transition, but a healthy one, where I was ready to balance the demands of industry.

Boost energy and motivation (and maybe change your life) — 19 moves

Unemployment counselors need to recognize that several stages occur throughout the jobseeking process. Recognizing these stages will allow you to support your clients throughout the jobseeking process each step of the way. Support your clients in creating a dynamic resume for them. Assist them with basic structure, grammar, and spelling, and refer to online resources for writing and coaching. Show them how to stand out from the crowd, highlight their skills, and customize their resume for each job they apply to. Unemployment brings with it poor self-esteem and self-confidence.

  • That said, there may be times when you choose to disclose your condition—or when you at least shouldn’t be afraid of hiring managers finding out.
  • Take your list of daily to-dos, and fit them to your ideal structure.
  • If you’re finding and applying for jobs that you like and you’re the perfect fit for, but fail to score an interview, you may start questioning everything.
  • And remember, if you have the signs or symptoms of depression don’t be afraid to seek help from a healthcare professional.
  • One thing which is really useful is to take a volunteer role, one or two days per week for at least 4-6 weeks.
  • For more job-related skills, consider Udemy.com.

istio-bookinfo入门示例

Daniel_Ji阅读(8105)评论(0)

本示例部署一个名称为bookinfo的应用程序,该应用程序由四个单独的微服务组成,用于演示各种Istio功能。该应用程序用于显示书籍有关的信息,类似于在线书籍商店的单个目录条目。页面上显示的是书的说明,书的详细信息(ISBN,页数等)和一些书评。该应用程序是由多种多语言编写的,即微服务以不同的语言编写。值得注意的是,这些服务不依赖于Istio。Bookinfo应用程序分为四个单独的微服务:

  • productpage:productpage微服务调用details和reviews微服务来填充页面。
  • details:details微服务包含图书的详细信息。
  • reviews:reviews微服务包含书评,它还调用ratings微服务。
  • ratings:ratings微服务包含书的排名信息。

其中,reviews微服务提供了3个版本:

  • 版本v1不调用ratings服务。
  • 版本v2调用ratings服务,并将每个等级显示为1到5个黑星。
  • 版本v3调用ratings服务,并将每个等级显示为1到5个红色星号。

该应用程序的端到端体系结构如下所示。

Bookinfo Application

1. 应用部署

使用Istio运行bookinfo application示例时,无需更改应用程序本身的任何内容。这里只需要在启用Istio的环境中进行配置和运行服务,并为每个服务注入Envoy Proxy辅助工具。所有微服务都将与Envoy sidecar打包在一起,该Envoy sidecar用于拦截对服务的入站和出站。基于Istio部署的bookinfo application结构如下:

Bookinfo Application

1.1.  部署示例应用

通过下面的步骤部署booking application示例应用:

  • 默认情况,在Istio上部署安装应用使用自动Sidecar 注入。使用以下命令将托管应用程序的名称空间(此处为default)的标记为istio-injection=enabled:
$ kubectl label namespace default istio-injection=enabled
  • 使用以下kubectl命令部署应用程序:
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

该命令将启动bookinfo应用程序体系结构图中显示的所有四个服务。评论服务的有3个版本,即v1,v2和v3。在实际部署中,随着时间的推移会部署新版本的微服务,而不是同时部署所有版本。

  • 确认所有服务和Pod均已正确定义并正在运行:
$ kubectl get services
NAME                      CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
details                    10.0.0.31    <none>        9080/TCP             6m
kubernetes                 10.0.0.1     <none>        443/TCP              7d
productpage                10.0.0.120   <none>        9080/TCP             6m
ratings                    10.0.0.15    <none>        9080/TCP             6m
reviews                    10.0.0.170   <none>        9080/TCP             6m

$ kubectl get pods
NAME                                READY     STATUS    RESTARTS   AGE
details-v1-1520924117-48z17                 2/2       Running   0          6m
productpage-v1-560495357-jk1lz              2/2       Running   0          6m
ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
reviews-v3-1813607990-8ch52                 2/2       Running   0          6m

1.2.  创建入口网关

现在Bookinfo服务已启动并正在运行,还需要使该应用程序可以从Kubernetes集群外部访问。

  • 定义应用程序的入口网关:
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
  • 确认网关已创建:
$ kubectl get gateway
NAME               AGE
bookinfo-gateway   32s

2.  访问应用

通过下面的命令,将productpage微服务以NodePort模式暴露到Kubernetes集群外:

$ kubectl expose deployment/ productpage-v1 –type=NodePort

通过下面的命令,获取对外暴露的端口(这里为31532):

$ kubectl get svc

在浏览器地址中输入:http://{宿主机ip}:31532 浏览器将进入productpage页面:

3.  创建默认目标规则

在使用Istio控制Bookinfo版本路由之前,需要在目标规则中定义可用的版本,称为子集。运行以下命令为Bookinfo服务创建默认目标规则:

如果启用双向TLS,请执行以下命令:

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

此YAML配置文件的内容如下:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: productpage
spec:
  # 此host的名称对应于Kubernetes中服务的名称
host: productpage
  subsets:
  - name: v1
# 标签的键值对对应于Kubernetes中标签一致的pod
labels:
      version: v1
---

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  # reviews存在v1、v2和v3三个子集,分别对应于Kubernetes中三个Pod
subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
---

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v2-mysql
    labels:
      version: v2-mysql
  - name: v2-mysql-vm
    labels:
      version: v2-mysql-vm
---

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: details
spec:
  host: details
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---

如果确实启用了双向TLS,请执行以下命令:

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml

等待几秒钟,以便传播目标规则。可以使用以下命令显示目标规则:

$ kubectl get destinationrules -o yaml

4.  路由请求

在bookinfo示例中包含四个单独的微服务,每个微服务具有多个版本。reviews微服务有3个版本被部署并同时运行。在浏览器中访问Bookinfo应用,然后刷新几次,会注意到书评输出有时包含星级,有时则不。这是因为没有明确的默认服务版本可路由,Istio以循环方式将请求路由到所有可用版本。

4.1. 创建虚拟服务

为微服务设置默认版本的虚拟服务,从而实现将流量路由到特定的一个版本。在这种情况下,虚拟服务会将所有流量路由到特定版本下的每个微服务。在这里即可以通过kubectl创建虚拟服务,也可以通过小米的Naftis创建虚拟服务。

4.1.1.  通过kubectl创建

此处通过kubectl创建虚拟服务:

  • 运行以下命令以应用虚拟服务:
$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
  • 使用以下命令显示定义的路由:
$ kubectl get virtualservices -o yaml

下面是新路由定义的代码示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  # 定义名称为productpage的虚拟服务
name: productpage
spec:
  hosts:
  - productpage
  http:
  - route:
    # 目的路由的主机为productpage,子集为v1
- destination:
        host: productpage
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v3
---

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
---

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: details
spec:
  hosts:
  - details
  http:
  - route:
    - destination:
        host: details
        subset: v1

4.1.2.  通过Naftis创建

此处通过Naftis可视化创建虚拟服务:

  • 登录Naftis,并在“服务管理”中定位到“productpage”微服务。

  • 进入“productpage”微服务主页,点击右上角的“执行任务”。

  • 进入“执行任务”页面后,点击RequestRouting类型的“创建任务”。

  • 在“创建任务”页面,填写命名空间信息和各个微服务的主机和目标地址子集:

  • Namespace:default
  • Host:productpage DestinationSubset:v1
  • Host:details DestinationSubset:v1
  • Host:ratings DestinationSubset:v1
  • Host:review3 DestinationSubset:v3

4.2. 测试新的路由配置

在浏览器中打开Bookinfo网站,多次刷新页面,页面中的评论部分均显示星级。这是因为将Istio配置为将评论服务的所有流量路由到了reviews:v3。

 

作者简介:季向远,北京神舟航天软件技术有限公司产品经理。本文版权归原作者所有。

 

 

Kubernetes v1.16 重磅发布!

中文社区阅读(36227)评论(0)

美国时间 9 月 18 日,Kubernetes 迎来了 2019 年的第三个新版本 1.16。K8sMeetup 中国社区第一时间整理了 Kubernetes v1.16 的亮点内容,为大家详细介绍此版本的主要功能。

根据 Release Note 介绍,Kubernetes v1.16 由 31 个增强功能组成:8 个进入稳定,8 个进入 Beta,15 个进入 Alpha。

一、新版本四大主题

新版本主要围绕以下主题:

1、Custom resources:CRD 是对 Kubernetes 的扩展,用以服务于新的资源类型,自 1.7 版本以来,CRD 已经在 Beta 版中可用。在 1.16 版本中,CRD 正式步入通用可用性(GA)。

2、Admission webhook:Admission webhooks 作为 Kubernetes 扩展机制被广泛使用,并且自 1.9 版本以来已经在 Beta 版中可用。在 1.16 版本中,Admission webhook 也正式步入通用可用性(GA)。

3、Overhauled metrics:Kubernetes 广泛使用一个全局 metrics registry 来注册要公开的 metrics。通过实现 metrics registry,metrics 可以以更透明的方式注册。而在这之前,Kubernetes metrics 被排除在任何稳定性需求之外。

4、Volume Extension:新版本有大量和 Volume 及 Volume 修改相关的增强。CSI 规范中对 Volume 调整的支持正在转向 Beta 版,它允许任何 CSI spec Volume plugin 都可以调整大小。

二、其他值得注意的功能更新

在 K8sMeetup 社区之前发布的《Kubernetes v1.16 Beta 前瞻》中,社区已经归纳了 Beta 版中比较受关注的一些改动。在今天发布的新版本中,官方重提了其中部分有趣更新。

  • 拓扑管理器是一个新的 Kubelet 组件,旨在协调资源分配决策,以提供优化的资源分配(见《Kubernetes v1.16 Beta 前瞻》);
  • IPv4/IPv6 双栈允许将 IPv4 和 IPv6 地址分配给 Pods 和服务(见《Kubernetes v1.16 Beta 前瞻》);
  • API Server Network Proxy 在 1.16 版本中进入 Alpha;
  • Cloud Controller Manager Migration 增强;
  • 继续淘汰 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API,这些扩展会在 1.16 版本中被弃用(见《用户须知:Kubernetes v1.16 将删除被弃用的 API》)!

三、已知的问题

etcd 和 KMS plugin 的健康检查没有在新的 livez 的 和 readyz 端点中公开。这将在 v1.16.1 中得到修正。

运行iptables 1.8.0 或更新版本的系统应以兼容模式启动它。请注意,这将影响所有版本的 Kubernetes,而不仅仅是 v1.16.0。有关此问题的更详细信息以及解决方案,请参阅官方文档。

四、紧急升级须知

注意!此内容为升级前必读!

1、集群生命周期

amd64 的容器镜像 tar 文件现在将包含 RepoTags manifest.json 的体系结构。如果你正在使用 Docker 清单,则没有可见的更改 (#80266)。

在 TLS 引导用户依赖 bootstrap-kubelet.conf 之后,kubeadm 现在已删除 bootstrap-kubelet.conf 文件,用户应该切换到包含节点凭证的 kubelet.conf 文件(#80676)。

beta.kubernetes.io/metadata-proxy-ready、

beta.kubernetes.io/masq-agent-ds-ready、

beta.kubernetes.io/kube-proxy-ds-ready(节点标签)不再添加到新节点上。

  • ip-mask-agent addon 开始使用标签node.kubernetes.io/masq-agent-ds-ready作为其节点选择器;
  • kube-proxy addon 开始使用标签node.kubernetes.io/kube-proxy-ds-ready作为其节点选择器;
  • metada -proxy addon 开始使用标签cloud.google.com/metada -proxy-ready作为其节点选择器。

2、存储

当为 CSI 驱动启用 PodInfoOnMount 时,Volume 上下文中新的 csi.storage.k8s.io/ephemeral 参数允许驱动程序的 NodePublishVolume 实现根据具体情况确定该 Volume 是临时性的还是正常的持久卷(#79983)。

为 VerifyVolumesAreAttached 和 BulkVolume-Verify 添加 CSI Migration Shim(#81792)。

新版本将 VolumePVCDataSource(克隆)特性提升到 Beta 版(#81792)。

将 in-tree 和 CSI Volume 的 Volume Limits 集成到一个 scheduler predicate 中。 (#77595)

注:更多内容请见 GitHub,社区后续会视情况对新版本做更深入的解读,敬请期待!

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.16.md#v1160

来源:GitHub

翻译:bot(才云),译文:K8sMeetup社区

技术校对:Lichuan(才云)