0
点赞
收藏
分享

微信扫一扫

开课吧百万架构师011期学习笔记

资源已上传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来实现的路由规则


举报

相关推荐

0 条评论