概述
kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写
Kubernetes 提供了应用部署,规划,更新,维护的一种机制
传统的应用部署方式是通过插件或脚本来安装应用。
- 缺点:是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定
新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源
- 做集群的话,docker不是很方便,k8s便可以解决docker里面很多不方便的地方
k8s是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。简单来说,它是一个开源的容器化分集群管理系统
在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理
总结:
- 目标:让部署容器化应用更加简洁高效
- 使用k8s进行容器化应用部署
- 使用k8s利于应用扩展
优点
自动装箱:
基于容器对应用运行环境的资源配置要求,自动部署应用容器;这些过程便不需要手动去设置自我修复(自愈能力)
当容器失败时,会对容器进行重启;
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度;
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务(当一个节点里面所有的服务都启动后(包括服务和应用等启动后),其才对外提供服务)水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁;(高峰期的时候让其副本数量增加,低谷期的时候,让副本数量减少)服务发现(负载均衡)
用户不需使用额外的服务发现机制,就能够基于Kubernetes 自身能力实现服务发现和负载均衡
对外提供一个统一的入口,去完成节点的调度和负载均衡的功能滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
当检测没有问题才提供服务版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
回退到之前的版本密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景
集群架构组件组成
简单的架构图如下:
如果想要做一个k8s的集群,里面必须包含两部分
master:主控节点,主要做管理操作

node:工作节点,主要做具体的一些事情

在搭建一个k8s时,便需要去手动部署这些组件
master

里面包含三部分
- ApiServer
- controller-manager
- scheduler
- etcd
ApiServer
apiServer:
- 可以理解为
一个统一的入口,是一个协调者,通过它将请求分发到不同的组件去 - 提
供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制; - 其是
以restful的请求方式,提供的一些操作,最后将这些操作交给etcd进行存储
etcd 保存了整个集群的状态;
scheduler
进行节点调度,将一个应用在哪一个node节点上进行部署(选择node节点应用调度)
负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
controller-manager
进行集中的控制管理,处理集群中常规的后台任务,一个资源对应一个控制器
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
etcd
etcd 保存了整个集群的状态;
存储系统,用于报错集群中相关的一些数据
node

里面主要包含两部分
- kubelet
- kube-proxy
里面还有许多的docker , pod等
kubelet
负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
master派到node节点的代表,管理本机容器
kube-proxy
负责为 Service 提供 cluster 内部的服务发现和负载均衡
实现pod的网络代理,实现负载均衡等操作
k8s核心概念
通过service统一入口进行访问,过后由controller去创建pod进行部署
Pod
是k8s里面最小的单元
是一组容器的集合
一个pod里面的所有容器是共享网络的
其生命周期是短暂的,服务器重启/部署后,该pod就变化了
controller
使用controller去创建/部署pod
可以确保预期的pod副本数量(一般是内置的)
在k8s里面部署一个容器/应用,有两种部署情况
无状态应用部署
有两个节点,两个节点中都有多个容器和多个副本,一个节点挂掉了,该节点里面的内容可以直接拿到另一个节点里面去使用,便称为无状态(之前没有任何约定,拿过来便可以直接使用)有状态应用部署
需要有特定的条件才能使用
可以确保所有的node去运行同一个pod
支持一次性任务和定时任务
service
统一的入口
定义一组poid的访问规则