前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用部署与管理 —— Kubernetes 架构

应用部署与管理 —— Kubernetes 架构

作者头像
腾讯云 CODING
发布2022-03-16 09:27:38
9710
发布2022-03-16 09:27:38
举报
文章被收录于专栏:CODING DevOpsCODING DevOps

本文作者:何文强 — CODING 高级解决方案架构师 具有一线互联网、物联网独角兽、全国股份制银行、新型智慧交通等跨行业从业经历,历任 Java 开发高级工程师、DevOps 技术专家、高级研发经理等职,对微服务、敏捷、DevOps、容器技术有深刻的理解和丰富的实践。

Kubernetes 发展背景

随着虚拟化技术和云计算的发展,为容器技术的发展创造了条件,2013 年,dotcloud 公司开源容器技术 Docker,受到了业界的极大关注和欢迎,一种新的构建和交付方式迅速风靡全球。Docker 解决了应用打包和分发问题,随着 Docker 与微服务等技术的深入融合,应用编排和管理受到越来越多的关注,也成为大规模容器化的一个重要挑战。以解决容器编排和管理的平台 Kubernetes 在 2013 年横空出世,并与 Docker Swarm、Mesos 展开激烈的竞争,最后 Kubernetes 在 2017 年大获全胜,成为容器编排的实施标准。Kubernetes 作为 CNCF 的第一个毕业项目,凭借自身技术优势以及强大的社区和生态建设,已成为云时代的操作系统,云原生技术的基石。

Kubernetes 发展历程

2003 年 Kubernetes 源于谷歌内部的一个大规模集群管理系统 Borg,Borg 系统是谷歌第一个集群管理系统,承载谷歌数千个不同的业务程序和数十万个作业,管理者谷歌百万计的计算机资源。

Borg系统架构图

Borg 系统统提供了配置和更新 job 的机制,能够预测资源需求,动态地对在运行中的程序推送配置文件、服务发现、负载均衡、自动扩容、机器生命周期的管理、额度管理以及更多。这个生态系统的发展源自谷歌内部不同团队的需求,发展的结果成为了异构的、ad-hoc 系统的集合,Borg 的使用者能够用几种不同的配置语言和进程来配置和沟通。由于 Borg 的规模、功能的广泛性和超高的稳定性,Borg 在谷歌内部依然是主要的容器管理系统。

2013 年,Google 为了构建一个更为一致的基础架构,Google 借鉴和吸收 Borg 上的优秀理念和能力,推出了新一代集群管理系统 Omega(Google 第二个集群管理系统),Omega 作为 Borg 的延伸,应用了很多在 Borg 内已经被认证的成功的模式。Omega 存储了基于 Paxos、围绕 transaction 的集群的状态,能够被集群的控制面板(比如调度器)接触到,使用了优化的进程控制来解决偶尔发生的冲突。这种分离允许 Borgmaster 的功能被区分成几个并列的组建,而不是把所有变化都放到一个单独的、巨石型的 master 里。许多 Omega 的创新(包括多个调度器)都被收录进了 Borg。

2014 年,Kubernetes 开源。Kubernetes 是 Google 开发的第三个集群管理系统与 Borg、Omega 完全是谷歌内部系统项目,Kubernetes 是开源的,对 Docker 等主流容器技术天然友好支持,同时具备 Borg 和 Omega 的众多优势和能力。

2015 年,Kubernetes 1.0 发布,标志着 Kubernetes 生产可用。同年,在 Google 的主导下,谷歌和 Linux 基金会合作成立 CNCF(云原生计算基金会),Kubernetes 作为 CNCF 的王牌项目促进 CNCF 的迅速发展。

2018 年,激烈的容器编排之战以 Kubernetes 大获全胜而告终,以拉枯摧朽之势将 Swarm、Mesos 等编排工具打入万丈深渊,Kubernetes 成为了容器编排的实施标准。同时,各大云厂商相继推出 Kubernetes 托管服务,Kubernetes 以前所未有的速度发展。

2020 年,Kubernetes 进去成熟稳定期,多个能力特性得到满足和增强。云原生技术和理念深入人心。根据调查显示,已有接近 20% 的应用运行在 Kubernetes 集群上,容器化进程仍在加速,Kubernetes 全民时代已到来。

2021年~,本文截稿时,Kubernetes 1.23 即将发布,结合笔者的亲身经历,Kubernetes 已成为企业上云,企业数字化的必选题并对 Kubernetes 给予信任和寄予厚望。Kubernetes 与当下主流的微服务、服务网格等积极赋能和深度融合,以 Kubernetes 为基石的云原生技术将迎来大发展大繁荣时期。

Kubernetes 架构
Master
  • API Server

Kubernetes 的“心脏”,是集群控制的入口进程,也是 Kubernetes 所有资源增、删、查、改等操作的唯一入口。

  • Controller Manager

运行控制器进程的控制平面组件,Kubernetes 资源对象的”大总管”,是所有资源对象的自动化控制中心,比如 Deployment 中的 pod 副本数。

  • Cloud controller manager

云控制器管理器是指嵌入特定云的控制逻辑的控制平面组件。云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

cloud-controller-manager 仅运行特定于云平台的控制回路。如果你在自己的环境中运行 Kubernetes,或者在本地计算机中运行学习环境, 所部署的环境中不需要云控制器管理器。

  • Scheduler

Kubernetes 的”调度室“,负责资源调度(Pod调度)。

控制平面组件,负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。

调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

  • Etcd

Etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。

Node
  • Kubelet

一个在集群中每个节点(node)上运行的代理。它保证容器(containers)都运行在 Pod 中。

kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。

  • Kube-proxy

与 Kubernetes Service 通信与负载均衡机制。kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。

kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

  • Container Runtime

Docker Engine,负责本机容器的创建、启停与销毁等工作。Kubernetes 支持多个容器运行环境:Docker、 containerd、CRI-O 以及任何实现 Kubernetes CRI(容器运行环境接口)。

插件(Addons)
  • DNS

Kubernetes 的内置服务发现机制,集群内通过服务名对服务进行访问,完成服务名到 ClusterIP 的解析。

  • Web UI

Kubernetes 集群的 web UI,通过它可以创建应用、查看全部资源详细信息以及资源使用情况。

Kubernetes组件间的协作

(Pod 创建)

Kubernetes 特点
  • 自动发布和回滚;
  • 服务运行状况监控;
  • 自动调节服务容量;
  • 声明式管理;
  • 随处部署,包括混合部署。
Kubernetes 功能
  • 数据卷

Pod 中容器之间共享数据,可以使用数据卷。

  • 应有程序健康检查

容器内服务可能进程堵塞无法处理请求,可以设置监控检查策略保证应用健壮性。

  • 复制应用程序实例

控制器维护着 Pod 副本数量,保证一个 Pod 或一组同类的 Pod 数量始终可用,

  • 弹性伸缩

根据设定的指标(CPU 利用率)自动缩放 Pod 副本数。

  • 服务发现

使用环境变量或 DNS 服务插件保证容器中程序发现 Pod 入口访问地址。

  • 负载均衡

一组 Pod 副本分配一个私有的集群 IP 地址,负载均衡转发请求到后继容器。在集群内部其他 Pod 可通过这个 ClusterIP 访问应用。

  • 滚动更新

更新服务不中断,一次更新一个 Pod,而不是同时删除整个服务。

  • 服务编排

通过文件描述部署服务,使的应用程序部署变得更高效。

  • 资源监控

Node 节点组件集成 cAdvisor 资源收集工具,可通过 Heapster 汇总整个集群节点资源数据,然后存储到 InfluxDB 时序数据库,再由 Grafana 展示。

  • 提供认证和授权

支持角色访问控制(RBAC)认证授权等策略。

Kubernetes yaml 文件

apiVersion: apps/v1 #必填

kind: Deployment #必填

metadata: #必填

name: nginx-deployment

spec: #必填

selector:

matchLabels:

app: nginx

replicas: 2 # tells deployment to run 2 pods matching the template

template:

metadata:

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx:1.14.2

ports:

- containerPort: 80

Kubernetes 对象对应的 yaml 文件,需要配置如下字段:

字段

说明

apiVersion

创建该对象所使用的 Kubernetes API 的版本

kind

想要创建的对象的类别

metadata

帮助唯一性标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace

spec

你所期望的该对象的状态

《数字化 IT 从业者知识体系》背景

数字化和可持续发展是中国企业未来发展的两大主题,掌握数字化知识,具备数字化能力,应用数字化技术是我们 IT 从业者未来核心竞争力所在。《数字化 IT 从业者知识体系》的初衷是为 IT 从业者提供的系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。

在接下来的《数字化 IT 从业者知识体系》系列文章,何文强将从软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四个方面,为大家进行逐一分享介绍:

1. 软件开发方法主要包括瀑布、敏捷、精益等;

2. 应用技术架构主要包括微服务架构、服务网格架构、无服务器架构、分布式多运行架构等;

3. 应用部署与管理主要包括但不限于虚拟化技术、容器技术与容器编排等;

4. 软件交付与协作主要包括但不限于 CMMI、ITIL、DevOps 等。

相信该知识体系有利于 IT 从业者构建丰富的技术体系、全面的技术视野和系统的能力建设。欢迎大家前往《数字化 IT 从业者知识体系》话题进行详细阅读。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾云 CODING 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kubernetes 发展历程
  • Kubernetes 架构
    • Master
      • Node
        • 插件(Addons)
        • Kubernetes 特点
        • Kubernetes 功能
        • Kubernetes yaml 文件
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档