解析Kubernetes (k8s):提升应用部署与管理的利器

Kubernetes

概述

  • Kubernetes是一个可移植、可拓展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

  • k8s这个缩写是因为k和s之间有八个字符的关系。

应用部署方式

部署方式

传统部署时代

​ 早期,直接将应用程序部署在物理机上,无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题,程序之间还会相互影响。如果将应用程序运行在不同的物理服务器上,有的应用程序资源利用率不高又会造成资源浪费,而且物理服务器的维护成本高昂。

虚拟化部署时代

虚拟化技术允许在单个物理服务器上运行多个虚拟机(VM)。每个虚拟机是一个独立的环境,可以有效隔离应用程序,且能提供一定程度的安全性。

​ 虚拟化技术能够更好地利用物理服务器的资源,并且因为可以轻松地添加或更新应用程序,而因此可以具有更高的收缩性,以及降低硬件成本等等的好处坏处就是每个虚拟机都有操作系统,浪费了部分资源。

容器部署

容器类似于VM,具有更加宽松的隔离特性,不同容器之间共享操作系统。相比于VM,容器更加轻量级。每个容器都具有自己的文件系统、CPU、内存、进程空间等。

容器具有的优势:

  1. 敏捷应用程序的创建和部署
  2. 持续开发、集成和部署:通过快速简单的回滚(镜像的不可变性),提供可靠且频繁的容器镜像构建和部署。
  3. 跨开发、测试和生产的环境一致性:在笔记本电脑上也可以和在云中运行一样的应用程序。
  4. 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理-而不是在一台大型单机上整体运行。
  5. 资源隔离:可预测的应用程序性能。
  6. 资源利用:高效率和高密度。

为何需要k8s

容器是打包和运行应用程序的好方式。虽然容器化部署方式有许多优势,但是还存在一些问题。例如:

  1. 数据访问量变大时,如何动态扩容?
  2. 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器

这就是k8s需要解决的问题。k8s提供了一个可弹性运行分布式系统的框架,会满足你的拓展要求、故障转移、提供部署模式等。

k8s的优势

服务发现和负载均衡
  • k8s可以使用DNS名称或者自己的IP地址来暴露容器。如果进入容器的流量很大,k8s可以负载均衡并分配网络流量,从而使内部稳定。
存储编排
  • k8s允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
自动部署和回滚
  • 使用k8s描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。例如,可以自动化k8s来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
自动完成装箱计算
  • 为k8s提供许多节点组成的集群,在这个集群上云霄容器化的任务。告诉k8s每个容器需要多少cpu和内存。k8s可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
自我修复
  • k8s将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状态检查的容器,并且在准备好服务之前不将其通告给客户端。
密钥和配置管理
  • k8s允许你存储和管理敏感信息,例如密码、OAuth令牌和SSH密钥、可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需再堆栈配置中暴露密钥。
批处理执行
  • 除了服务外,k8s还可以管理你的批处理和持续集成(CI)工作负载,如有需要,可以替换失败的容器。
水平扩缩
  • 使用简单的命令、用户界面或根据CPU使用率自动对你的应用进行扩缩
IPv4/IPv6双栈
  • 为Pod和Service分配IPv4和IPv6地址
为可拓展性设计
  • 在不改变上游源代码的情况下为你的k8s集群添加功能。

k8s架构

分布式架构

组件介绍

master组件

Master Node简称为Master,集群控制节点,可以看成是一个特殊的Node负责管理其他的Node。
Master具有四个组件:kube-apiserveretcdkube-schedulerkube-controller-manager

kube-apiserver
  • 管理整个k8s所需的API接口,例如从Command Line下Kubectl指令就会吧指令送到这
  • Node之间的沟通桥梁,Node直接不允许直接沟通,必须通过apiserver
  • 负责k8s中请求的身份认证和授权
etcd
  • 存放k8s cluster的资料作为备份,当master发生故障时,可以透过etcd还原k8s的状态。
kube-controller-manager
  • 管理并运行kubernetes controller,controller是负责监视cluster状态的Process,如Node controller、Replication controller。
  • Process会在Cluster与预期状态不符时尝试更新现有状态。例如要多开一台机器以应付流量时,预期状态会更新成N+1,但现有状态为N,因此这时相对应的Controller就会想办法多开一台机器
kube-scheduler
  • 整个k8s上得调度员,scheduler会监视新建立但还没有被指定要放在哪个Node上得Pod,并根据每个Node上得资源规定、硬件限制等条件去协调一个最适合的Node让Pod运行。
Pod

Pod是k8s运行的最小部署单位,一个Pod可以由一个或多个容器组成,而这些Pod具有以下几个特点:

  • 每个Pod都有属于各自独立的yaml
  • 同一个Pod中的容器共享同样的网络和资源,彼此以local number port通信。
  • 一个Pod可以容纳多个容器,但是一般情况建议一个Pod对应一个容器;然后如果多个容器的应用会高度耦合,即这些应用必须使用相同的资源,像以前还没有容器概念时,有些应用必须要放在同一个主机或虚拟机上,这种情况就会把多个容器放在同一个Pod
Worker Node

Worker Node 简称Node,是k8s运行的最小硬件单元,一个Node对应一个机器。
每个Node 都有三个组件:kublet、kube-proxy、Container Runtime

kubelet
  • 该Node的管理员,负责管理该Node上的所有Pod的状态并负责与Master沟通。Master负责管理Node
kube-proxy

-该Node上得通讯员,负责更新Node的Iptables,让其他不在该Node中的物件可以得知该Node上所有Pod的最新状态。

Container Runtime
  • 该Node真正负责容器执行的程序,如 Docker 容器的 Container Runtime 即為 Docker Engine。
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BananaNo2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值