Kubernetes(k8s)简介
用于容器集群管理;功能包括:资源调度、容器发布、状态监控、弹性扩缩容、滚动更新、故障恢复、服务发现、负责均衡等
集群组件架构为主-从架构
Pod(容器组)
pod是Kubernetes的最基本概念,一个pod中可以放多个耦合度高的容器(或者说是紧密联系的容器),或者是一个容器(通常都是一个pod一个容器);
pod的IP为PodIP,两个Pod可以直接通过TCP/IP直接通信(Pod可能在不同主机)
Pod有两种类型
- 静态Pod:存放在Node的具体文件中。且只在此node上运行。
- 动态Pod:创建存放在etcd中,一旦Node宕机,可在其他Node上运行。
Pod的资源限制,可在yaml中定义。主要限制cpu和内存,单位分别为千分之一cpu和字节。有最低资源要求和上限,一旦资源使用超过上限pod将被kill并重启。
Label(标签)-实现多维度分组管理
- key=value键值对。
- 可以附加在各种资源对象上。如Node,Pod..
- 一个资源可以有多个标签,一个标签可以被多个资源使用
- 可以使用=,集合(in not in),AND的关系组合Label Selector来进行筛选
Replication Controller(复制控制)-期望场景
rc中包括
- 期望的pod副本数
- 用于筛选的Label Selector
- 当Pod的数量过少时,会自动按照Pod模板创建到预期的副本数,过多时会停掉一些pod.
- 可在运行时动态修改rc副本数量,实现pod的动态缩放。
kubectl scale RCNAME --replicas=NUMBER
- 删除Rc时不会删除所有的pod,可先设置数量为0在删除。
- 通过RC机制,每次升级应用的时候可以实现“滚动升级”,即假设此时有10个旧pod,每次停到一个旧的pod并创建一个新的pod,依次进行直到所有的pod都更新完成。
Deployment
类似于RC,他会创建一个ReplicaSet,并创建pod,可以知道当前部署pod的进度
Horizontal Pod Autoscaler(Pod横向自动扩容)-实现智能扩容缩容
两种方式
- CPUtilizationPercentage
- 应用程序自定义度量指标。
StatefulSet
StatefulSet下的pod按顺序生成,即前面的还没生成,后面也需要等待,并且name的命名为Statefulset的名字后面加上数字,如es-0,es-1,es-2.. ,而不是Rc或者Deploment的随机pod名.适用于有状态的pod的生成。可用于有状态的pod。
Service
对pod的进一步抽象,将Pod组合起来对外(内)提供某种服务。
根据type的设置又以下类型
- ClusterIP:虚拟IP地址,k8s集群内部的Pod可以访问,在Node上kube-proxy通过设置的Iptables规则进行转发
- NodePort: 使用宿主机端口,并使用Node的IP地址和端口进行访问。
- LoadBalancer:使用外接负载均衡器完成到服务的负载分发,需在字段spec.status.loadBalancer指定外部负责均衡器的ip地址,同时定义nodePort和clusterIP,用于公有云环境(?)