kubernetes最新实战生产:01-Kubernetes介绍

2020-04-08  本文已影响0人  何阳光

Kubernetes介绍

kubernetes的介绍-前世今生

我们通常把Kubernetes简称为K8S,Kubernetes名字太长了,叫起来有点麻烦,而Kubernetes首字母与结尾字母之间有8个字母,因此被称作K8S。但是其实老外并不明白!容器化的发展是计算机领域的必然结果,在传统部署服务和管理服务中,我们把更多的时间投入到了配置开发环境和部署应用上。大大影响了我们的效率,也增加了系统更多的不稳定性。所以这个时候容器时代就来了!

当然容器时代的最初的代表产物就是Docker!👀一下Docker可爱极了的样子。也就是👇的小鲸鱼。

当然在容器时代的初期,我们经常会使用DockerFile来构建docker,慢慢的我们发现了,我们突然有好多的DockerFile也有好多的Docker容器,并不容易管理。更不用说标准化了。所以,这个时候容器编排的概念和工具就慢慢的进入了我们的视角里。当然在编排出现的初期,有很多工具,比如:Docker Swarm、Kubernetes等,但是在发展的过程中Kubernetes已经成为了容器编排领域的一个标准了。

Kubernetes是Google团队发起的一个开源项目,他的目标就是管理多个跨主机的容器,用于自动化部署、扩展和管理容器化的应用程序,主要实现语言为Golang,它的理论基础来源于Google内部的Borg项目,所以Kubernetes项目要比其他开源项目“先进”很多,因为Borg系统一直被称为Google公司内部的“秘密武器”。

Kubernetes架构-整体结构

Kubernetes项目依托着Borg项目理论的优势,确定了一个如下图所示的全局架构图:

Kubernetes组件-细化分析

👆我们介绍了Kubernetes集群的整体架构,下面我们来更加详细的了解这些组件的功能。

kube-apiserver [中央控制中心]

以API Server为Kubernetes入口的设计主要有以下好处:

kube-controller-manager [内部管理控制中心]

Controller Manager 用于实现Kubernetes集群故障检测和恢复的自动化工作。主要负责执行各种控制器:

kube-scheduler [资源分配中心]

Scheduler是负责整个集群的资源调度的。

kubelet [节点管家]

Kubelet是负责容器真正运行的核心组件,维护容器的生命周期,并管理CSI(Container Storage Interface)和CNI(Conteinre Network Interface)。

kube-proxy [对外转发中心]

kubectl [集群管理命令行工具集]

Kubernetes核心资源对象-功能分析

上面我们都是在架构层面了解Kubernete,似乎我们根本没有提关于容器如何编排。这一小节,我们会分析Kubernetes是如何调度和统一管理这些容器的。(PS:容器就像你的小猫咪,总会偶尔调皮,但永远不会离开你)

Pod - 小兵

啊?又是一个新的概念,什么是Pod呢?

我猜一般人看了这些,应该还是不明白!没关系,我们继续唠!

Pod里面会包含一个或者N个容器,所以在 Kubernetes里面没有容器的概念,最小的调度单元就是Pod,所以我们将来部署任何服务都是基于Pod去调度的。当然上面也说了Pod里面可以放置多个容器或者1个容器,通常来说我们只会在一个Pod里面放一个容器。记住一个核心原则,将多个应用分散到多个Pod中,减少耦合性。

其实Pod在kubernetes中更重要的意义是容器的设计模式。所以技术不仅仅是技术更像是一种模式思想在领着我们一点一点往前走。

典型创建Pod的流程:

Label - 特殊能力标记者

字如其名Label就是标签的意思,在Kubernetes资源对象中使用的巨多!也是非常重要的一个属性。

Namespace - 资源隔离者

Namespace中文解释命名空间,是对一组资源和对象的抽象集合。

要听大白话?好!你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助!

注意它并不是 Linux Namespace,二者没有任何关系。

Deployment - 无状态应用守护者

我们前面说了Pod是Kubernetes集群中的最基本调度单元,但是如果想要创建同一个Pod的多份备用或者负载均衡应用,需要一个一个分别创建出来么?是否需要将Pods划分到一个逻辑组里面来统一管理呢?那么Deployment就是用来管理Pod的资源对象。

举个栗子!

Deployment 确保任意时间都有指定数量的 Pod“副本”在运行。如果为某个 Pod 创建了 Deployment 并且指定3个副本,它会创建3个 Pod,并且持续监控它们。如果某个 Pod 不响应,那么 Deployment 会替换它,始终保持总数为3。

Service

Service是应用服务的抽象,通过Label Selector为应用提供负载均衡和服务发现

匹配Labels的Pod IP和端口会组成一个列表叫做Endpoints,由kube-proxy负责将服务IP负载均衡到这些Endpoints上。

每个Service都会自动分配一个Cluster IP(只能在集群内部访问的虚拟地址)和DNS名,其它Pod里的容器可以通过该地址或DNS来访问服务,而不需要了解后端Pod里容器的运行。

第一篇文章,到这里就结束了,回顾一下,这篇文章我们主要是学习了Kubernetes的介绍、Kubernetes的架构、Kubernetes的组件和Kubernetes核心资源对象,这节概念比较多,所以希望大家好好理解,后面我们会详细把每个点展开在细讲和实践。下一篇文章:Kubernetes部署-摸一摸朋友吧。

上一篇 下一篇

猜你喜欢

热点阅读