k8s

k8s核心概念

k8s学习记录

Posted by CHuiL on June 21, 2019

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(标签)-实现多维度分组管理

  1. key=value键值对。
  2. 可以附加在各种资源对象上。如Node,Pod..
  3. 一个资源可以有多个标签,一个标签可以被多个资源使用
  4. 可以使用=,集合(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,用于公有云环境(?)