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,然后向外网服务器发送请求
本文来自博客园,作者:鱼丸粗面没鱼丸,转载请注明原文链接:https://www.cnblogs.com/Robi-9662/p/12606763.html

浙公网安备 33010602011771号