一起来入门Kubernetes(k8s)

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起来入门Kubernetes(k8s)相关的知识,希望对你有一定的参考价值。

什么是Kubernetes

Kubernetes是一个全新的基于容器技术的分布式架构领先方案是谷歌大规模集群工具Borg的一个开源版本

Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。

Kubernetes项目可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes是一个开放的开发平台。它不局限于任何一种语言,没有限定任何编程接口,所以不论是用Java、Go、C++还是用Python编写的服务,都可以被映射为Kubernetes的Service (服务),并通过标准的TCP通信协议进行交互。此外,Kubernetes平 台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。

Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubermetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。

Kubernetes的好处:

1、隐藏资源管理和错误处理,用户仅需要关注应用的开发
2、服务高可用、高可靠
3、可将负载运行在由成千上万的机器联合而成的集群中

Kubernetes分布式集群架构的核心:service

一个Service对象拥有如下关键特征:
1、拥有唯一指定的名称( 比如mysql-server)
2、拥有一个虚拟IP (Cluster IP、Service IP或VIP)和端口号。
3、能够提供某种远程服务能力。
4、被映射到提供这种服务能力的一组容器应用上。
一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint (IP+Port) 访问点,但Kubernetes能够让我们通过Service (虚拟Cluster IP +Service Port) 连接到指定的Service。有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。这个Service本身一旦创建就不再变化。

service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。

Kubernetes中的Pod对象

首先要明确的是,k8s调用的是pod,不是单一的容器。
Kubernetes设计 了Pod对象,将每个服务进程都包装到相应的Pod中,使其成为在Pod中运行的一个容器(Container)。

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。

一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace

Kubernetes给每个Pod都贴上一个标签(Label)来建立Service和Pod间的关联关系,例如给运行MySQL的Pod贴上name=mysqI标签,然后给相应的Service定义标签选择器(Label Selector) ,比如MySQL Service的标签选择器的选择条件为name=mysql,意为该Service要作用于所有包含name=mysql Label的Pod。

Pod运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个Pod。

Kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

集群简介

Kubernetes将集群中的机器划分为一个Master和一些NodeMaster用来管理集群,Master运行着集群管理相关的一组进程kube-apiserver、kube controller-managerkubescheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。在Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

核心组件

Kubernetes主要由以下几个核心组件组成(参照上边的图):

etcd:保存了整个集群的状态。

apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。

controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。

scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。

kubelet:负责维护容器的生命周期,同时也负责Volume(CVI:Container Volume Interface)和网络(CNI:Container Network Interface)的管理。

Container runtime:容器运行时,负责镜像管理以及Pod和容器的真正运行(CRI:Container Runtime Interface)。

kube-proxy:负责网络接入,让外部能访问,为Service提供cluster内部的服务发现和负载均衡。需要第三方的网络插件驱动。

除了核心组件,还有一些推荐的Add-ons:
kube-dns:负责为整个集群提供DNS服务。
Ingress Controller:为服务提供外网入口。
Heapster:提供资源监控。
Dashboard:提供GUI。
Federation:提供跨可用区的集群。
Fluentd-elasticsearch:提供集群日志采集、存储与查询。

设计理念

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构。

从下至上依次为:
Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等。
核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

接口层:kubectl命令行工具、客户端SDK以及集群联邦

生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等。

Kubernetes为什么叫k8s

其实这个很好猜😁,因为k和s中间有8个字母😂。

以上是关于一起来入门Kubernetes(k8s)的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes(K8S) 容器管理“扫盲“ 学习笔记

云原生Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务

K8S专栏什么是Kubernetes

k8s基本使用入门-使用Pod

2020年,值得收藏的50多种Kubernetes工具

Kubernetes入门