k8s
2020-06-22 11:41:27 6 举报
AI智能生成
k8s
作者其他创作
大纲/内容
k8s
自动化运维平台
充分利用服务器资源
服务无缝迁移
云架构
云
就是使用容器构建的一套服务集群网络,云由大量的容器构成,k8s就是用来管理云中的容器
云架构
iaas 基础设施服务
用户
租用(购买)云主机
用户不需要考虑网络,DNS 存储,硬件环境方面的问题
运营商
提供网络,存储,DNS,这样服务就叫做基础设施服务
paas 平台即服务
mylsq \ES\MQ
saas 软件即服务
钉钉
财务管理软件
serverless
站在用户的角度考虑问题,用户只需要使用云服务器即可
云原生
让应用程序都运行在云上的解决方案
容器化
微服务
devops
开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队
持续交互
持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。我们现在两周一个版本,每次上线之后都会给不同的用户造成不同程度的影响
k8s架构原理
k8s架构
master节点
api server
是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。
scheduler
负责对集群内部的资源进行调度,相当于“调度室”
controller
k8s通常不会直接创建pod,而是通过controller来管理pod的
etcd
用于存储所有资源对象的数据。
docker
pod
Pod是Kubernetes最基本的操作单元,包含一个或多个紧密相关的容器
同一个Pod里的容器之间仅需通过localhost就能互相通信。
一个Pod中的应用容器共享同一组资源
为每个Pod分配一个IP地址,使用Pod名作为容器间通信的主机名等
kubelet
在每个node节点都存在一份,在node节点上的资源操作指令由kubelet来执行
有一个物理网卡的ip地址
负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时“上报”本Node的状态信息到API Server里。
kube-proxy
代理服务,负载均衡
fluentd
日志收集服务
关系:ubernetes将集群中的机器划分为一个Master节点和一群工作节点(Node)
PA(Horizontal Pod Autoscaler)是kubernetes(以下简称k8s)的一种资源对象,能够根据某些指标对在statefulSet、replicaController、replicaSet等集合中的pod数量进行动态伸缩,使运行在上面的服务对指标的变化有一定的自适应能力。
流程
子主题
子主题
子主题
子主题
子主题
子主题
子主题
子主题
子主题
https://www.cnblogs.com/menkeyi/p/7134460.html
k8s核心组件原理
pod核心原理
pod的基本概念
Pod 是 kubernetes 集群中最小的部署和管理的 基本单元
pod的作用
通常情况下,在服务部署的时候,用pod来管理一组相关的服务,一个pod中要么部署一个服务,要么部署一组有关系的服务
子主题
ReplicaSet副本控制器
ReplicationController副本控制器
单选
说到ReplicaSet对象,得先说说ReplicationController(简称为RC)。在旧版本的Kubernetes中,只有ReplicationController对象
ReplicaSet副本控制器
可以单选,复合选择
什么是副本控制器
控制pod副本的数量
replica=3 表示创建3个副本,副本控制器将永远保证副本数量为3,当有pod服务宕机的时候,副本控制器将立马重新创建一个新的pod,永远保证副本数量为3
虽然ReplicaSet可以独立使用,但一般还是建议使用Deploymennt来自动管理ReplicaSet
Deployment 部署对象
Replicaset副本控制器控制pod副本的数量,项目版本的变化,如何做到服务更新,Replicaset对象不支持滚动更新,deployment对象支持滚动更新
滚动更新
通过deployment新建新的ReplicaSet来实现
服务部署结构模型
StatefulSet 部署有状态服务
为了解决有状态服务使用容器化部署的一个问题
容器是有生命周期的,一旦宕机,数据丢失,
pod部署,pod有生命周期,数据丢失
StablefulSet保证pod重新建立后,hostname不会发生变化,pod就可以通过hostname来关联数据
服务发现
pod在生产环境中的访问流程?
pod有独立的ip地址,也有自己的hostname,利用namespace进行资源隔离,独立沙箱环境
pod内部封装的是容器,可以一个,或者多个容器
pod网络,pod有自己独立的ip地址,pod内部容器之间访问采用localhost访问
pod如何对外提供服务?
pod是虚拟的资源对象(进程),没有对应实体 物理机,物理网卡,与之对应,无法直接对外提供服务访问
在物理机上开启端口,让这个端口和pod的端口进行映射,这样可以通过物理机进行数据包的转发
内部是如何访问pod?
访问pod是如何实现负载均衡?
pod是一个进程,是有生命周期的,宕机,老版本更新,都会创建pod,ip地址发生变化,hostname发生变化,nginx做负载均衡不太合适
Service
什么是 service 资源对象?
pod ip pod的ip地址
node ip 物理机的ip地址
cluster ip 虚拟ip,是由k8s抽象出来的service对象,这个service对象就是一个VIP的资源对象
如何负载均衡
service 和pod都是一个进程,service也不能对外提供服务
访问物理机,然后把请求交给service
service和一组pod副本是通过标签选择器进行关联的
pod宕机,service如何发现
通过kube-proxy
监听所有的pod,更新映射关系,etcd
子主题
serviice和pod之间可以进行通信,他们的通信属于局域网通信
把请求交给service后,service使用 iptables,ipvs做数据包的分发
网络
同一个pod内部的多个容器之间
localhost
各pod之间的通讯
pod1与pod2不在同一台主机
pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的ip网段,并且不同的node之间的通信只能通过宿主机的物理网卡进行。 将pod的ip和所在node的ip关联起来,通过这个关联让pod可以互相访问
子主题
pod1和pod2在同一台机器
由docker0网桥直接转发请求至pod2,不需要经过flannel
pod与service之间的通讯
目前基于性能考虑,全部为iptables维护和转发
flannel
让集群中不通节点主机创建的docker容器都具有全局唯一的虚拟ip地址
ectd和flannel的交互
存储管理flannel可分配的ip地址段资源
监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表
资源清单
k8s中的资源,k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象
名称空间级别
工作负载型资源 workload
pod
replicaSet
deployment
statefulset
DaemonSet
job
service
ingress
volume
csi 容器存储接口
configMap
secret
downwardApi 把外部环境中的信息输出给容器
集群级别
namespace
role
元数据型
HPA
LimitRange
yaml
必须存在的属性
apiVersion
这里指的是k8s api的版本,目前基本上是v1
kind
这里指的是yaml文件定义的资源类型和橘色如 pod
metadata
metadata.name
元数据对象的名字
metadata.namespace
元数据对象的命名空间
spec
spec.containers[].name
定义容器的名字
列子
子主题
子主题
子主题
子主题
子主题
子主题
https://www.cnblogs.com/IT-Evan/p/CloudNative.html
0 条评论
下一页