作者简介

Christopher Tozzi,自2008年来以自由职业者的身份对Linux、虚拟化、容器、数据存储及其相关主题进行报道。

时至今日,Kubernetes已然成为风靡一时的容器编排调度工具,许多IT分析师均提出了企业应当在何时采用Kubernetes的深刻建议。然而,和所有其他的软件平台一样,Kubernetes并非是一个适用于所有人的灵丹妙药。我更倾向于认为人们在有些时候过分夸大了Kubernetes的作用,以至于他们产生了一种错觉:他们无法离开Kubernetes,而实际上,Kubernetes比他们真正的需求要复杂得多。

为了分析人们真正的需求与Kubernetes的匹配程度,我分析了企业在采用Kubernetes编排之前必须考虑的5个事情。

Kubernetes是什么?

如果您关注容器,您可能会知道Kubernetes是一个用于容器编排的开源工具,它可以自动执行诸如启动容器、停止容器以及在同一个容器的不同实例之间的负载均衡等重要任务。

简而言之,Kubernetes的主要目的是最大限度地减少工程师必须手动执行的管理工作量,并通过简化容器操作,帮助企业大规模运行复杂的容器化应用程序。

决定是否采用Kubernetes的关键要素

基于Kubernetes的设立初衷,如果您喜欢自动化,讨厌手动执行重复性的任务,那么Kubernetes无疑是您的极佳选择。

这是您决定是否采用Kubernetes的重要前提,但是,您不能仅根据这一“前提”就决定是否采用Kubernetes。在采用Kubernetes之前,您还需要考虑并权衡其他重要的因素。

1、Kubernetes的基础设施规模

您的基础设施规模是其中一个决定Kubernetes是否能够很好地为您所用的关键要素。

Kubernetes的设计初衷是协调分布在真正庞大的环境中的容器,这往往意味着企业应当拥有数十台主机服务器。根据过往的实施经验,如果基础架构中的服务器少于50个,那么您可能没有足够的资源来利用Kubernetes的全部优势。

这并不是指Kubernetes无法在较小规模的基础设施上运行。实际上,如果您愿意,您可以在单个主机上运行Kubernetes。然而,由于Kubernetes其中的一个研发目的是:通过在数量庞大的集群中分布容器化应用程序提供高可用性,因此,如果您只有少量服务器,则无法享受到Kubernetes的某些价值。

除此之外,考虑到设置和维护Kubernetes的复杂性,如果您的基础设施规模较小,无法完全实现Kubernetes的高可用性承诺,那么或许您不应投入过多时间和精力在Kubernetes上。

对于较小的基础架构,您可以使用较为简单的容器编排工具,或者使用如AWS ECS等具有内置编排的基于云的容器服务。

2、Kubernetes操作系统环境

Kubernetes主要是一种Linux技术。尽管Kubernetes可以用于管理托管Windows服务器上的容器化应用程序,这些应用程序作为Kubernetes服务器集群内的所谓工作节点运行。但托管Kubernetes核心服务的主要服务器或者说主节点必须是Linux。

因此,如果您的商店以Windows为中心,那么Kubernetes并非您的最佳选择。但是您可以选择Rancher轻松将Kubernetes的优势引入Windows,并且极大程度降低使用的复杂性。

3、安装和设置Kubernetes

在决定采用Kubernetes之前,您还需要评估您可以在此项目上投入的工作时间。

普通的开放源代码版本的Kubernetes缺少内置的应用程序,也并未提供一种可以适用于所有默认配置的安装方式。在集群正常运行之前,您需要投入大量的时间从头开始编写及调整配置文件。因此,安装和配置Kubernetes的过程或许是一个令人生畏的过程,您需要投入大量的时间和精力。

部分Kubernetes发行版提供了交互式安装程序脚本,可以帮助您自动执行大部分设置过程。如果您选择Rancher等Kubernetes发行版,则有望在一两天内轻松完成配置及安装。

第三种选择是使用诸如Google Kubernetes Engine等云供应商解决方案,将Kubernetes作为托管服务在云上运行。在这种情况下,您可以自行选择安装及设置。但值得注意的一点是,在确定如何配置Kubernetes环境时,您的选择可能会受到限制。

您必须意识到最为关键的一点:不要低估配置Kubernetes的难度。在您真的要全身心投入Kubernetes之前,请确保您所付出的努力是值得的。另一方面,如果您无法确定为企业在生产集群上安装和部署Kubernetes的难度,您可以尝试使用K3s等轻量级Kubernetes发行版来进行测试,预估后续需要付出多少努力来进行Kubernetes的配置和设置。

4、Kubernetes和声明式配置管理

Kubernetes采用了所谓的声明式配置管理方法,这就意味着,您需要自行编写配置文件来设置Kubernetes应用程序应当如何运行,而Kubernetes将自动指出如何使应用程序符合规范。

声明式配置管理与命令式配置管理相反,在命令式配置管理中,您可以自行配置应用程序的每个组件,并让其按照您所想要的方式运行。

声明式配置是Kubernetes在许多用户实例中如此强大和可伸缩的其中一个原因。您可以设置一次配置,并且根据需要多次应用它。

但是,如果您的配置需求不断变化,或者在工作负载或环境中的不同部分之间变化,那么您应当如何处理呢?在这种情况下,声明式配置管理将成为一个障碍,您将发现自己需要不断地调整先前认为是“一劳永逸”的配置文件。

因此,在您选择采用Kubernetes之前,您需要考虑应用程序的配置需求。只有当您所需要的配置相对通用且静态时,Kubernetes才是一个不错的选项。

5、Kubernetes和多云

Rancher等部分Kubernetes发行版的主要功能之一,是单个Kubernetes部署可以编排多个集群,无论集群位于在不同的公有云还是私有云上。这一功能使Kubernetes成为协助控制多云架构复杂性的优秀工具。

在跨多云部署容器化应用程序,并且Kubernetes的设置和配置工作很合理时,多云上的Kubernetes是十分有意义的。

在这一因素中,您需要留意的是,在考虑是否以及何时采用Kubernetes时,应考虑您当前的多云战略以及多云扩展计划。

结 语

Kubernetes是一个非常棒的工具,在正确设置的情况下,它可以产生巨大的价值。但是,它并没有达到杀手级应用程序的状态,因为它无法在所有用户实例中交付价值。在您被巨大的宣传攻势攻陷,并确定您无法离开Kubernetes之前,请清醒地对自己的需求进行评估,明确Kubernetes是否能在真正意义上帮助您更加有效、更加可靠地运行应用程序。

在采用K8S之前您必须了解的5件事情的更多相关文章

  1. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

    VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...

  2. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

    本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...

  3. ReentrantLock+线程池+同步+线程锁

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  4. C#为什么要多线程开发(一)

    首先说下多线程出现的原因: 为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等 ...

  5. 多线程Thread

    多线程的意义 使用多线程可以充分利用CPU资源.提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.在处理大量的IO操作或处理的情况需要花费大量的时间时(如:读写文件,视频图像的采集, ...

  6. C# 数据推送 实时数据推送 轻量级消息订阅发布 多级消息推送 分布式推送

    前言 本文将使用一个NuGet公开的组件技术来实现数据订阅推送功能,由服务器进行推送数据,客户端订阅指定的数据后,即可以接收服务器推送过来的数据,包含了自动重连功能,使用非常方便 nuget地址:ht ...

  7. Java多线程面试题:线程锁+线程池+线程同步等

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  8. 2019年Java并发精选面试题,哪些你还不会?(含答案和思维导图)

    Java 并发编程 1.并发编程三要素? 2.实现可见性的方法有哪些? 3.多线程的价值? 4.创建线程的有哪些方式? 5.创建线程的三种方式的对比? 6.线程的状态流转图 7.Java 线程具有五中 ...

  9. 二进制安装kubernetes(七) 部署知识点总结

    1.k8s各个组件之间通信,在高版本中,基本都是使用TSL通信,所以申请证书,是必不可少的,而且建议使用二进制安装,或者在接手一套K8S集群的时候,第一件事情是检查证书有效期,证书过期或者TSL通信问 ...

随机推荐

  1. P1057 传球游戏 - 完美错解

    //作者:pb2 博客:https://www.luogu.com.cn/blog/pb2/ 或 http://www.cnblogs.com/p2blog//博客新闻1:"WPS开机自启, ...

  2. 报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.

    今天重装eclipse和Tomcat,启动时候报标题错“The server cannot be started because one or more of the ports are invali ...

  3. Shell 脚本 —— java 代码远程调用shell脚本重启 tomcat

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.创建maven 工程 ​ maven 依赖: <dependency> <grou ...

  4. 高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 常见业务处理 一.使用数据库处理常见业务: 案例: 如何对评论进行分页展示 使用 EXPLAIN 获得s ...

  5. Java实现 LeetCode 744 寻找比目标字母大的最小字母(二分法)

    744. 寻找比目标字母大的最小字母 给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 在比较时,数组里字母的是循环有序的.举个例 ...

  6. 第七届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第 ...

  7. Java实现LeetCode 139 单词拆分

    public boolean wordBreak(String s, List<String> wordDict) { if(s.length() == 0){ return false; ...

  8. java实现第四届蓝桥杯剪格子

    剪格子 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子 ...

  9. 一、kafka 介绍 && kafka-client

    一.kafka 介绍 1.1.kafka 介绍 Kafka 是一个分布式消息引擎与流处理平台,经常用做企业的消息总线.实时数据管道,有的还把它当做存储系统来使用. 早期 Kafka 的定位是一个高吞吐 ...

  10. Python如何绘制可视化图?给你一段代码,你能自己做出来吗

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 喜欢的朋友欢迎关注小编,除了分享技术文章之外还有很多福利 没有数据生成的图 ...