Kubernetes(K8S学习第一天)

Kubernetes是什么?

Kubernetes是一个资源管理器。目前市面上出现的资源管理器有Apache MESOSdocker SWARMKubernetes

为什么需要Kubernetes?

  • 分布式容器化的大趋势。
  • Google 10年来的容器化经验基础
  • 基于Google Borg组件的基础 用Go(占用资源少)实现
    Kubernetes(K8S学习第一天)

为什么选择Kubernetes?

  • Apache MESOS :分布式基础资源管理框架(非docker)。最大应用厂商Twitter 2019-5 Tweiter宣布放弃Apache MESOS 开始使用Kubernetes
    延伸:Apache MESOS最新版中将支持Kubernetes管理
  • Docker Swarm :轻量(消耗内存不超过100M),可支撑多节点,功能少。虽说可用人工操作完成,但是操作过程复杂,容易出错。阿里云在 2019-7 不再支持Docker Swarm
  • Kubernetes :轻量,弹性伸缩,负载均衡(IPVS协议)

什么是Pod?

Pod :Kubernetes管理的最小单位。由多个Docker容器构成的子节点。
Pod有两种,自主式Pod(不是被控制器管理的Pod),控制器管理的Pod。
自主式Pod一旦死亡,无法还原。

Pod的控制器类型?

  • ReplicationController:确保容器应用副本数始终保持在用户定义副本数(建议用ReplicaSet代理)
  • ReplicaSet:在ReplicationController基础上支持集合式的selector
  • Deployment:不负责Pod创建,支持滚动更新。(PS:Deployment创建ReplicaSet,由ReplicaSet创建Pod。滚动更新:Deployment先创建一个新的ReplicaSet,每当新的ReplicaSet创建一个新的Pod,对应旧的ReplicaSet将删掉一个Pod,当旧的ReplicaSet删完所有的Pod,旧的ReplicaSet将会被停用。同时也可回滚,过程与滚动更新类似)

StatefulSet:解决有状态服务问题。
场景:

  • 稳定的持久化存储–>Pod重新调度后还是能访问到相同的持久化数据,基于PVC实现
  • 稳定网络标志–>即Pod重新调度后其PodName和HostName不变,基于Headless Service来实现
  • 有序部署,有序扩展–>在部署或者扩展的时候要根据定义的顺序依次进行(在下一个Pod运行时,之前的所有Pod必须是Running 和 Ready状态),基于init containers实现
  • 有序收缩,有序删减

HPA:Horizontal Pod Autoscaling Pod的平滑扩展 适用Deployment 和 ReplicaSet 。在V1版本中仅支持根据Pod的CPU利用率扩所容,在v1alpha版本中,支持根据内存和用户自定义的metric扩缩容。HPA监控RS的Pod的数量,当CPU空闲率大于一定数值则新建Pod,当Pod数量达到一定值或者CPU空闲率低于一定数值时停止创建,当CPU空闲率小于一定数值则会通知RS删除Pod,直到达到最小Pod数量或者CPU空闲率回到一定数值

DaemonSet:确保全部(或者一些)Node上运行一个Pod副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。
用法:

  • 运行集群存储Daemon,例如在每个Node上运行glusterd、ceph。
  • 在每个Node上运行日志手机deamon,例如fluented、logstash。
  • 在每个Node上运行监控Daemon,例如Prometheus Node Exporter

Job:负责批处理任务,即仅执行一次任务,它保证批处理任务的一个或多个Pod成功结束。(非成功结束的会进行重试,可设置重试次数)
Cron Job:管理基于时间的Job,即在给定时间只运行一次、在周期性地在给定时间点运行。
Service:通过筛选标签来管理Pod,同时Pod也可以与Service通信,从而间接实现了不同Pod之间的通信问题。同时,service也可暴露给外网(NodePort )。
Kubernetes(K8S学习第一天)