k8s2

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来实现的路由规则

 

posted @ 2022-07-29 11:47  又回到了起点  阅读(146)  评论(0编辑  收藏  举报