侧边栏壁纸
  • 累计撰写 32 篇文章
  • 累计创建 55 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Kubernetes 核心概念

Testerfans
2022-08-07 / 0 评论 / 16 点赞 / 1,795 阅读 / 2,031 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-09-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

以docker为代表的容器化技术发展了几十年,为什么我们还需要使用kubernetes(下称k8s)呢?k8s到底有怎样的魅力,让大家趋之若鹜、欲罢不能呢。本篇将从为什么用k8s、k8s是什么、k8s的基本架构、k8s的官方文档几个方面来基本了解k8s。

有了Docker,为什么用k8s

核心诉求:企业为了实现业务的连续性,系统往往都要支持高并发和高可用。

在上述背景下,我们如何高效、集中的管理这些容器来满足系统高可用和高并发需求呢?

面临的挑战

在使用docker的场景下,为了支持高并发和高可用,需要在多台服务器上部署docker并在每台服务器上启动一个容器,然后在多台服务器上层搭建一层load balance,实现整体架构上的高并发和高可用。

在这种架构下,会面临比较现实的问题,包括:

  • 一般情况下docker容器的ip是变化的,当升级某一服务的时候需要修改LB指向服务的ip。
  • 即使docker能实现静态ip的不变,当一个服务部署节点比较多时,升级也是耗时耗力。
  • 升级后的扩容和缩容管理繁琐,尤其是在服务节点较多时。

存在大量容器时,如何高效管理和维护这些容器所面临的挑战,直接促进了容器编排技术和工具的的出现和应用。

容器编排技术

容器编排技术主要解决在多台物理主机中协调容器资源的问题,目前被我们熟悉和了解容器编排工具包括 Docker Swarm,Kubernetes 和 Mesos+Marathon,k8s是最受企业欢迎和市场占有率最高的容器编排工具。

关于,为什么使用k8s和能解决什么问题,k8s官方文档中是这样介绍的:

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。

也就是说,k8s不仅仅解决了系统使用容器技术带来的技术挑战,并且极大的简化了高并发、高可用架构下容器的管理工作。

k8s是什么

对于k8s是什么,官方的介绍如下。

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

k8s集群架构和组件

一个k8s集群是由一组被称作为节点(node)的机器组成,这些节点上会运行由Kubernetes所管理的容器化应用。而且每个集群至少有一个工作节点(worker node)。

工作节点会托管所谓的Pods,而Pod就是作为应用负载的组件。控制平面(control plane)管理集群的工作节点和Pods,为集群提供故障转移和高可用。

对于控制平面这个概念有些抽象,既然K8s有“舵手”和“飞行员”的含义,那飞行员操控飞行器就需要有一个操作台,由操作台作为统一的入口提供飞行器的监控、调度……,以便飞行员更好、更快、更方便的控制管理飞行器。同理,k8s的control plane也是为了更好的监控、管理和调度集群。

架构图

控制平面组件(Control Plane Components)

控制平面组件会为集群做出全局决策,如:资源调度、检测和响应集群事件。例如当某一应用的pod数量不满足预先设定的replicas(副本)数量时,要启动新的pod以满足预期设定。

  • kube-apiserver
    Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
  • kube-contoller-manager
    处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。例如Deployment、Service。
  • kube-scheduler
    根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
  • cloud-controller-manager
    云控制器管理器(Cloud Controller Manager)允许你将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。cloud-controller-manager 仅运行特定于云平台的控制器。 因此如果你在自己的环境中运行 Kubernetes,或者在本地计算机中运行学习环境, 所部署的集群不需要有云控制器管理器。
  • etcd
    分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。

节点组件(Node Components)

节点组件会在每个节点上运行,负责维护运行的Pod并提供k8s运行环境。

  • kubelet
    kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
  • kube-proxy
    在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
  • Container Runtime(容器运行时)
    k8s支持多种容器运行时,如:docker、containerd、podman等,k8s与容器运行时通过标准的CRI接口进行交互。

熟悉官方文档

官方文档是学习k8s的第一手资料,我们可以访问官方网站 找到文档并且选择中文进行学习。
image-1663055109184

总结

本章主要介绍了为什么使用k8s,并结合官网了解了k8s的基本架构和组件作用。后续我们会使用本地搭建的环境进行演练,用实践的方式掌握k8s的基本使用和原理。

k8s的本地试验环境部署可以参考前面的几篇博客。
k8s集群搭建:安装虚拟机
k8s集群搭建:集群规划及服务器配置
k8s搭建-集群安装和安装


参考:
官方文档
官方网站

16

评论区