资源已上传B站
https://space.bilibili.com/700869881
一起学习
今日课程主题:
1、认识kubernetes (k8s) 在企业中应用场景? ----- 为什么要学习K8s??
2、云技术(云计算平台) --- 虚拟化及虚拟化基本概念及原理
3、云技术(云计算平台) --- 容器技术及容器技术基本概念及原理
4、云原生 --- 云计算、私有云、公有云、混合云
5、容器管理技术 --- 容器编排技术
6、容器编排技术 --- kubernetes 基本架构、组件及组件原理。
前提:基本认识: k8s 偏向运维技术 ,后端程序员为什么要学习k8s??
1、以前项目开发:开发,运维是密不可分 --- 上线 运维,开发密不可分
2、开发&运维 结合更紧密 --- DevOps --- 流水线生产方式
公司对程序员要求:
高级程序员(研发公司):
1、应用发布 (linux) --- CI/CD --- k8s
2、运维
3、线上故障排查能力
技术主管:
运维能力(熟练)
技术专家:
运维能力(精通)
未来展望:
1、所有的项目都是流水线生产方式 ---- 降本增效
2、所有的项目都是容器化方式进行部署 --- 迁移,充分利用服务器资源
3、k8s对项目开发架构有影响,是的对项目架构有新的一些思考--serverless
技术方向:容器编排技术非常火,成为当下项目开发流水线生产一个技术标准。(程序员必须了解,认识,精通)
普及程度:
1、一线城市很多公司都已经普及,构建了自己公司私有云环境。(阿里云,网易云...)
2、还有很多公司没有普及:k8s非常难,学习曲线非常陡峭..
===============================================课程内容========================================================
1、认识kubernetes (k8s) 在企业中应用场景? ----- 为什么要学习K8s??
- 创业型公司,中小型企业,使用k8s构建一套自动化运维平台(自动维护服务数量,保持服务永远和预期的数据保持一致性,让服务可以永远提供服务)
- 降本增效
- 私有云
- 公有云(阿里云、腾讯云、网易云...)
- 互联网企业,有很多服务器资源(物理机),为了充分利用服务器资源,使用k8s构建私有云环境,项目运行在云。
- 项目开发中,产品需求不停的迭代,更新(产品)--- 意味着项目不停的发布新的版本 --- k8s可以实现项目从
开发到生产无缝迁移。
以上3点: 可以大大为公司节省开发,上线整个成本,降本增效
2、云技术(云计算平台) --- 虚拟化及虚拟化基本概念及原理
- 什么是虚拟化技术???
- 虚拟化(英语:Virtualization)是一种资源管理技术,就是用来把物理资源(服务器,网络,硬件,CPU)
进行隔离(分离)的一种技术。打破了物理资源不可分割障碍。
- 虚拟化技术作用?
- 对高性能物理计算机的资源进行充分利用
- 对老旧硬件资源重组后再充分利用
- 虚拟化分类
- 全虚拟化架构 --- 在硬件上面-os,os内部可以安装多个操作系统,达到物理资源隔离
- OS层虚拟化架构 --- 在os系统内部,可以复制多个os系统,达到资源隔离目的
- 硬件层虚拟化 --- 直接在硬件上安装多个操作系统,达到物理资源隔离目的
注意:资源隔离实际上使用的调度程序,把这些资源调度分配给os,这个调度程序hypervisor
3、虚拟化技术---(云计算平台)
- 目前你认为有几种方式构建云计算平台???
- 物理机构建云计算机平台(机房建设,硬件选择,网络建设,环境维护...)
- 虚拟化技术构建云计算平台
- OpenStack:
- 开源管理项目 OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目.
- 美国国家航天局 & RackSpace 开发 ,开源
作用: 提供云平台的基础设施服务,让云平台管理,架构变得更简单。
- KVM(Kernel-based Virtual Machine)基于linux内核的虚拟机
- KVM 虚拟机技术,已经融入到linux内核。
- VMWare
- VMWare (Virtual Machine ware)是一个“虚拟PC”虚拟机管理管理软件
4、云技术(云计算平台) --- 容器技术及容器技术基本概念及原理
- 有了虚拟化技术,为什么还需要使用容器化技术构建云计算平台??
- KVM虚拟化在同等CPU,内存,IO,网络,运行相同服务,占用资源非常大。
- 容器化技术 就是非常轻量级资源隔离技术,容器化镜像小道几KB,达到几百M,隔离性没有虚拟机彻底
- 容器化技术发展
- 1979年的UNIX Chroot ,根据目录来进行隔离。
- FreeBSD Jails ,给目录分配一个网络地址,可以对目录进行隔离。
- Solaris Zone ,已经实现了隔离,每一个空间都有独立存储,网络,防火墙.
- LXC指代的是Linux Containers,通过Cgroups以及Linux Namespaces实现资源隔离。
- Docker利用LXC实现了一套容器化技术完整一套方案,容器化就是利用Cgroups以及Linux Namespaces实现资源隔离。
总结: 容器就是运行在操作系统中的一个进程,利用Cgroups+namepspace实现进程间隔离。
- docker原理
- docker底层利用 cgroup + nampspace 实现资源隔离
- docker创建procces容器进程,必须依赖磁盘镜像。(原始容器都是依赖centos镜像)
- OpenStack&KVM&docker
- openstack 主要用于云计算平台管理,同时提供一些基础设施一些管理服务。
- KVM 虚拟化技术 --- 可以利用虚拟化技术构建云计算平台
- docker 和 openstack 可以形成优势互补。
docker是一个非常轻量级的容器技术,使用容器技术构建云平台,充分利用服务资源,性能非常高
OpenStack可以管理基础设置服务。基础设施服务构建交给openstack
结语:
- 虚拟化技术 --- 资源隔离
- 容器化技术 --- 资源隔离
- openstack & docker & kvm
=====================================================kubernetes===================================================
1、云架构(云原生) ---- 软件开发思想
云原生:就是为了让应用程序(项目、mysql、es、mq...)运行在云上的解决方案,叫做云原生(云架构)
特点:
1) 容器化 : 应用程序运行在容器中
2)微服务 : 微小的服务,将单体架构根据业务进行拆分,服务进行链式调用模式--可持续交付,部署
3)可持续交付,部署: CI/CD
4) DevOps
2、云原生架构理念:
- iaas 【Infrastructure as a service 基础设施即服务】
# 用户:购买服务器,建设机房,DNS,交换机,路由,网络... (硬件环境)
# 云计算提供商:提供 网络、存储、dns、服务器..服务,用户只需要租用云主机即可,不需要关系硬件建设。
# 网络、存储、dns、服务器,操作系统 这样服务就叫做基础设施即服务。
思考: 用户购买一台iaas服务? 就相当于买了一台空的服务器。
- paas 【platform as a service】
# 在iaas基础上安装一些软件:基础服务软件---MYSQL,RocketMQ,ElasticSearch...作为基础服务
思考:用户购买这样的服务后,此时用户只需要关系项目业务代码开发,基础软件服务不需要自己安安装。
- caas 【container as a service】
# 容器就是一个服务。软件,服务都运行在容器中。
- saas 【software as a service】
# OA(多租户)
# 钉钉 (多租户)
# 财务 (多租户)
- faas 【function as a service】,baas 【backend as a service】
# 视频服务提供商(直播)---- 函数收费 (函数运行,收费)
# CDN服务商 (视频缓存服务)---- 函数收费
# 短信服务 --- 发一条短信
# 支付服务 --- 函数收费
- service mesh
# 客户端 --> proxy代理服务--> 服务(集群)
# 客户端+proxy(集成在一起:服务治理--降级,限流、监控..)--> 服务+proxy(集成在一起:服务治理--降级,限流、监控..)(集群)
注意:
# 一般企业直接使用 proxy代理模式就ok,至于服务治理:springcloud
# service mesh 不建议使用,落地非常困难,中小型企业玩不起,技术能力
- serverless
# server 服务器,less 无 ---> 无服务器
# 未来开发境界:程序员只需要关心代码业务开发即可,服务器环境不需要关心,所有的服务都上云。
# 未来:
公有云: 阿里云,腾讯云、网易云,百度云,滴滴云...
私有云: k8s 自己公司构建自己的私有云 ------ 很多公司在使用私有云
3、应用架构部署模式变迁
- 物理机
操作系统
- 虚拟机
OpenStack
- 云原生
kubernetes
思考:微服务架构,服务拆分成千上万个服务,就需要非常多的容器来进行部署,那么这些容器怎么管理?
怎么横向扩容?
服务宕机了,怎么恢复,你是如何知道的?
版本更新,上线,更新容器后,线上业务如何不受影响?
监控容器?
调度问题?
安全问题?
window系统:海量的文件,如何管理??
资源管理器(管理文件:调度)
4、容器编排(管理)技术
- 解决问题
怎么横向扩容?
服务宕机了,怎么恢复,你是如何知道的?
版本更新,上线,更新容器后,线上业务如何不受影响?
监控容器?
调度问题?
安全问题?
以上问题,容器编排技术来说,一个指令,一个按钮就可以搞定一切。
- docker-compose
非常轻量级容器编排技术,可以通过yaml文件方式,对容器进行批量管理,不能实现复杂容器编排
- rancher
可视化的容器管理工具,v2版本提供对k8s兼容。中小型使用,性能非常差,不能实现复杂的容器编排。
- swarm
docker公司自己研发的容器编排技术,docker也在使用kubernetes.
- mesos
apache软件基金会提供开源的容器编排技术。
- borg
google研发一套容器编排技术,这套技术没有对外公开,强大,稳定。
- kubernetes
google研发一套容器编排技术,使用go开发。性能非常强大、稳定、通过指令、yaml编程方式管理容器,非常灵活。
5、kubernetes -- k8s 基本认识
- borg 系统 (战略武器)
Borg. Google的Borg系统运行几十万个以上的任务,来自几千个不同的应用,跨多个集群,每个集群(cell)有上万个机器
十几年前,已经再大量使用。google秘密物理。
- kubernetes
k8s软件参考 borg系统架构,使用go语言开发的。
主要:编排容器---> 镜像
架构:
- master ,slave(node节点)
- master(scheduler,controllers,api server ,etcd)
- image
- dashboard ui
6、k8s 集群 -- 分布式架构(一个master-主节点,一群node节点-计算节点)
- master
- Api Server 网关 ,所有的请求指令都必须经过 ApiServer 转发
- scheduler 调度器,把请求指令(crud)调用到合适的node节点上。把调度请求发送给apiserver,apiserver将会把请求指令存储在etcd. node节点有kubelet监控etcd,监控到本node节点的指令,就会获取指令,在node节点执行。
- controllers 控制器(十几个控制器),每一个控制器对应相应的资源,控制器对这些资源进行管理(curd)
- etcd nosql,存储一些指令,用来做服务注册与发现
- node节点
- pod 是k8s最小的管理单位,pod内部有一个或者多个容器,pod是一个用来封装容器的容器。
一个node节点可以多个pod,理论上是无限制的,取决于硬件环境。
- docker 容器引擎(程序),k8s管理容器,容器由docker进行创建,k8s底层必须有docker引擎。
- kubelet 监听etcd,获取指令管理pod,kubelet是真正管理pod的组件。
- kube-proxy 代理服务,主要用来做负载均衡。设置iptables负载规则,更新service虚拟endpoints
- fluentd 日志收集组件
- dns 域名解析服务器
7、controllers ---- 控制器
- replication controller : 副本控制器,控制副本数量与预期设定的数量保持一致。
- Node Controller : 检查node节点监控状况;由k8s本身内部实现的。
- namespce controller : 创建pod,会把pod分配在不同命名空间下,定期清理无效的namespace
- service controller : 虚拟服务控制器,维护虚拟ip,提供负载均衡。
- endpoints controller : 提供了pod,service关联服务。
- service Account controller : 安全认证
- persistent volume controller : 持久化存储控制器-有状态服务部署,数据持久化存储 PVC
- daemon set controller : 让每一个服务器都具有一个相同的服务。
- deployment controller : 部署控制器,支持滚动更新,发版
- Job controller : 定时任务控制器
- pod autoscale controller : 自动更新控制器,cup利用率>=80% ,自动扩容。
8、scheduler 调度器
- podQueue (即将要创建的pod进行排队)
- nodeList (把存储pod的节点的集合)
- scheduler通过调度策略算法把pod 和 某一个node进行配对,存储在etcd,node节点kubelet监控到数据,把pod获取到在本地创建pod.
- 调度算法
- 预选调度
判断pod是否存在冲突
pod名称是否重复
- 最优节点
cpu利用率最小的节点
9、kubelet&kube-proxy
- kubelet 是 k8s 在node节点上的代理服务。pod的CRUD的是有node节点上kubelet来进行操作。kubelet实际上就相当于链式调用,上游服务是master(scheduler,apiserver),有node记得kubelet接受请求,执行具体操作。
- kube-proxy 反向代理,但是kube-proxy不执行具体的代理任务,设置iptables/ipvs路由规则,serviceVIP & iptables来实现的路由规则