专栏首页网管叨bi叨你一定要了解的Kubernetes

你一定要了解的Kubernetes

前言

随着容器技术的发展,Docker近几年突然崛起,变得炙手可热,已经成为容器技术的事实标准。然而想要在生成环境中成功部署和操作容器的关键是容器编排技术,市场上有各种各样的容器编排工具(如Docker原生的Swarm),其中谷歌公司开发的Kubernetes得到开源社群的全力支援,IBM、惠普、微软、RedHat等业界巨头纷纷加入,Kubernetes已经成为GitHub上的明星开源解决方案

简介

Kubernetes这个名字源于希腊语,是舵手的意思,所以它的Logo既像一张渔网,又像一个罗盘。有意思的是Docker的Logo为驮着集装箱在大海上遨游的鲸鱼,KubernetesDocker的关系可见一斑。

Docker和Kubernetes

Kubernetes(也常称K8s,用8代替8个字元“ubernete”而成的缩写。)是一个全新的基于容器技术的分散式架构方案,它源自Google内部大规模集群管理系统——Borg,也是CNCF(Cloud Native Computing Foundation,今属Linux基金会)最重要的解决方案之一,旨在让部署容器化的应用简单并且高效。

Kubernetes具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和线上扩容、可扩充套件的资源自动调度机制、多粒度的资源配额管理能力。还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

Kubernetes在全球范围的搜索指数

Kubernetes于2015年7月22日迭代到v1.0并正式对外公布,无论是英文还是中文社群都非常活跃,全球开源解决方案领导者RedHat公司已经将自己Paas产品OpenShift V3的底层技术换成了KubernetesDockerKubernetes俨然已经成为全新容器生态的领导者。

架构

Kubernetes使用Go语言开发,集群采用Master/Node(最初称为Minion,后改名Node) 的结构,Master(主节点)控制整个集群,Node(从节点)为集群提供计算能力。使用者可以通过命令列或者Web页面的方式来操作集群。

Kubernetes架构

MasterKubernetes集群的大脑,负责公开集群的API,部署和管理整个集群。集群至少有一个Master节点,如果在生产环境中要达到高可用,还需要配置Master集群。

Master主要包含API ServerSchedulerController三个组成部分,需要etcd来储存整个集群的状态。

  • etcd:CoreOS开发,是一个高可用、强一致性的服务发现储存仓库,为Kubernetes集群提供储存服务,类似于zookeper
  • API Server: kubernetes最重要的核心元件之一,提供资源操作的唯一入口(其他模组通过API Server查询或修改资料,只有API Server才能直接操作etcd),并提供认证、授权、访问控制、API注册和发现等机制。
  • Scheduler: 负责资源的调度,按照预定的调度策略将Pod(k8s中调度的基本单位)调度到相应的Node上。
  • Controller: 通过API Server来监控整个集群的状态,并确保集群处于预期的工作状态,比如故障检测、自动扩充套件、滚动更新等。

Kubernetes主节点

NodeKubernetes集群的工作节点,可以是物理机也可以是虚拟机器。Node需要包含容器、kubeletkube-proxy等元件。Fluentd用来提供日志收集功能(可选)。

  • kubelet: 维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理。每个节点上都会执行一个kubelet服务程序,接收并执行Master发来的指令,管理PodPod中的容器。每个kubelet程序会在API Server上注册节点自身的信息,定期向Master节点汇报自身节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。
  • kube-proxy:Service提供集群内部的服务发现和负载均衡,监听API Serverserviceendpoint的变化情况,并通过iptables等方式来为服务配置负载均衡。
  • Docker: 每台Node上需要安装Docker来执行镜像,但是Docker不是唯一选择,Kubernetes支援多种容器,比如CoreOS公司的Rkt容器(之前称为Rocket,现更名为Rkt)。

Kubernetes从节点

资源物件

API物件是Kubernetes集群中的管理操作单元。集群中的众多技术概念分别对应着API物件,每个API物件都有3大类属性:

  • metadata(元资料):用来标识API物件,包含namespacenameuid等。
  • spec(规范):描述使用者期望达到的理想状态,所有的操作都是宣告式(Declarative)的而不是命令式(Imperative),在分布式系统中的好处是稳定,不怕丢操作或执行多次。比如设定期望3个执行NginxPod,执行多次也还是一个结果,而给副本数加1的操作就不是宣告式的,执行多次结果就错了。
  • status(状态):描述系统当前实际达到的状态,比如期望3个Pod,现在实际建立好了2个。

资源组件

Kubernetes众多的API物件中,Pod是最重要的也是最基础的,是kubernetes中可以建立的最小部署单元。Pod就像是豌豆荚一样,它可以由一个或者多个容器组成,这些容器共享储存、网路和配置项。

目前Kubernetes中的业务型别可以分为长期伺服型(long-running)、批处理型(batch)、节点后台支撑型(node-daemon)和有状态应用型(stateful application)这四种类型,而这四种类型的业务又可以由不同类别的Pod控制器来完成,分别为:DeploymentJobDaemonSetStatefulSet

  • Deployment: 复制控制器(Replication Controller,RC)是集群中最早的保证Pod高可用的API物件,副本集(Replica Set,RS)是它的升级,能支援更多种类的匹配模式。部署(Deployment)又是比RS应用模式更广的API物件,以Kubernetes的发展方向,未来对所有长期伺服型的的业务的管理,都会通过Deployment来管理。
  • Service: Deployment保证了Pod的数量,但是没有解决如何访问Pod的问题,一个Pod只是一个执行服务的选项,随时可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod ,因此不能以确定的IP和端口号提供服务。要稳定地提供服务需要服务发现和负载均衡能力,Service可以稳定为使用者提供服务。
  • Job: 用来控制批处理型任务,Job管理的Pod根据使用者的设定把任务成功完成就自动退出了。
  • DaemonSet: 后台支撑型服务的核心关注点在集群中的Node,要保证每个Node上都有一个此类Pod在运行。比如用来收集日志的Pod
  • StatefulSet: 不同于RCRSStatefulSet主要提供有状态的服务,StatefulSetPod的名字都是事先确定的,不能更改,每个Pod挂载自己独立的储存,如果一个Pod出现故障,从其他节点启动一个同样名字的Pod,要挂载上原来Pod的储存继续以它的状态提供服务。比如数据库服务MySQL,我们不希望一个Pod故障后,MySQL中的数据即丢失。

小结

事实上,Kubernetes的内部构件不止这些,要熟练的操作Kubernetes并了解其原理还有很长的路要走。本文只是从宏观视角上的介绍了Kubernetes,对于想要了解Kubernetes的朋友是个不错的开始。

本文分享自微信公众号 - 网管叨bi叨(kevin_tech),作者:KevinYan11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 七张图了解Kubernetes内部的架构

    Kubernetes是用于管理容器化应用程序集群的工具。在计算机领域中,此过程通常称为编排。

    KevinYan
  • 从PHPer到Gopher要经历的一些转变

    学习一门新编程语言时,我们总会下意识地用自己熟悉语言类比着去理解新语言,甚至用原来语言的思维套路写新语言的程序。比如PHP里数组的长度是可以动态增长的,Go里面...

    KevinYan
  • Go 切片使用绕坑指南

    不知道大家有没有发现在一个函数内部对切片参数进行了排序后也会改变函数外部原来的切片中元素的顺序,但是在函数内向切片增加了元素后在函数外的原切片却没有新增元素,更...

    KevinYan
  • Kubernetes 年度关键进展回顾

    2017年已经接近尾声,Kubernetes保持者每季度一个大版本的节奏快速发展,1.6至1.9版本共计完成了近150项特新更新,在集群规模、调度能力、可扩展性...

    企鹅号小编
  • Kubernetes k8s 基础架构与设计理念 名词解释 学习笔记

    Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施...

    大鹅
  • kubernetes集群架构解读

    摘要: 1. kubernetes总架构图 2. kubernetes 各组件介绍 2.1 Master 节点 Master是kubernetes的大脑,运行的...

    kubernetes中文社区
  • K8S学习笔记之Kubernetes核心概念

    Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。 K8S在D...

    Jetpropelledsnake21
  • Kubernetes 设计与开发原则

    Kubernetes 正迅速成为在分布式系统中部署工作负载的事实标准。在这篇文章中,我将通过揭示其底层的设计原则,帮助您更深入地了解 Kubernetes。

    米开朗基杨
  • Kubernetes-整体概述和架构

    Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中...

    菲宇
  • Kubernetes 1.14发布重大功能更新,支持Windows节点的云原生平台

    3月25日,开源Kubernetes云原生平台1.14版本正式亮相,这也是Kubernetes在2019年的首次发布。按照Kubernetes的发布节奏,Ku...

    灵雀云

扫码关注云+社区

领取腾讯云代金券