Docker最全教程——从理论到实战(六)

托管到腾讯云容器服务

托管到腾讯云容器服务,咱们的公众号“magiccodes”已经发布了相关的录屏教程,你们能够结合本篇教程一块儿查阅。
 

自建仍是托管?

在开始以前,咱们先来讨论一个问题——是自建容器服务仍是托管到云容器服务?
这里笔者建议你们托管到云容器服务。对于中小团队来讲,不少状况下,团队中的运维人员是缺失的,或者运维人员的水平很是有限——大部分比网吧的网管就好那么一点,从成本、安全(云端产品每每提供了一些解决方案,好比权限控制、灾备、高可用、数据加密等)、扩展性的角度,使用云容器服务更加靠谱和省事,并且是能够直接开箱即用的(能够直接跳过自建的初始化时间)。并且随着生产力的继续发展,人的成本必定会愈来愈高于机器的成本,并且目前已是远远高于机器的成本了。所以,如何选择,你们是否心中有数了呢?
接下来,咱们结合官方资料进行必定的对比:

 

腾讯云容器服务TKE对比自建容器服务

优点
腾讯云容器服务(TKE)
自建容器服务
简单易用
简化集群管理
腾讯云容器服务提供超大规模容器集群管理、资源调度、容器编排、代码构建,屏蔽了底层基础构架的差别,简化了分布式应用的管理和运维,您无需再操做集群管理软件或设计容错集群架构,所以也无需参与任何相关的管理或扩展工做。
您只需启动容器集群,并指定想要运行的任务便可,腾讯云容器服务帮您完成全部的集群管理工做,让您能够集中精力开发 Docker 化的应用程序。
自建容器管理基础设施一般涉及安装、操做、扩展本身的集群管理软件、配置管理系统和监控解决方案,管理复杂。
灵活扩展
灵活集群托管,集成负载均衡
您可使用容器服务灵活安排长期运行的应用程序和批量做业。您还可使用 API 得到最新的集群状态信息,以便集成您本身的自定义计划程序和第三方计划程序。
腾讯云容器服务与负载均衡集成,支持在多个容器之间分配流量。您只需指定容器配置和要使用的负载均衡器,容器服务管理程序将自动添加和删除。另外腾讯云容器服务能够自动恢复运行情况不佳的容器,保证容器数量知足您的需求,以便为应用程序提供支持。
须要根据业务流量状况和健康状况人工肯定容器服务的部署,可用性和可扩展性差
安全可靠
资源高度隔离,服务高可用
容器服务在您本身的云服务器实例中启动,不与其余客户共享计算资源。
您的集群在私有网络中运行,所以您可使用您本身的安全组和网络 ACL,这些功能为您提供了高隔离水平,并帮助您使用云服务器构建高度安全可靠的应用程序。
容器服务采用分布式服务架构,保证服务的故障自动恢复、快速迁移;结合有状态服务后端的分布式存储,实现服务和数据的安全、高可用。
自建容器服务因其内核问题及 Namespace 不够完善,租户、设备、内核模块隔离性都比较差
高效
镜像快速部署,业务持续集成
腾讯云容器服务运行在您的私有网络中,高品质的 BGP 网络保证镜像极速上传下载,轻松支持海量容器秒级启动,极大程度下降了运行开销,使您的部署更加专一于业务运行。
您能够在腾讯云容器服务上部署业务,开发人员在 GitHub 或其余代码平台提交代码后,容器服务可当即进行构建、测试、打包集成,将集成的代码部署到预发布环境和现网环境上。
自建容器服务的网络无保证,所以没法保证使用镜像建立容器的效率
低成本
容器服务免费腾讯云容器服务没有任何附加费用,您能够在容器中免费调用 API 构建您的集群管理程序。您只需为您建立的用于存储和运行应用程序的云服务资源(例如云服务器、云硬盘等)付费。
须要投入资金构建、安装、运维、扩展本身的集群管理基础设施,成本开销大

 

腾讯云容器服务TKE监控与自建容器监控对比

腾讯云容器服务监控为容器集群、服务、实例提供数据收集和数据展现功能。使用容器服务监控,您能够查看集群、节点、服务、实例,容器近 30 个指标的监控统计数据,验证集群是否正常运行并建立相应告警,监控指标覆盖面全,而且在持续增长中。具体以下所示:
 
 
 
 
优点
腾讯云容器服务(TKE)
自建容器服务
指标完整
涉及到集群,服务,容器,pod 近 30 个指标
指标不完整,不少须要开发
搭建成本低
建立集群时自带
人工搭建,成本高
运维成本低
平台助力运维,保证数据准确性
人工维护
存储成本低
每一个指标免费保存 3 个月数据
根据存储大小计算
扩展性高
平台侧会不断完善和增长新的指标项
须要技术人员大量投入开发新指标
告警
问题排查手段
控制台能够方便查看容器 log, 并与 webshell 结合一键登陆容器快速排查问题
须要手动登陆到容器或者机器排查
 
 
 
 

关于腾讯云容器服务

在使用云端产品时,咱们须要先了解该产品。
腾讯云容器服务(Tencent Kubernetes Engine,即TKE)为用户解决容器集群的搭建以及运维管理工做,无缝衔接了腾讯云的计算、网络、存储、监控、安全能力,帮助用户升级开发模式、变动应用交付、重构数据管理方式。腾讯云容器服务提速应用部署、简化集群管理,助力企业快速上云。
了解腾讯云容器服务,会涉及到如下概念:
  • 集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等腾讯云资源。
  • 节点:一台已注册到集群内的云服务器。
  • 服务:由多个相同配置的容器和访问这些容器的规则组成的微服务。
  • 镜像Docker镜像,用于部署容器服务,每一个镜像有特定的惟一标识(镜像的Registry地址+镜像名称+镜像Tag)。
腾讯自今年起,对腾讯云投入了大量的资源,而且给予了史无前例的重视和支持。笔者前不久受邀参与了腾讯云TKE专场技术交流会,这里分享几张照片给你们:

腾讯与容器服务

腾讯在很早的时候就已经开始使用容器服务了,而且根据内部消息透露,腾讯的新业务基本上均使用容器服务进行托管,而旧有业务也在逐步迁移到容器服务之中。好比你们所熟悉的LOL(英雄联盟),就使用了大量的容器实例用于构建和托管相关服务。
众所周知,一个复杂游戏的构建是很是不容易的。英雄联盟的构建包含了超过150个独立的任务,须要构建每一个英雄联盟的特征。而构建包括各类形式和尺寸,从传统的调试构建到各类形式的将来内容构建,还包括全球合做者,如腾讯(Tencent)和竞舞台(Garena)。单单完成构建,就使用超过了450台虚拟机!后续改成使用Docker以后,构建的成本的下降大大提升了团队的迭代速度。固然,中间也出现过许多问题,这些咱们后续再讲述。本篇先行略过。

通常服务部署流程

为了让你们更好的理解和使用云端产品,这里咱们结合腾讯云容器服务,根据平常状况下咱们服务部署的状况,来说解本流程。
在开始以前,有不少额外的初始步骤——好比注册、充值等等,这里笔者先行略过,本篇只围绕通常状况下服务部署到云端的配置和部署流程。所以,这里再强调下前提条件:
  1. 腾讯云帐号正常而且资金足够,或者无门槛代金券充足,可以知足这次使用
  2. 本地服务镜像已经打包完毕(具体能够参阅以前的讲解)
  3. 您已经充分阅读了前面的教程,或者对容器服务已经比较了解
知足了以上的前提条件,对于通常状况下,服务托管到腾讯云,咱们的主体流程以下所示:

建立集群和节点

集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等腾讯云资源;
节点:一台已注册到集群内的云服务器。
若是你们对此不是很好理解的话,这里笔者作一个比喻——集群就比如某款手游,节点就如同该手游的某个区,咱们要玩游戏的话,是必须登陆到某个区才能玩,就如同咱们的服务实例,最终也是分布在各个节点上。
注意:集群建立完毕以后,能够添加已有的节点,也就是已购买的服务器,不过,操做系统必须一致!若是不一致,添加已有节点时能够自动重置该服务器的操做系统。
 
建立界面以下所示:
其中,若是CIDR显示冲突,咱们就改到不冲突为止。
节点这块,你们能够选择购买新的主机或者选择已有主机,这里就很少介绍了。

建立命名空间和镜像

这里咱们须要了解下镜像仓库。什么是镜像仓库?镜像仓库就是用于存放Docker镜像的仓库,而Docker镜像用于部署容器服务,每一个镜像有特定的惟一标识(镜像的Registry地址+镜像名称+镜像Tag)。
除了Docker官方提供了Docker Hub官方镜像仓库以外,各大云厂商每每也提供了本身的镜像仓库,好比腾讯云的镜像仓库是TencentHub。若是咱们要得到最佳的体验,那么使用云端产品时,咱们建议将Docker镜像推送到该云产品的镜像仓库,这样镜像拉取的延迟更小,支持粒度以及可用性更高。
 
注意:此步骤不是必须的,使用云端产品,咱们依然可使用官方镜像和第三方公共镜像。
 
在本篇教程,咱们讲解使用TencentHub,也就是腾讯云的镜像仓库。在容器服务的管理页,咱们就能够看到入口:
首先,咱们须要建立命名空间和镜像。这里,咱们进入【个人镜像】页面,先来建立命名空间。

建立命名空间

命名空间的建立比较简单:
命名空间你们能够理解为目录或者前缀,起必定的分类和约束做用,你们可使用公司的名称或者本身心中神往的词汇,只要易于理解就行。命名空间OK以后,咱们就须要建立镜像:

建立镜像

新建页面以下所示:
整个建立过程其实和咱们在Github上建立一个代码库很是相似,只是这里界面的呈现不够友好(先把产品经理打一顿)。咱们在建立代码库的时候,也是须要填写路径(命名空间)和项目名称(镜像名称),以下所示:
经过代码库的类比,相信你可以更好的理解镜像仓库。

建立服务

镜像有了,那么接下来就能够建立服务了,至关因而把咱们的代码丢到web服务器上跑起来。服务很易于理解,好比数据库服务、web服务等等。
腾讯云容器服务的建立过程以下所示:
  • 基本设置
         服务名称、容器名称咱们建议和镜像名称保持一致,因为有些命名约束,好比“.”须要改为“ _” )。

 

  • 部署设置
咱们推荐使用存活检查和就绪检查,启动延时最好不要设为0,实例数量你们能够根据须要改成自动调节,好比根据CPU的使用率来弹性扩展。

  • 访问设置
提供公网访问,端口能够设置成80。若是须要提供https,那么还须要开放443端口,对于某些仅需内网访问的服务,建议你们不要开启公网端口。
服务建立完成以后,咱们但愿镜像在推送以后,可以自动触发服务更新。所以,咱们还须要配置镜像触发器。

配置镜像触发器

镜像触发器能够在每次生成新的Tag(镜像版本)时,自行执行动做,如:自动更新使用该镜像仓库的服务
咱们能够经过【个人镜像】页面,点击刚添加的镜像名称,进入详情页,而后点击【触发器】tab页来打开触发器管理页面。

点击【添加触发器】按钮能够来建立触发器。相关配置以下所示:
咱们须要选择对应的容器服务。咱们推荐使用所有触发这个触发条件,你们也能够根据本身的需求设置指定Tag触发,好比针对生产、测试和开发环境。

推送镜像

触发器设置好了,也就是整个水管都铺设好了,只要打开水龙头就能够开闸放水了。对于咱们这里,这个水指的就是镜像。咱们只需将咱们的镜像推送到腾讯云镜像仓库,便可自动完成整个服务部署流程。
镜像推送的方式有不少,好比经过CI工具构建和推送,也能够经过脚原本推送已有的镜像。这里,咱们将介绍经过脚原本推送镜像。
核心脚本代码为:
docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
docker push {镜像名称}:{镜像版本}
注意:ccr.ccs.tencentyun.com为腾讯仓库的地址。username为腾讯云帐号Id,密码为仓库密码。
若是忘记密码,能够在此处重置:
Magicodes.Admin框架提供了腾讯云推送脚本,相关参数以下所示:
通常状况下,咱们仅需提供默认的配置便可,即配置tencentyun.config便可:
镜像地址能够从腾讯云的【个人镜像】获取:

若是没有特殊的配置,咱们仅需执行此脚本便可完成编译、运行单元测试、打包、生成镜像以及镜像推送的整个过程。编译的文件会放在tsoutputs目录,以下所示:
例如,咱们能够执行如下命令来发布Host工程,也就是后台服务:
./build-with-tencentyun.ps1 -pushType HOST -debug true
 
若是须要传递相关应用的自定义设置,脚本这边也提供了对设置文件的支持,例如:
若是在编译前须要执行单元测试并经过以后才容许发布,脚本也提供了参数进行支持:
例如:
./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true

当单元测试失败时,脚本将终止执行:

除了使用脚本推送以外,咱们还能够经过CI工具或者服务来完成自动构建和推送。在后续的章节,咱们会进行讲述。

问题排查

将服务托管到云端时,咱们可能会碰到一些问题。掌握一些手段或技巧,可以让咱们更易于排查问题以及解决问题。

镜像拉取问题

目前腾讯云容器服务日志中不会打印镜像拉取失败的具体错误,以下图所示:
 
咱们须要在服务器上拉取镜像来查看具体日志错误,好比执行如下命令:
sudo su
docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
docker pull {镜像名称}

远程登陆

在某些状况下,咱们须要登陆具体的容器实例来排查问题,这点,腾讯云是可以支持的:
登陆以后,咱们能够直接执行命令,好比执行dir命令列出全部的文件和目录:
咱们也能够上传下载容器实例中的文件,如图所示:
经过文件助手,咱们可以很方便的检查和修改实例中的配置文件,或者查看具体日志。这对于咱们调测或者检查问题很是重要。
注意:使用文件助手上传下载文件时,注意加上当前工做目录路径,好比“/app/appsettings.json”。

利用容器服务日志

在开发过程当中,容器服务实例可能常常会崩溃或者在运行中出现问题,一方面,咱们能够记录相关日志或者将日志推送到日志服务,另外一方面,咱们强烈推荐你们利用好容器服务日志。
在前面的【控制台日志提供程序】章节,咱们有详细讲解,配置了控制台日志提供程序以后,咱们能够在容器服务实例中看到全部的日志,包括致使容器实例崩溃的日志,这点对于咱们排错也很是重要——由于每每崩溃太快,有可能文件日志都来不及记录或者推送。

往期内容连接

相关文章
相关标签/搜索