k8s 基本介绍

一、 什么是kubenetes?

 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

 

二、 kubernetes 特点

  1. 轻量级 消耗资源小
  2. 开源
  3. 弹性伸缩 (实际的需求来对资源进行增加和减少)
  4. 负载均衡: IPVS(张文松)

三、kubernetes 架构

 

 

 

四、 kubernetes 组件功能介绍

APISERVER:所有服务访问统一入口

master组件
1. api server 所有服务访问的统一入口
2. CrontrollerManager: 维持副本期望数目
3. Scheduler: 负责介绍任务,选择合适的节点进行分配任务
4. ETCD : 键值对数据库 存储K8S 集群所有重要信息

node 组件:
1. kubelet 直接跟容器引擎交互实现的生命周期管理
2. kube proxy 负责写入规则至IPTABLES 、IPVS实现服务映射访问的
其他插件:
1. CORE DNS: 可以为集群的svc常见一个域名IP的对应关系解析
2. DASHBOARD: 给K8S集群提供一个B/S 结构访问体系
3. INGRESS CONTROLLER: 官方只能实现四层代理, INGRESS可以实现七层代理
4. FEDERATION ION: 提供一个可以跨集群中心多K8S 同意管理功能。
5. PROMETHEUS(普罗米修斯): 提供K8S 集群的监控能力
6. ELK 提供K8S集群日志统一接入平台。

五、 pod

5.1 什么是pod?

一个Pod(就像一群鲸鱼,或者一个豌豆夹)相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。(通俗就是在一个pod下,实现多个容器相互隔离,多个容器共享pod下存储和网络通信)

5.2 ReplicationController 、ReplicaSet 、 Deployment

  5.2.1. ReplicationController 、ReplicaSet 、 Deployment 定义

  ReplicationController 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的 Pod 来替代;而如果异常多出来的容器也会自动回收。

  在新版本的 Kubernetes 中建议使用 ReplicaSet 来取代 ReplicationControlle

  ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且ReplicaSet 支持集合式的 selector

  Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 (declarative)  方法,用来替代以前的 ReplicationController 来方便的管理应用。

  5.2.2  Deployment 应用场景

  

    *  定义 Deployment 来创建 Pod 和 ReplicaSet
    *  滚动升级和回滚应用
    *  扩容和缩容
    *  暂停和继续 Deployment

5.3  StatefullSet  StatefulSet 是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets 是为无状态服务而设

  计),其应用场景包括:
      * 稳定的持久化存储,即 Pod 重新调度后还是能访问到相同的持久化数据,基于 PVC 来实现
      * 稳定的网络标志,即 Pod 重新调度后其 PodName 和 HostName 不变,基于 Headless Service
      (即没有 Cluster IP 的 Service )来实现
      * 有序部署,有序扩展,即 Pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进
      行(即从 0 到 N-1,在下一个 Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态),
      基于 init containers 来实现
     * 有序收缩,有序删除(即从 N-1 到 0)

5.4  DaemonSet

  DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们
  新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建
  的所有 Pod
  使用 DaemonSet 的一些典型用法:
    *   运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph。
    *   在每个 Node 上运行日志收集 daemon,例如fluentd、logstash。
    *   在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter

5.4 Cron Job 和Job

  Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
  Cron Job 管理基于时间的 Job,即:
    * 在给定时间点只运行一次
    * 周期性地在给定时间点运行

5.5  服务发现

 

 

 

六 、 网络通信模式

6.1  同一个 Pod 内的多个容器之间:lo

 

 

  同一个 Pod 内部通讯:同一个 Pod 共享同一个网络命名空间,共享同一个 Linux 协议栈
6.2  各 Pod 之间的通讯:Overlay Network(在同一台宿主机上)

 

 

   Pod1 与 Pod2 不在同一台主机,Pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完

  全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过
  这个关联让Pod可以互相访问
  Pod1 与 Pod2 在同一台机器,由 Docker0 网桥直接转发请求至 Pod2,不需要经过 Flannel


6.3   Pod 与 Service 之间的通讯:各节点的 Iptables 规则

    Pod 至 Service 的网络:目前基于性能考虑,全部为 iptables 维护和转发
    Pod 到外网:Pod 向外网发送请求,查找路由表, 转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执
    行Masquerade,把源 IP 更改为宿主网卡的 IP,然后向外网服务器发送请求

 

    

   

 

posted @ 2020-03-31 17:37  鱼丸粗面没鱼丸  阅读(436)  评论(0)    收藏  举报