托管到腾讯云容器服务

magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。
 

自建还是托管?

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

 

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

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

 

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

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

关于腾讯云容器服务

在使用云端产品时,我们需要先了解该产品。
Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
维管理工作,无缝衔接了腾讯云的计算、网络、存储、监控、安全能力,帮助用户升级开发模式、变更应用交付、重构数据管理方式。腾讯云容器服务提速应用部署、简化集群管理,助力企业快速上云。
了解腾讯云容器服务,会涉及到以下概念:
  • 集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等腾讯云资源。
  • 节点:一台已注册到集群内的云服务器。
  • 服务:由多个相同配置的容器和访问这些容器的规则组成的微服务。
  • 镜像Docker镜像,用于部署容器服务,每个镜像有特定的唯一标识(镜像的Registry地址+镜像名称+镜像Tag)。
专场技术交流会,这里分享几张照片给大家:
Docker最全教程——从理论到实战(六)
    




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

腾讯与容器服务

实例用于构建和托管相关服务。
。当然,中间也出现过许多问题,这些我们后续再讲述。本篇先行略过。

一般服务部署流程

为了让大家更好的理解和使用云端产品,这里我们结合腾讯云容器服务,根据日常情况下我们服务部署的情况,来讲解本流程。
在开始之前,有很多额外的初始步骤——比如注册、充值等等,这里笔者先行略过,本篇只围绕一般情况下服务部署到云端的配置和部署流程。因此,这里再强调下前提条件:
  • 腾讯云账号正常并且资金足够,或者无门槛代金券充足,能够满足此次使用
  • 本地服务镜像已经打包完毕(具体可以参阅之前的讲解)
  • 您已经充分阅读了前面的教程,或者对容器服务已经比较了解
  • 满足了以上的前提条件,对于一般情况下,服务托管到腾讯云,我们的主体流程如下所示:

    创建集群和节点

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

    创建命名空间和镜像

    镜像用于部署容器服务,每个镜像有特定的唯一标识(镜像的Registry地址+镜像名称+镜像Tag)。
    该云产品的镜像仓库,这样镜像拉取的延迟更小,支持粒度以及可用性更高。
     
    注意:此步骤不是必须的,使用云端产品,我们依然可以使用官方镜像和第三方公共镜像。
     
    腾讯云的镜像仓库。在容器服务的管理页,我们就可以看到入口:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    首先,我们需要创建命名空间和镜像。这里,我们进入【我的镜像】页面,先来创建命名空间。

    创建命名空间

    命名空间的创建比较简单:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六) 
    OK之后,我们就需要创建镜像:

    创建镜像

    新建页面如下所示:
    thub上创建一个代码库非常类似,只是这里界面的呈现不够友好(先把产品经理打一顿)。我们在创建代码库的时候,也是需要填写路径(命名空间)和项目名称(镜像名称),如下所示:
    通过代码库的类比,相信你能够更好的理解镜像仓库。

    创建服务

    web服务器上跑起来。服务很易于理解,比如数据库服务、web服务等等。
    腾讯云容器服务的创建过程如下所示:
    Docker最全教程——从理论到实战(六)
    




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




Docker最全教程——从理论到实战(六)
    • 基本设置
             服务名称、容器名称我们建议和镜像名称保持一致,由于有些命名约束,比如“.”需要改成“_” )。

     

    • 部署设置
    0,实例数量大家可以根据需要改为自动调节,比如根据CPU的使用率来弹性扩展。

    • 访问设置
    443端口,对于某些仅需内网访问的服务,建议大家不要开启公网端口。
    服务创建完成之后,我们希望镜像在推送之后,能够自动触发服务更新。因此,我们还需要配置镜像触发器。

    配置镜像触发器

    tab页来打开触发器管理页面。

    点击【添加触发器】按钮可以来创建触发器。相关配置如下所示:
    ,比如针对生产、测试和开发环境。

    推送镜像

    我们只需将我们的镜像推送到腾讯云镜像仓库,即可自动完成整个服务部署流程。
    CI工具构建和推送,也可以通过脚本来推送已有的镜像。这里,我们将介绍通过脚本来推送镜像。
    核心脚本代码为:
    docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
    docker push {镜像名称}:{镜像版本}
    Id,密码为仓库密码。
    如果忘记密码,可以在此处重置:
    框架提供了腾讯云推送脚本,相关参数如下所示:
    即可:
    镜像地址可以从腾讯云的【我的镜像】获取:

    目录,如下所示:
    Host工程,也就是后台服务:
    ./build-with-tencentyun.ps1 -pushType HOST -debug true 
     
     
     
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    如果需要传递相关应用的自定义设置,脚本这边也提供了对设置文件的支持,例如:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    如果在编译前需要执行单元测试并通过之后才允许发布,脚本也提供了参数进行支持:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    例如:
    ./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true

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

    CI工具或者服务来完成自动构建和推送。在后续的章节,我们会进行讲述。

    问题排查

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

    镜像拉取问题

    目前腾讯云容器服务日志中不会打印镜像拉取失败的具体错误,如下图所示:
     
     
     
    Docker最全教程——从理论到实战(六)
    




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




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




Docker最全教程——从理论到实战(六)
    我们需要在服务器上拉取镜像来查看具体日志错误,比如执行以下命令:
    sudo su
    docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
    docker pull {镜像名称}
    Docker最全教程——从理论到实战(六)
    




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

    远程登录

    在某些情况下,我们需要登录具体的容器实例来排查问题,这点,腾讯云是能够支持的:
    :
    我们也可以上传下载容器实例中的文件,如图所示:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    通过文件助手,我们能够很方便的检查和修改实例中的配置文件,或者查看具体日志。这对于我们调测或者检查问题非常重要。
    注意:使用文件助手上传下载文件时,注意加上当前工作目录路径,比如“/app/appsettings.json”。

    利用容器服务日志

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

    托管到腾讯云容器服务

    magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。
     

    自建还是托管?

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

     

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

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

     

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

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

    关于腾讯云容器服务

    在使用云端产品时,我们需要先了解该产品。
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    维管理工作,无缝衔接了腾讯云的计算、网络、存储、监控、安全能力,帮助用户升级开发模式、变更应用交付、重构数据管理方式。腾讯云容器服务提速应用部署、简化集群管理,助力企业快速上云。
    了解腾讯云容器服务,会涉及到以下概念:
    • 集群:是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等腾讯云资源。
    • 节点:一台已注册到集群内的云服务器。
    • 服务:由多个相同配置的容器和访问这些容器的规则组成的微服务。
    • 镜像Docker镜像,用于部署容器服务,每个镜像有特定的唯一标识(镜像的Registry地址+镜像名称+镜像Tag)。
    专场技术交流会,这里分享几张照片给大家:
    Docker最全教程——从理论到实战(六)
    




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

    腾讯与容器服务

    实例用于构建和托管相关服务。
    。当然,中间也出现过许多问题,这些我们后续再讲述。本篇先行略过。

    一般服务部署流程

    为了让大家更好的理解和使用云端产品,这里我们结合腾讯云容器服务,根据日常情况下我们服务部署的情况,来讲解本流程。
    在开始之前,有很多额外的初始步骤——比如注册、充值等等,这里笔者先行略过,本篇只围绕一般情况下服务部署到云端的配置和部署流程。因此,这里再强调下前提条件:
  • 腾讯云账号正常并且资金足够,或者无门槛代金券充足,能够满足此次使用
  • 本地服务镜像已经打包完毕(具体可以参阅之前的讲解)
  • 您已经充分阅读了前面的教程,或者对容器服务已经比较了解
  • 满足了以上的前提条件,对于一般情况下,服务托管到腾讯云,我们的主体流程如下所示:

    创建集群和节点

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

    创建命名空间和镜像

    镜像用于部署容器服务,每个镜像有特定的唯一标识(镜像的Registry地址+镜像名称+镜像Tag)。
    该云产品的镜像仓库,这样镜像拉取的延迟更小,支持粒度以及可用性更高。
     
    注意:此步骤不是必须的,使用云端产品,我们依然可以使用官方镜像和第三方公共镜像。
     
    腾讯云的镜像仓库。在容器服务的管理页,我们就可以看到入口:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    首先,我们需要创建命名空间和镜像。这里,我们进入【我的镜像】页面,先来创建命名空间。

    创建命名空间

    命名空间的创建比较简单:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六) 
    OK之后,我们就需要创建镜像:

    创建镜像

    新建页面如下所示:
    thub上创建一个代码库非常类似,只是这里界面的呈现不够友好(先把产品经理打一顿)。我们在创建代码库的时候,也是需要填写路径(命名空间)和项目名称(镜像名称),如下所示:
    通过代码库的类比,相信你能够更好的理解镜像仓库。

    创建服务

    web服务器上跑起来。服务很易于理解,比如数据库服务、web服务等等。
    腾讯云容器服务的创建过程如下所示:
    Docker最全教程——从理论到实战(六)
    




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




Docker最全教程——从理论到实战(六)
    • 基本设置
             服务名称、容器名称我们建议和镜像名称保持一致,由于有些命名约束,比如“.”需要改成“_” )。

     

    • 部署设置
    0,实例数量大家可以根据需要改为自动调节,比如根据CPU的使用率来弹性扩展。

    • 访问设置
    443端口,对于某些仅需内网访问的服务,建议大家不要开启公网端口。
    服务创建完成之后,我们希望镜像在推送之后,能够自动触发服务更新。因此,我们还需要配置镜像触发器。

    配置镜像触发器

    tab页来打开触发器管理页面。

    点击【添加触发器】按钮可以来创建触发器。相关配置如下所示:
    ,比如针对生产、测试和开发环境。

    推送镜像

    我们只需将我们的镜像推送到腾讯云镜像仓库,即可自动完成整个服务部署流程。
    CI工具构建和推送,也可以通过脚本来推送已有的镜像。这里,我们将介绍通过脚本来推送镜像。
    核心脚本代码为:
    docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
    docker push {镜像名称}:{镜像版本}
    Id,密码为仓库密码。
    如果忘记密码,可以在此处重置:
    框架提供了腾讯云推送脚本,相关参数如下所示:
    即可:
    镜像地址可以从腾讯云的【我的镜像】获取:

    目录,如下所示:
    Host工程,也就是后台服务:
    ./build-with-tencentyun.ps1 -pushType HOST -debug true 
     
     
     
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    如果需要传递相关应用的自定义设置,脚本这边也提供了对设置文件的支持,例如:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    如果在编译前需要执行单元测试并通过之后才允许发布,脚本也提供了参数进行支持:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    例如:
    ./build-with-tencentyun.ps1 -pushType HOST -debug true -runTest true

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

    CI工具或者服务来完成自动构建和推送。在后续的章节,我们会进行讲述。

    问题排查

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

    镜像拉取问题

    目前腾讯云容器服务日志中不会打印镜像拉取失败的具体错误,如下图所示:
     
     
     
    Docker最全教程——从理论到实战(六)
    




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




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




Docker最全教程——从理论到实战(六)
    我们需要在服务器上拉取镜像来查看具体日志错误,比如执行以下命令:
    sudo su
    docker login --username {用户名} --password {密码} ccr.ccs.tencentyun.com
    docker pull {镜像名称}
    Docker最全教程——从理论到实战(六)
    




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

    远程登录

    在某些情况下,我们需要登录具体的容器实例来排查问题,这点,腾讯云是能够支持的:
    :
    我们也可以上传下载容器实例中的文件,如图所示:
    Docker最全教程——从理论到实战(六)
    




Docker最全教程——从理论到实战(六)
    通过文件助手,我们能够很方便的检查和修改实例中的配置文件,或者查看具体日志。这对于我们调测或者检查问题非常重要。
    注意:使用文件助手上传下载文件时,注意加上当前工作目录路径,比如“/app/appsettings.json”。

    利用容器服务日志

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

    相关文章: