Kubernetes介绍

简介: Docker系列文章:1. 为什么要学习Docker2. Docker基本概念3. Docker镜像基本原理4. Docker容器数据卷5. Dockerfile6. Docker单机网络上7. Docker单机网络下8. Docker单机网络实战9. Docker隔离技术10. Docker限制11. Docker Compose

一、前言


从本周开始以后尝试开始每周两更,本篇原计划是Docker多机网路,该篇文章有些卡文,所以先更新篇Kubernetes文章,关于Docker系列文章后面应该就剩下两篇了,等后续Kubernetes使用篇讲完以后,再开始做一些Docker相关深层次思考。

Docker系列文章:
  1. 为什么要学习Docker
  2. Docker基本概念
  3. Docker镜像基本原理
  4. Docker容器数据卷
  5. Dockerfile
  6. Docker单机网络上
  7. Docker单机网络下
  8. Docker单机网络实战
  9. Docker隔离技术
  10. Docker限制
  11. Docker Compose


二、什么是Kubernetes


Kubernetes是谷歌十几年来大规模容器实践的成果,是谷歌Brog的开源版本。Google 每周会启用超过 20 亿个容器——全都由内部平台 Borg 支撑。Borg 是 Kubernetes 的前身,汲取了Brog的经验和教训,所以Kubernetes以开源,就迅速称霸容器领域。

Kubernetes是一个全新基于容器技术的分布式架构方案,它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行容器的多组主机聚集在一起,由 Kubernetes 帮助您轻松高效地管理这些集群。而且,这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言,Kubernetes 是优秀的托管平台。

Kubernetes是一个开放平台,它不局限于任何语言,不限制任何编程接口。无论用啥语言编写的服务,都可以被映射为Kubernetes的服务,并且通过标准的TCP通信协议进行交互。Kubernetes是一种更高层次的抽象,对编程的语言、框架、中间件没有任何浸入,现有的系统和平台很容器可以迁移到Kubernetes平台上。

Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完善的集群管理能力,包含服务的注册、服务发现、负责均衡、故障发现、服务滚动升级、在线扩容以及多粒度的资源配额管理等。同时Kubernetes提供的完善的管理工具,这些工具覆盖了整个软件生命周期。

总结一下,Kubernetes是一个具有优秀背景的、全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。


三、Kubernetes核心概念介绍


Kubernetes的总架构图

img

Kubernetes核心组件介绍

Master
kube-apiserver

kube-apiserver 是 Kubernetes 最重要的核心组件之一,kube-apiserver在Kubernetes 集群中扮演着通信枢纽的角色。kube-apiserver不仅负责和 etcd 交互,并切对外提供统一的API调用入口, 所有的交互都是kube-apiserver为核心的, kube-apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制等功能;

kube-controller-manager

kube-controller-manager 是Kubernetes 集群的大总管,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态。每一个 Controller 通过kube-apiserver提供的 Restful 接口实时监控集群内每个资源对象的状态,当发生故障,导致资源对象的工作状态发生变化,就进行干预,尝试将资源对象从当前状态恢复为预期的工作状态。常见的 Controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。

kube-scheduler

kube-scheduler负责对集群内部的资源进行调度,相当于“调度室”。接收来自kube-apiserver创建Pods的任务,收到任务后它会检索出所有符合该Pod要求的Node节点(通过预选策略和优选策略),开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

Etcd

Etcd在Kubernetes中是用来存放数据并通知变动的,Kubernetes中把关键数据都存放在Etcd中,在Kubernetes中,数据是随时发生变化的,比如说用户提交了新任务、增加了新的Node、容器死掉了等等,都会触发状态数据的变更。状态数据变更之后,Master上的kube-scheduler和kube-controller-manager,就会重新发起变更,这些变化,都需要及时地通知给每个组件。Etcd有一个特征,可以在调用它的api中,监听api的数据,一旦数据发生变化,就会收到通知。Kubernetes利用这个特征,当节点消失或配置有变动时,Etcd会第一时间发现,就会告知每个订阅过的组件,这个时候发生变化组件可以知道自己应该做什么。对于kube-scheduler和kube-controller-manager只需要把最新的数据写入到Etcd中就可以了,不需要再次去发起调用。

img

Node
kubelet

在Kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。kubelet会在kube-apiserver上注册节点信息,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源。可以把kubelet理解成Node上的Pod管家。

kube-proxy

在Kubernetes集群中,每个Node节点上都会部署kube-proxy,kube-proxy 会作为守护进程跑在每个节点上通过监听着Etcd中关于Pod的最新状态,一旦检查到一个Pod资源发生变动,kube-proxy 就立即将这些变动,反应在iptables 或 ipvs规则中,当后续再有请求发到Service时,Service可以通过ipvs最新的规则将请求的分发到Pod上,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟网络转发。

container

在Kubernetes集群中,每个Node节点都会存在container。container负责本机容器的管理和创建,目前最常采用的就是Docker。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
Kubernetes 负载均衡 Linux
Kubernetes的应用
Kubernetes的应用
76 0
|
运维 Kubernetes 负载均衡
Kubernetes介绍篇:是什么?为什么要用?
是时候该学习Kubernetes了,不然都不敢说自己了解容器、了解Docker。
1319 0
Kubernetes介绍篇:是什么?为什么要用?
|
4月前
|
Kubernetes 负载均衡 调度
在K8S中,什么是kubernetes?
在K8S中,什么是kubernetes?
|
4月前
|
存储 Kubernetes 调度
Kubernetes 是什么?
Kubernetes 是什么?
53 1
|
7月前
|
Kubernetes 前端开发 网络协议
Kubernetes服务
Kubernetes服务
72 0
Kubernetes服务
|
7月前
|
Kubernetes 负载均衡 应用服务中间件
Kubernetes
Kubernetes 版 ACK(Alibaba Cloud Container Service for Kubernetes)是阿里云提供的一种容器服务,它基于 Kubernetes 开源容器编排平台,为用户提供高效、可扩展的容器应用管理能力。ACK 可以帮助用户在云端轻松部署、管理和扩展容器化应用,同时提供了丰富的 Kubernetes 功能,例如自动扩展、滚动更新、负载均衡等。
86 1
|
7月前
|
Kubernetes 监控 关系型数据库
了解Kubernetes
kubernetes入门
47 0
|
Kubernetes 容器
Kubernetes的ExternalName详解
ExternalName类型的Service在Kubernetes中用于将外部服务(不是Kubernetes集群内的服务)映射到Kubernetes集群内的Service。 # 样例 其创建方法如下: ``` kind: Service apiVersion: v1 metadata: name: my-external-service namespace: cv-console-dev labels: app: my-external-service annotations: kubesphere.io/creator: sunjq kubesph
361 0
|
边缘计算 运维 Kubernetes
Kubernetes 伟大的未来
Kubernetes 伟大的未来
230 1
|
存储 Kubernetes 负载均衡
Kubernetes(K8S)是什么?
Kubernetes(K8S)是什么?
321 0
Kubernetes(K8S)是什么?