一、知识图谱
二、k8s集群
Kubernetes(k8s)是Google使用Go语言编写的一个自动化ring器操作开源平台,包括部署,调度和节点集群间的扩展。高可用的集群副本数据最好是大于等于3个(奇数个,主要是原因使用了多节点选举模式)。下面k8s架构图只是强调核心概念有所简化。
1.特点
轻量级:消耗资源小
开源
弹性伸缩
负载均衡:IPVS
适合无状态服务(是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的,如Apache,Nginx Lvs等),不太适合有状态服务(需要数据存储功能的服务、或者指多线程类型的服务,队列等,如MySql,Kafka等,但可以使用Statefulset)
二、k8s组件
1.Master组件
Master 组件对集群进行全局决策(例如,调度),并检测和响应集群事件(例如,当不满足部署的 replicas 字段时,启动新的 pod)
① kube-apiserver:所有服务访问统一入口
② etcd:键值对数据库 储存K8S集群所有重要信息(持久化)
③ scheduler:负责介绍任务,选择合适的节点进行分配任务
④ CrontrollerManager:维持副本期望数目
2.Node组件
① Kubelet:直接跟容器引擎交互实现容器的生命周期管理
② Kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的
③ Container Runtime:容器运行环境是负责在节点上运行容器的软件
3.其他组件
① COREDNS:可以为集群中的SVC创建一个域名IP的对应关系解析
② DASHBOARD:给 K8S 集群提供一个 B/S 结构访问体系
③ INGRESS CONTROLLER:官方只能实现四层代理,INGRESS 可以实现七层代理
④ FEDERATION:提供一个可以跨集群中心多K8S统一管理功能
⑤ PROMETHEUS:提供K8S集群的监控能力
⑥ ELK:提供 K8S 集群日志统一分析介入平台
三、k8s流程(个人理解)
1.Kubelet将yaml文件发送到apiserver
2.apiserver将客户端请求内容保存ectd中
3.由于scheduler会监测ectd,发现没有分配节点的pod对象后,会通过过滤和打分筛选出合适的节点运行pod
4.节点会通过container runtime运行对用的pod容器以及创建对应的副本数
5.节点上的Kubelet会对自己节点上的容器进行管理
6.CrontrollerManager会监测集群中的每个节点,发现期望状态和实际不符合的话,就会通知对应的节点
7.节点收到通知,会通过container runtime来对pod内的容器进行收缩或者扩张