Kubernetes:8个字母省略,就是k8s
自动部署,自动扩展和管理容器化部署的应用程序的一个开源系统、
k8s是负责自动化运维管理多个容器化程序的集群,是一个功能强大的容器编排工具。
分布式和集群化的分布式进行容器管理。
1.15 1.18 1.20 1.28 现在普遍用的是1.20
k8s是Google的borg系统作原型,后期经由go语言编写的开源软件。
Docker微服务,可以满足微服务使用,那么为什么还要使用k8s呢。
k8s是基于开源的容器集群管理系统,在docker容器技术的基础之上。为容器化的应用提供部署。运行,资源调度。服务发现,动态伸缩等一系列完整的功能。
大规模容器管理:作用
6,存储编排:
1,可以自动化的吧容器部署在节点上。
2,可以通过命令行或者yml文件(自定义pod)实现指定节点部署
3,可以通过网络存储,NFS g fs
7,任务进行批次处理:
提供一次性的任务, 定时任务,满足需要批量处理和分析的场景。
所有对象资源的增,删,改。查和监听的操作都是kube-apiserver处理完成之后交给etcd来进行。
Api-server是k8s所有请求的入口服务,api-server接受k8s的所有请求(命令行和图像化界面)
然后根据用户的具体请求,通知对应的组件展示或者运行命令。
APIserver相当于整个集群的大脑。
2,kube-controller-manager:运行管理控制器。是k8s集群中处理常规任务的后台线程。是集群中所有资源对象的自动化控制中心。一个资源对应一个控制器,controller-manager负责管理这些控制器。
3.kube-scheduler:资源调度组件,根据调度算法为新创建的pod选择一个合适的node节点。 可以理解为k8s的所有node节点的调度器,部署和调度node
预先策略:人工定制,指定的node节点上部署
预先策略:限制条件。
根据调度算法选择一个合适的node,node的节点的资源情况,node的资源控制的情况等等, 选一个资源最富裕,负载最小的node来部署。
4,ETCD:k8s的存储服务,etcd分布式键值存储系统(key:value)k8s的关键配置和用户配 置, 先通过APIserver调用etcd当中的存储信息。然后在实施。(这个集群当中,能对etcd存储进行 读写权限的,只有API-server) 主节点上
Kubelet会定向时向API server汇报自己的node上的运行服务的状态,APl-server会把节点状态保存etcd存储当中。
接受来自master节点的调度命令。 如果发现自己的状态和master状态不一致,会调用docker的接口,同步数据。
对节点上容器的生命周期进行管理,保证节点上的镜像不会占满磁盘空间,退出的容器的资源,进行回收。
2.kube-porxy:
实现每个node节点上的pod网络代理。负责节点上的网络规划核四层负载工作。负责写入iptables(快淘汰)ipvs实现服务映射。
Pod不是容器
Kube-prxoxy:本身不直接给pod提供网络代理,proxy是service资源的载体。
Kube-porxy:实际上代理的是pod的集群网络(虚拟网络)
k8s的每个node节点上都有一个kube-proxy组件。
3,docker:容器引擎,运行容器。负责本机的容器创建和管理。
k8s要创建pod时,kube-sheduler调度到节点上(node节点)。节点上的kubelet只是docker启动特点的溶气。
Kubelet把容器的信息收集,发送给主节点。需要在主节点发布指令,节点上kubelet就会指示docker拉去镜像,启动或者停止容器。
4,pod运行在节点上的。是k8s当中创建或者部署的最小最简单的一个基本单位,一个pod代表集群上正在运行的一个进程。
同一个pod内的每个容器就是一颗豌豆。
Pod是由一个或者多个容器组成,pod中的容器共享网络,存储和计算资源,可以部署在不同的docker主机上。
一个pod里面可以运行多个容器或者具有关联的多个容器组成一个pod
Deployment:无状态应用部署,作用就是管理和控制pod,以及replicaset(运行几个 容器)管控他的运行状态。
Replicaset:保证pod的副本数量,受控于deploment。
在k8s中,部署服务,实际上就是pod,deployment部署的服务就是pod,rereplicaset的就是来定义pod的容器数量。可以保证pod的不可重复性。在当前命名空间不能重复。不同命名空间名称可以重复。
官方推荐使用deploment进行服务部署。
Daemonset:确保所有节点运行同一类的pod
Statefulset:有状态应用部署。
Job:可以在pod中设置一次性任务,运行完即退出。
Cronjob:一直在运行的周期性任务。
在k8s集群当中,创建一个pod之后,都会其中运行的容器分配一个集群内的IP地址。由于业务的变更,容器可能会发生变化,IP地址也会发生变化,service的作用就是提供整个pod对外统一的IP地址。
Service就是一个网管(路由器)通过访问service就可以访问pod内部的容器集群。
Service能实现负载均衡和代理-----kube-proxy-----来实现负载均衡
Service是k8s微服务的核心,屏蔽了服务的细节,统一的对外暴漏的端口,真正实现了“微服务”。
Service的流量调度:userspace(用户空间,废弃)iptablees(即将废弃),IPVS(目前1.20都用IPVS)
k8s的特色管理方式,分类管理资源对象。
Label标签可以用户自定义
Label选择器:等于 不等于 使用定义的标签名。
k8s集群对外暴漏提供访问的接口。属于应用层,七层代理,转发的是http请求 http/https service是四层转发,转发的是流量。
在k8s上可以通过namesapce来实现资源隔离,项目隔离。
通过namespace可以吧集群划分为多个资源不可共享的虚拟集群组。
不同命名空间里面的资源名称可以重复的。
首先认证主节点
k8s管理员访问集群的第一步 auth(权限验证,有权限才能访问),API-server 提供集群的统一访问接口(调用集群内部的各个服务,收集集成信息保存到
(kubelet)节点的监控器,管理node节点上的docker资源----> (kube-proxy)代理服务,负责代理pod节点的网络地址.
当客户端来访问节点: 客户端通过防护墙访问kube-proxy(kube-proxy对应pod的server)获取容器内部的资源
调度节点(kube-schudel)形成新的pod,会把pod指定安排到指定的容器上(创建pod的过程)