• [技术干货] 在华为云 CCE 上搭建博客系统
    在本帖子中,我们借助华为云容器引擎(CCE)服务,在商业云平台上搭建 Kubernetes 集群。经过上一篇帖子,我们会发现了手动部署 kubernetes 平台的种种问题与困难。为了更方便地协助个人和企业客户搭建 Kubernetes,现今的商业云平台通常提供一站式的 Kubernetes 集群服务。客户只需操作图形用户界面,即可创建云平台、部署云负载。商业云平台也可以轻易地支持容灾与动态扩缩容,这些都是支撑一个真正商业后端的必备属性。在本实验中,我们将在华为云 CCE 上购买一个 Kubernetes 集群,并搭建一个与上篇帖子相同的 wordpress+mysql 博客系统。在这个过程中,读者们可以体会商业云平台的魅力,了解到 真实场景中云平台的使用方式。实验过程我们所创建的 CCE 集群的集群信息、工作负载、服务发现三个页面的截图如下:所创建的博客内容的截图如下: 思考与总结在华为云 CCE 上部署 kubernetes 应用与手动部署 kubernetes 应用的不同之处在华为云 CCE 上部署 kubernetes 应用相比来说更加方便,因为我们可以利用 CCE 提供的一个可视化的控制台快速部署和管理 kubernetes 应用,无需自行搭建 Docker 和 Kubernetes 集群。此外,CCE 还提供了许多其他便捷的功能,比如自动伸缩、应用监控、多租户支持等,可以帮助我们做到一键创建和升级 Kubernetes 容器集群。我们在上篇帖子中完成了手动部署 Kubernetes 的过程,跟本贴在 CCE 上部署相比明显更加复杂,需要我们手动配置 kubernetes 集群,并且需要使用 kubectl 命令行工具来部署和管理应用。但手动部署时可以根据我们特定的需求设置集群,这可能可以使得集群更适应我们的需求。
  • [公告] 华为云CCE邀您共同打造最佳容器化上云体验
    在容器化日益成为中大型企业上云主流选择的情况下,容器服务如何能帮助用户更简单快捷的上云、高效可信赖的运维?为了更好的解决这个问题,CCE用户体验团队在今年进行了大量的用户现场调研,聆听用户的声音。围绕行业普遍存在的配置复杂门槛高、运维信息分散效率低、升级难度大等问题打造全新CCE体验,提出“易用:一站式集群配置,开箱即用”、“场景化:聚焦用户场景,无跳出运维管理”和“透明化:所见即所得,将复杂的过程透明化”的设计理念,同时融合了华为云全新设计语言,为用户打造集群开箱即用、异常快速高效定位、任务透明可信赖的容器化上云体验。图1 容器化体验改进为了持续提供更好的产品体验,我们非常期待您对CCE产品的评价,如果您有任何的建议,欢迎通过页面底部的“意见反馈”向我们反馈,我们会认真听取您的宝贵建议。设计语言焕新升级CCE服务控制台应用了华为云全新的设计语言,这套设计语言的核心特点是更加贴近用户使用感知、着力提升用户使用友好性、降低使用难度,围绕用户关注点构建信息展现结构,构建更加友好、便捷的使用体验。直观、聚焦:关键信息抽取,同时减少页面复杂色,清晰直观,希望可以帮助用户更聚焦重点。图2 集群列表优化场景化:基于用户实际场景的有效信息汇聚,无需跨服务跳页面。图3 云原生观测优化易用:一站式集群配置,开箱即用不少用户反馈容器技术门槛相对较高,很多繁杂的配置用户自行摸索起来,效率低。日志等一些服务的开通和使用,需要到不同的服务里多次跳转等。针对这些复杂的配置问题,我们推出配置中心。在配置中心里,将配置项进行分类,方便用户统一管理同一类型配置。针对具体的配置项,我们提供配置解释、配置建议、给出配置风险,帮助用户“自己搞定”配置。图4 配置中心优化在运维管理上,我们推出云原生观测中心,实现运维管理的开箱即用。云原生观测中心将监控、日志服务集成进CCE服务,用户可以在CCE的页面内完成监控、日志的一键开通,并且在使用过程也不需要跳出CCE服务。图5 日志管理优化场景化:聚焦用户场景,无跳出运维管理在实地拜访中,我们发现工程师近80%的工作场景都在进行运维相关的工作。而之前CCE提供的是基础的监控能力,用户需要跳转去应用运维管理服务,查看详细监控和告警。围绕查看监控、告警的场景,我们希望用户能更聚焦对应的资源对象,我们提出“以应用为中心,构筑端到端的一站式运维体验”的设计理念。围绕集群、节点、负载和Pod,我们提供融合了资源健康度和监控的独立运维页面,方便用户聚焦关注的资源。用户在一个页面即可快速评估资源健康度和异常项,同时查看各层级完成监控。图6 监控中心优化围绕告警,CCE集成了应用运维管理的告警通知和告警规则、消息通知服务的联系人管理,用户无需跳转,即可在CCE快速查看处理告警和进行配置。图7 告警中心优化透明化:所见即所得、将复杂的过程透明化像集群升级等关键操作,具体变更点及影响相对模糊,容易引起用户顾虑。对于此类操作,我们通过信息预先告知、过程可视可回退等设计理念,让用户有充分的知情权和掌控感,降低用户顾虑。以集群升级为例,由于用户未清晰感知相关原理和可能存在的影响,升级过程不感知进度细节,不敢轻易升级。本次优化中,我们通过可视化等手段预先为用户呈现讲解原地升级的概念和原理,告知用户升级对插件等功能的影响,降低用户顾虑。图8 集群升级流程展示图9 集群升级插件影响同时对于升级过程,如升级检查,拓扑图形式呈现检查过程,用户可感知资源视角的进度和异常情况。图10 集群升级过程可视化对于升级过程,用户如果遇到异常,可以随时调出伴随式监控,辅助定位问题,无需跳转查看监控。图11 集群升级过程监控未来愿景华为云CCE致力于为用户提供配置更简单、管理更便捷、流程更透明的容器服务。未来我们将持续打磨CCE的使用体验,力争为用户带来更多价值。如果您有任何的建议或意见,可以通过页面下方的反馈意见告知我们,您的任何意见对我们来说都很重要。
  • [公告] 全版本跟随!CCE将从1.27版本开始对所有Kubernetes版本提供商业支持
    华为云云容器引擎(Cloud Container Engine,简称CCE)服务Kubernetes版本支持策略将进行优化,从Kubernetes 1.27版本开始,CCE将对每个社区版本均提供商用支持。CCE集群1.27版本计划于2023年10月正式商用,CCE集群1.28版本计划于2023年12月支持。图1 版本支持策略升级CCE 提供高度可扩展的、高性能的企业级Kubernetes集群。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应用程序。服务体验请访问:cid:link_0云容器引擎CCE
  • [问题求助] 创建节点池_云容器引擎 CCE_用户指南_节点池_华为云
    标记内容:创建节点池时,创建节点的数量文档反馈:节点池数量有没有限制,应该说明下,其次节点池扩容单次不能超过50个,也没有说明下 页面链接:https://support.huaweicloud.com/usermanual-cce/cce_10_0012.html
  • [问题求助] 集群外访问pod
    各位!问题是这样,CCE集群所在VPC外的ECS curl CCE中的pod 端口不通怎么回事,对等连接中的路由已经打通。
  • [技术干货] 容器引擎CCE与微服务引擎CSE笔记分享
    一、容器引擎CCE云容器引擎(Cloud Container Engine,简称CCE)提供高度可扩展的、高性能的企业级Kubernetes集群,支持运行Docker容器。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应用程序。云容器引擎提供Kubernetes原生API,支持使用kubectl,且提供图形化控制台,让您能够拥有完整的端到端使用体验,使用云容器引擎前,建议您先了解相关的基本概念。集群(Cluster)集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等云资源。您可以理解为集群是“同一个子网中一个或多个弹性云服务器(又称:节点)”通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。节点(Node)每一个节点对应一台服务器(可以是虚拟机实例或者物理服务器),容器应用运行在节点上。节点上运行着Agent代理程序(kubelet),用于管理节点上运行的容器实例。集群中的节点数量可以伸缩。节点池(NodePool)节点池是集群中具有相同配置的一组节点,一个节点池包含一个节点或多个节点。虚拟私有云(VPC)虚拟私有云是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。您可以在VPC中定义与传统网络无差别的虚拟网络,同时提供弹性IP、安全组等高级网络服务。安全组安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当弹性云服务器加入该安全组后,即受到这些访问规则的保护。详细介绍请参见安全组。集群、虚拟私有云、安全组和节点的关系如下图,同一个Region下可以有多个虚拟私有云(VPC)。虚拟私有云由一个个子网组成,子网与子网之间的网络交互通过子网网关完成,而集群就是建立在某个子网中。因此,存在以下三种场景:不同集群可以创建在不同的虚拟私有云中。不同集群可以创建在同一个子网中。不同集群可以创建在不同的子网中。集群、VPC、安全组和节点的关系实例(Pod)实例(Pod)是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。容器(Container)一个通过 Docker 镜像创建的运行实例,一个节点可运行多个容器。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。工作负载工作负载即Kubernetes对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、Statefulset、Daemonset、Job、CronJob等多种类型。无状态工作负载:即kubernetes中的“Deployment”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress等。有状态工作负载:即kubernetes中的“StatefulSet”,有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如ETCD、mysql-HA等。创建守护进程集:即kubernetes中的“DaemonSet”,守护进程集确保全部(或者某些)节点都运行一个Pod实例,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,如ceph、fluentd、PrometheusNode Exporter等。普通任务:即kubernetes中的“Job”,普通任务是一次性运行的短任务,部署完成后即可执行。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。定时任务:即kubernetes中的“CronJob”,定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。工作负载与Pod的关系编排模板编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用的部署和管理。镜像(Image)Docker镜像是一个模板,是容器应用打包的标准格式,用于创建Docker容器。或者说,Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub、华为云容器镜像服务或者用户的私有 Registry。例如一个Docker镜像可以包含一个完整的Ubuntu操作系统环境,里面仅安装了用户需要的应用程序及其依赖文件。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。命名空间(Namespace)命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务,也能够互不干扰。例如:可以将开发环境、测试环境的业务分别放在不同的命名空间。常见的pods, services, replicationcontrollers和deployments等都是属于某一个namespace的(默认是default),而node,persistentVolumes等则不属于任何namespace。服务(Service)Service是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。使用Kubernetes,您无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes为Pods提供自己的IP地址和一组Pod的单个DNS名称,并且可以在它们之间进行负载平衡。Kubernetes允许指定一个需要的类型的 Service,类型 的取值以及行为如下:ClusterIP:集群内访问。通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的ServiceType。NodePort:节点访问。通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求:,可以从集群的外部访问一个 NodePort 服务。LoadBalancer:负载均衡。使用云提供商的负载均衡器,可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和ClusterIP 服务。DNAT:DNAT网关。可以为集群节点提供网络地址转换服务,使多个节点可以共享使用弹性IP。与弹性IP方式相比增强了可靠性,弹性IP无需与单个节点绑定,任何节点状态的异常不影响其访问七层负载均衡(Ingress)Ingress是为进入集群的请求提供路由规则的集合,可以给service提供集群外部访问的URL、负载均衡、SSL终止、HTTP路由等。网络策略(NetworkPolicy)NetworkPolicy提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。配置项(Configmap)ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap跟secret很类似,但它可以更方便地处理不包含敏感信息的字符串。密钥(Secret)Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。标签(Label)标签其实就一对 key/value,被关联到对象上,比如Pod。标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的,但是标签对内核系统是没有直接意义的。选择器(LabelSelector)Label selector是Kubernetes核心的分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。注解(Annotation)Annotation与Label类似,也使用key/value键值对的形式进行定义。Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。Annotation则是用户任意定义的“附加”信息,以便于外部工具进行查找。存储卷(PersistentVolume)PersistentVolume(PV)是集群之中的一块网络存储。跟 Node 一样,也是集群的资源。存储声明(PersistentVolumeClaim)PV 是存储资源,而 PersistentVolumeClaim (PVC) 是对 PV 的请求。PVC 跟 Pod 类似:Pod 消费 Node 资源,而 PVC 消费 PV 资源;Pod 能够请求 CPU 和内存资源,而 PVC 请求特定大小和访问模式的数据卷。弹性伸缩(HPA)Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能。Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩容,实现具有伸缩性的服务。亲和性与反亲和性在应用没有容器化之前,原先一个虚机上会装多个组件,进程间会有通信。但在做容器化拆分的时候,往往直接按进程拆分容器,比如业务进程一个容器,监控日志处理或者本地数据放在另一个容器,并且有独立的生命周期。这时如果他们分布在网络中两个较远的点,请求经过多次转发,性能会很差。亲和性:可以实现就近部署,增强网络能力实现通信上的就近路由,减少网络的损耗。如:应用A与应用B两个应用频繁交互,所以有必要利用亲和性让两个应用的尽可能的靠近,甚至在一个节点上,以减少因网络通信而带来的性能损耗。反亲和性:主要是出于高可靠性考虑,尽量分散实例,某个节点故障的时候,对应用的影响只是 N分之一或者只是一个实例。如:当应用采用多副本部署时,有必要采用反亲和性让各个应用实例打散分布在各个节点上,以提高HA。节点亲和性(NodeAffinity)通过选择标签的方式,可以限制pod被调度到特定的节点上。节点反亲和性(NodeAntiAffinity)通过选择标签的方式,可以限制pod不被调度到特定的节点上。工作负载亲和性(PodAffinity)指定工作负载部署在相同节点。用户可根据业务需求进行工作负载的就近部署,容器间通信就近路由,减少网络消耗。工作负载反亲和性(PodAntiAffinity)指定工作负载部署在不同节点。同个工作负载的多个实例反亲和部署,减少宕机影响;互相干扰的应用反亲和部署,避免干扰。资源配额(Resource Quota)资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。资源限制(Limit Range)默认情况下,K8S中所有容器都没有任何CPU和内存限制。LimitRange(简称limits)用来给Namespace增加一个资源限制,包括最小、最大和默认资源。在pod创建时,强制执行使用limits的参数分配资源。环境变量环境变量是指容器运行环境中设定的一个变量,您可以在创建容器模板时设定不超过30个的环境变量。环境变量可以在工作负载部署后修改,为工作负载提供了极大的灵活性。在CCE中设置环境变量与Dockerfile中的“ENV”效果相同。应用服务网格(Istio)Istio是一个提供连接、保护、控制以及观测功能的开放平台。云容器引擎深度集成了应用服务网格,提供非侵入式的微服务治理解决方案,支持完整的生命周期管理和流量治理能力,兼容Kubernetes和Istio生态。一键开启应用服务网格后即可提供非侵入的智能流量治理解决方案,其功能包括负载均衡、熔断、限流等多种治理能力。应用服务网格内置金丝雀、蓝绿等多种灰度发布流程,提供一站式自动化的发布管理。基于无侵入的监控数据采集,深度整合华为云应用性能管理(APM)能力,提供实时流量拓扑、调用链等服务性能监控和运行诊断,构建全景的服务运行视图。二、华为云微服务引擎微服务引擎(Cloud Service Engine) 是华为云提供的微服务框架,具备一站式服务注册、服务治理、动态配置和分布式事务管理控制台,帮助用户实现微服务应用的开发运维。产品功能提供微服务开发框架打包了微服务注册、发现、通信和治理等基础能力,支持REST和RPC协议。提供微服务治理中心提供微服务负载均衡、限流、降级、熔断、容错等治理能力。提供微服务安全管控提供认证鉴权、黑白名单等能力保障微服务访问安全。提供微服务灰度发布支持按权重和接口参数(例如用户群组或用户所属区域等等)定义微服务灰度发布规则。分布式事务管理提供最终一致性(TCC)和强一致性(WSAT)事务管理框架。非侵入式接入提供Service Mesh服务,可实现非侵入式接入已有微服务。提供统一配置中心支持微服务配置项的发布、变更和通知。提供微服务仪表盘提供微服务实例和接口级吞吐量、时延和成功率的实时监控仪表盘。
  • [其他问题] docker启动报错
    Failed to start Docker Application Container Engine.
  • [技术干货] 核心业务上云
    、核心业务不能上云的担忧和建议答:核心业务难以上云的痛点:1.核心业务对运行环境性能要求极为严苛;2.核心业务在虚拟化环境下运行效能不够稳定;3.核心业务数据一般具有敏感性、隐私性;4.上云业务安全性及安全机制设计不完善;核心业务公有云应对方案:作为一名客户经理我们可以向客户简单赋能并提出相关公有云应对核心业务上云的解决方案:1.选配ECS高配性能版-若客户的核心业务对于虚拟化环境运行无特殊要求,仅仅是性能要求较高,这是一个可用的选择;2.若客户担忧公有云隔离性、数据隐秘性问题,可推DEH专属主机服务;3.若客户核心业务不可兼容虚拟化环境,则可推荐BMS裸金属服务;作为一名客户经理,应从实际和客户角度出发,若客户核心业务不建议异地迁移上云,也可更换思维向其赋能推广公有云灾备类服务;
  • [技术干货] 容器业务VPC
    节点内Pod间通信:ipvlan子接口分配给节点上的Pod,同节点的Pod间通信直接通过ipvlan直接转发。跨节点Pod间通信:所有跨节点Pod间的通信通过默认路由到默认网关,借助VPC的路由转发能力,转发到对端节点上。优缺点优点由于没有隧道封装,网络问题易排查、性能较高支持VPC内的外部网络与容器IP直通缺点节点数量受限于虚拟私有云VPC的路由配额每个节点将会被分配固定大小的IP地址段,存在一定的容器网段IP地址浪费Pod无法直接利用EIP、安全组等能力(1)CCE内分为两个工作负载,Web负载和数据库负载,位与同一个VPC内(2)数据库集群与WEB集群间使用clusterip方式访问(3)WEB集群和外网的service通过 LB方式访问
  • [技术干货] 视频存储容器化
    一.存储容器化存储作为基础组件,直接和本地盘打交道,所以我们一个要解决的事情就是如何Kubernetes 管理本地盘。kubernetes管理本地盘通过官方提供的local-static-provisioner自动生成LocalPersistentVolume管理磁盘。LocalPersistentVolume是Kubernetes提供的一种管理本地盘的资源。5.1 使用Statefulset管理存储容器通过statefulset 管理有状态的存储服务, 为每个pod分配一个单独的磁盘可以使用volumeClaimTemplates给每个pod生成唯一的pvc,具体规则{podName},事先准备好PVC 和 PV,通过Statefulset 我们就可以把我们的存储托管到云上了。另外借助daemonset,可以把我们gateway模块部署到每一个node上面。处理云存储的请求。5.2 存储容器化的收益1)降低运维成本基于Kubernetes和statfulset获得了滚动更新,灰度更新,健康检查,快速扩容等功能,只需要一组yaml文件就可以快速搭建一个集群,相比于传统写ansible脚本部署的方式复杂度大大降低。2)降低开发运维成本由于Kubernetes把存储抽象成StorageClass PersistentVolume PersistentVolumeClaim。我们可以通过他们管理我们的存储资源,基于Kubernetes lable的过滤功能,可以实现简单的关系查询,通过PVC与PV管理存储资源,减少管理端的开发。定位问题也能通过POD信息快速定位到问题机器和问题云盘。而且接入Kubernetes生态上的prometheus后,监控告警也能快速开发。3)隔离性增强docker限制cpu memory使用,减少进程之间资源互相干扰,进一步提升资源利用率。在做流媒体容器化过程中,各个系统 Portal 平台、中间件、ops 基础设施、监控等都做了相应的适配改造,改造后的架构矩阵如下图所示。1. Portal:流媒体 的 PaaS 平台入口,提供 CI/CD 能力、资源管理、自助运维、应用画像、应用授权(db 授权、支付授权、应用间授权)等功能。2.运维工具:提供应用的可观测性工具, 包括 watcher(监控和报警)、bistoury (Java 应用在线 Debug)、qtrace(tracing 系统)、loki/elk(提供实时日志/离线日志查看)。中间件:应用用到的所有中间件,mq、配置中心、分布式调度系统 qschedule、dubbo 、mysql sdk 等。3.虚拟化集群:底层的 K8s 和 OpenStack 集群。4.Noah:测试环境管理平台,支持应用 KVM/容器混合部署。一.CI/CD 流程改造主要改造点:应用画像: 把应用相关的运行时配置、白名单配置、发布参数等收敛到一起,为容器发布提供统一的声明式配置。授权系统: 应用所有的授权操作都通过一个入口进行,并实现自动化的授权。K8s 多集群方案: 通过调研对比,KubeSphere 对运维优化、压测评估后也满足我们对性能的要求,最终我们选取了 KubeSphere 作为多集群方案。二.中间件适配改造改造关注点:由于容器化后,IP 经常变化是常态,所以各个公共组件和中间件要适配和接受这种变化。Qmq组件改造点:Broker端加快过期数据的处理速度。原因:由于IP变化频繁,对于一个主题有几百个甚至上千个的IP订阅,会产生很多文件Qconfig/Qschedule组件改造点:按实例级别的推送、任务执行在容器场景下不建议使用 。原因:因为IP经常变化,在容器化场景下发布、pod驱逐等都会导致IP变化,按实例维度推送没有意义Dubbo组件改造点:更改上线下线逻辑,下线记录由永久节点改为临时节点。 原因:上下线机制加上频繁的IP变更会导致zookeeper上产生大量的过期数据Openresty改造点:监听多K8s集群的endpoint变更,并更新到upstream; KVM、容器server地址共存,支持KVM和容器混合部署;三应用平滑迁移方案设计为了帮助业务快速平滑地迁移到容器,制定了一些规范和自动化测试验证等操作来实现这个目标。1.容器化的前置条件: 应用无状态、不存在 post_offline hook(服务下线后执行的脚本)、check_url 中不存在预热操作。2.测试环境验证: 自动升级 SDK、自动迁移。我们会在编译阶段帮助业务自动升级和更改 pom 文件来完成 SDK 的升级,并在测试环境部署和验证,如果升级失败会通知用户并提示。3.线上验证: 第一步线上发布,但不接线上流量,然后通过自动化测试验证,验证通过后接入线上流量。4.线上 KVM 与容器混部署:保险起见,线上的容器和 KVM 会同时在线一段时间,等验证期过后再逐步下线 KVM。5.线上全量发布: 确认服务没问题后,下线 KVM。6.观察: 观察一段时间,如果没有问题则回收 KVM。视频、流媒体容器化由于视频业务客户负载变化难以预测,需要根据CPU/内存使用率进行实时扩缩容。容器解决方案:可以利用CCE容器引擎,来实现弹性伸缩应用。容器启动速度为秒级,在业务量暴增时,可秒级启动容器,保障业务稳定。
  • [技术干货] 容器化改造
    该方案部署如下资源:云容器引擎 CCE集群控制节点跨可用区部署,提供计算节点的纳管和业务系统的管理调度能力。借助节点池基本功能方便快捷地创建、管理和销毁节点,而不会影响整个集群。节点池中包含三个计算节点来承载业务系统,计算节点跨可用区部署,每个节点都包含运行Pod所需要的基本组件,用户可根据自己业务需求扩展节点。自动安装了autoscaler、metrics-server、cce-hpa-controller等常用的插件,以支持选择性扩展满足特性需求的功能。方案优势高可用云容器引擎 CCE集群三控制节点,单个控制节点发生故障后集群可以继续使用,不影响业务功能。计算节点支 持跨可用区部署,保障业务系统高可用。开放兼容云容器引擎基于业界主流的Kubernetes实现,完全兼容Kubernetes/Docker社区原生版本,与社区最新版本保持紧密同步,完全兼容Kubernetes API和Kubectl。一键部署提供一键式部署能力,可以快速帮助您使用华为云容器服务能力。1:负载均衡应用改造点:选择合适的负载均衡器中小型的Web应用可以使用ngnix或HAProxy,大型网站或重要的服务可以使用LVS,目前该企业业务较小,选取nginx作为负载均衡器!2:web应用改造点:应用存在长时间执行请求   增加消息队列,通过消息队列将长任务与用户请求解耦3:应用服务器应用改造点:应用实例依赖于本地的存储来持久化数据如果是日志,建议变成流汇聚到分布式日志系统中。如果必须要使用存储,要使用共享文件系统如NFS。4:资源及集群规划规划:目前采用单集群规划,云资源中有其他应用项目请画出简要的资源规划图: 5:高可用规划   结合华为云,给出高可用规划的简单说明:    分别在2个AZ中部署两套CCE集群,K8S Master采用本地3节点高可用部署;应用AZ内高可用部署,通过ClusterIP服务调用不跨AZ。应用发布LoadBalancer类型的Service对接到集群所在AZ的融合ELB服务实例;应用通过VIP访问数据库,数据库自动切换应用不感知。支持多AZ动态容器存储,根据pod所在AZ创建数据卷。6:网络规划:集群内部应用默认可通过ClusterIP类型服务相互通信。k8s集群内置DNS服务,服务间访问可以通过IP或域名访问,请画出K8S集群内部应用网络互通示意图: Step1:kube-proxy、core-dns从Master中kube-apiserver订阅service,POD2的Service创建时,kube-proxy刷新本节点iptables,core-DNS更新路由数据。Step2:Pod2通过域名访问Pod4的service4,发起到core-dns查询请求,并获取对应的ClusterIP(如果使用ClusterIP直接访问则忽略这一步骤)Step3:Pod2发送业务报文,目的地址为获取到的ClusterIP。容器网络根据目的地址匹配策略后进行VxLAN封装,封装源地址为容器所在的VM IP地址,目的地址为目的容器所在VM IP,并将报文发给I层vSwitch,然后转发至目的容器所在VM,容器网络解VxLAN封装后,根据ClusterIP将业务报文发送目的service及POD。 
  • [技术干货] 什么业务适合容器化
    几类应用比较适合容器化部署:一是功能单一的应用,即微服务(这也是为什么现在大家一谈到微服务就会谈到容器,一谈到容器就会谈到微服务的原因);二是无状态的应用,容器的一个最大的优点就是可以快速创建(秒级),对于无状态的应用,可以通过快速横向扩容来提升并发处理能力;三是变更频繁的应用,容器是基于镜像创建的,对于变更频繁的应用,只要能保证镜像在测试环境测试没有问题,那么在生产环境上线由于环境差异导致出问题的概率就会少的多;四是对于需要在一个站点快速部署的应用组,对于需要在一个新站点快速部署的应用组,使用容器技术能够结合容器平台自身的特性,快速创建一个新的站点。重量级的中间件、oracle数据库、对数据持久化有强需求的应用、传统行业核心应用不适合容器化。使用容器部署应用,建议的上容器顺序如图所示:非核心非实时—非核心实时==核心非实时==核心实时
  • [技术干货] 容器VS虚拟化
    联系:容器使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。区别:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此使得Docker技术比虚拟机技术更为轻便、快捷。虚拟化和容器化方式的对比容器和虚拟机的区别特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为GB性能接近原生弱系统支持量单机支持上千个容器一般几十个容器化跟虚拟化相比具有众多的优势:1、更高效的利用系统资源2、更快速的启动时间3、一致的运行环境4、持续交付和部署5、更轻松的迁移6、更轻松的维护和扩展 区别:1、容器主机必须有OS环境2、容器没有虚拟化软件3、容器应用镜像来自于公共HUB、私有、社区4、容器引擎安装镜像---运行实例5、容器无需安装OS+无需作任何配置对比:占用空间:容器-MB级别,虚拟化-GB级;运行速度:容器:秒级、虚拟化:分钟级;安全隔离性:容器隔离性不如计算虚拟化(因为共享OS);创建数量:容器无上限,计算虚拟化(受限于虚拟化软件)
  • [技术干货] 容器化改造
     【背景】A企业是一家位于杭州的软件开发公司,具备自主设计软件,交付软件及销售的能力,目前公司业务已经上华为云,考虑到开发及交付的便利性,准备进行容器化改,目标是能够实现软件开发即交付。业务现网状况如下:目前2台web服务器作为前端,mysql数据库,软件负载均衡器,无数据库中间件,后端EVS云硬盘,针对于本企业的现状,给出各部分的容器化改造及后续方案.1:负载均衡应用改造点:选择合适的负载均衡器中小型的Web应用可以使用ngnix或HAProxy,大型网站或重要的服务可以使用LVS,目前该企业业务较小,选取nginx作为负载均衡器!2:web应用改造点:应用存在长时间执行请求   增加消息队列,通过消息队列将长任务与用户请求解耦3:应用服务器应用改造点:应用实例依赖于本地的存储来持久化数据如果是日志,建议变成流汇聚到分布式日志系统中。如果必须要使用存储,要使用共享文件系统如NFS。4:资源及集群规划规划:目前采用单集群规划,云资源中有其他应用项目可以利用namespace创建虚拟集群,namaspace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service访问其他namespace中的服务。请画出简要的资源规划图:5:高可用规划   结合华为云,给出高可用规划的简单说明:    分别在2个AZ中部署两套CCE集群,K8S Master采用本地3节点高可用部署;应用AZ内高可用部署,通过ClusterIP服务调用不跨AZ。应用发布LoadBalancer类型的Service对接到集群所在AZ的融合ELB服务实例;应用通过VIP访问数据库,数据库自动切换应用不感知。支持多AZ动态容器存储,根据pod所在AZ创建数据卷。6:网络规划:集群内部应用默认可通过ClusterIP类型服务相互通信。k8s集群内置DNS服务,服务间访问可以通过IP或域名访问,请画出K8S集群内部应用网络互通示意图:Step1:kube-proxy、core-dns从Master中kube-apiserver订阅service,POD2的Service创建时,kube-proxy刷新本节点iptables,core-DNS更新路由数据。Step2:Pod2通过域名访问Pod4的service4,发起到core-dns查询请求,并获取对应的ClusterIP(如果使用ClusterIP直接访问则忽略这一步骤)Step3:Pod2发送业务报文,目的地址为获取到的ClusterIP。容器网络根据目的地址匹配策略后进行VxLAN封装,封装源地址为容器所在的VM IP地址,目的地址为目的容器所在VM IP,并将报文发给I层vSwitch,然后转发至目的容器所在VM,容器网络解VxLAN封装后,根据ClusterIP将业务报文发送目的service及POD。
  • [技术干货] 容器概念
    什么是容器容器是操作系统内核自带能力,是基于Linux内核实现的轻量级高性能资源隔离机制。云容器引擎CCE是基于开源Kubernetes的企业级容器服务,提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。为什么需要使用容器更高效的利用系统资源。容器不需要硬件虚拟化以及运行完整操作系统等额外开销,所以对系统资源利用率更高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。更快速的启动时间。容器直接运行于宿主机内核,无需启动完整的操作系统,可以做到秒级甚至毫秒级的启动时间。大大节约开发、测试、部署的时间。一致的运行环境。容器镜像提供了完整的运行时环境,确保应用运行环境的一致性。从而不会再出现“这段代码在我机器上没问题”这类问题。更轻松的迁移、维护和扩展。容器确保了执行环境的一致性,使得应用迁移更加容易。同时使用的存储及镜像技术,使应用重复部分的复用更为容易,基于基础镜像进一步扩展镜像也变得非常简单。