特点:
高可用:意味着没有停机时间
可扩展性:意味着应用程序具有高性能
容灾:可以恢复到之前的样子
功能:
自我修复: 一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器;
弹性伸缩: 可以根据需要,自动对集群中正在运行的容器数量进行调整;
服务发现: 服务可以通过自动发现的形式找到它所依赖的服务;
负载均衡: 如果一个服务起动了多个容器,能够自动实现请求的负载均衡;
版本回退: 如果发现新发布的程序版本有问题,可以立即回退到原来的版本;
存储编排: 可以根据容器自身的需求自动创建存储卷。
概念:
Master: 集群控制节点,每个集群需要至少一个master节点负责集群的管控;
Node: 工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行;
Pod: kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
Controller: 控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
Service: pod对外服务的统一入口,下面可以维护者同一类的多个pod
Label: 标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace: 命名空间,用来隔离pod的运行环境
k8s组件
内部:
1.pod:
k8s最小单位,
对容器的抽象,
一个pod中可以运行多个容器 。通常一个应用一个pod,
每一个pod有自己的IP地址,当容器崩溃的时候,IP地址也不存在,这样再起的容器会因为IP不同而引起麻烦。
2.service
服务发现
永久的IP地址
pod的生命周期和service不连接。pod终止服务,IP地址将保留,所以不再更改ip地址。
3.ingress
当一个请求发来的时候,首先进入的是ingress,而不是service。
外部:
4.ConfigMap
5.secret
6.volumes 卷
将硬盘驱动器上的物理存储连接到pod和该存储设备。可以是本地的存储,也可以是云存储,集群。
7.Deployment 部署
为pod创建蓝图(blueprint)
创建一个部署,
pod的抽象
(当一个节点挂掉之后,通过部署的方式运行的k8s,可以复制一个pod。因此一个pod挂掉之后,另外一个pod依然可以运行,用户也可以访问。)
注意:部署不能复制数据库,因为数据库有一个状态
8.StatefulSet 状态集
为了解决数据库不能复制的问题,产生了状态集StatefulSet。
专门为有状态的应用程序提供:如数据库。
有状态的集合不能用部署来创建
K8S中的工作机器
每个节点有许多pod在上面
每个节点必须安装三个进程用于安排和管理
节点是实际执行的集群服务器,被称为 “工作节点”
三个节点进程:
1、kubelet
2、cube Proxy
3、Container runtime
kubelet
kubelet把容器和node都结合起来
kubelet在容器内部开启pod
多节点必须具有container runtime 和kubelet服务安装。
集群之间的交互
master processes 主节点
是一个调度进程内部有四个进程运行控制集群状态和主节点。
客户的请求第一个到达:
1、api server
是负载均衡的
**
就像一个cluster gateway集群网关,它会获取任何初始的请求,更新到集群甚至查询。
就像一个看门人做身份验证和授权。
2、Scheduler
查看服务状态是否健康。
将启动pod的请求按照节点的资源(cpu ram)占用程度分配给不忙的节点。Controller
3、Controller Manager
(控制器管理器)
检测节点是否挂掉了。然后重新安排。检测节点状态变化。
如:当pods挂掉后,controller manager检测到并尝试恢复。此时controller manager去请求scheduler再次分配资源给新的pods。
4、etcd
是分布式的
键值存储。
存储内容:每一次pod的生成或者死亡都会更新在etcd中。
minikube
开源工具,用于本地测试。在虚拟机中。
一个节点集群。主节点和工作节点都在一个节点上运行。
用于本地环境测试
kubectl
命令:
kubectl get nodes:k8s的运行状态
minikube status:minikube状态
kubectl version:客户端版本,服务端版本
kubectl get nodes:显示节点信息
kubectl get services:显示服务。
kubectl create deployment nginx-depl —image=nginx:创建一个名字为nginx-depl的容器,下载nginx镜像。
