目录
1.k8s可以做到
1.服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址来曝露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
2.存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
3.自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
4.自动完成装箱计算
基于容器对应用运行环境的资源配置要求自动部署应用容器
5.自修复
当容器失败时,会对容器进行重启
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
6.密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
7.水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大
或规模剪裁
2.k8s的组件有哪些
master主控节点,worker工作节点,master里面有API server,controller-manager,scheduler;然后worker工作节点里面有kubelet和kube-proxy
一,控制平面组件
实现k8s控制功能的软件,控制平面组件有很多个软件,控制组件相当于管理层,会为集群做出全局决策,比如资源调度,管理,控制...
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。
(1)master组件
apiserver
所有服务访问统一入口, 该组件负责公开了 Kubernetes API
scheduler
做节点调度,负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。
controller-manager
维护副本期望数
核心控制组件,是控制平面的组件, 负责运行控制器进程。去处理集群中常规的统一控制器
etcd
兼顾一致性与高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
cloud-controller-manager
允许你将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。
(2)worker Node 组件
kubelet
master派到worker里面收集数据的
会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。确保容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
kube-proxy
是集群中每个节点(node)所上运行的网络代理,写入规则至IPTABLES .IPVS实现服务映射访问
docker或者其他容器应用
COREDNS:为集群中的svc创建一个域名和ip的对应关系
INGRESS CONTROLLR : 官方只能实现四层代理,ingress可以实现七层代理
PROMITHEUS:监控
ELK:集群日志统一分析
二.控制器:
replicationController(rc):来确保副本数始终保持在用户定义的副本数
replicaset(rs):有rc的全部功能,并且支持集合式selector,现都支持rs
deployments:不负责pod创建,由于rc不支持滚动更新,但deployments支持,所以建议使用deployment来自动管理rs,这样就不用担心跟其他机制不兼容的问题
HPA 根据内存和用户自定义的metric扩缩容
stategulsets :解决有状态服务的问题,稳定的持久化存储,翁丁网络标志,有序
deamonset : 确保node运行一个pod
jods: 负责只执行依次的命令
3.k8s网络方式
j假定所有的pod都在一个可以直接联通的扁平的网络空间中,k8s假定这个网络已经存在,但是如果我们要自己动手搭建一个私有云里面的k8s集群,那么里面的网络走向需要我们自己去布置实现
同一个pod里面的容器之间:通过io端口
pod之间进行通讯:overlay network
Podl 与 Pod2不在同一台主机,Pod的地址是与docker0在同一个网段的,但dockerO网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问
学习过计算机网络,可能会问,那里面的路由表在哪里?这要提到etcd。etcd存储管理flannel可分配的ip地址段资源,监控etcd中每个实际的地址,并在内存中建立维护pod节点路由表
od 与service 之间:各节点的iptables规则
Pod 至 Service 的网络:目前基于性能考虑,全部为iptables 维护和转发 Pod到外网: Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行Masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求
k8s的核心概念
pod 最小部署单元,一组容器的集合,共享网络,生命周期短暂
启动pod就会起启动pause容器,容器们会共用pause的网络栈,所以里面容器不能使用同一个端口号
同一个pod共享一个网络栈,相当于本地网络,两个容器之间可以通过localhost访问
存储卷也是一样