我是靠谱客的博主 受伤溪流,最近开发中收集的这篇文章主要介绍k8s 组件 网络 创建Deployment 过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

组件 k8s 架构

k8s 是容器编排工具 管理容器集群 既然是管理 就有 管理节点 被管理节点

管理节点称为 master

被管理节点称为 nod 节点

master 组件有三个
API server
API server核心功能是对核心对象(例如:Pod,Service,RC)的增删改查操作,同时也是集群内组件之间数据交换的枢纽。

调度器 Scheduler
为新建立的pod选择节点,分配机器

控制器 controller
负责执行各种控制器,有副本,节点,资源,命名空间,服务等等

etcd数据库 	
	是分布式键值存储数据库。用于保存集群状态数据,比如Pod、Service,RC等对象信息,可以部署到master上,也可以独立部署,自己完无所谓,生产环境会剥离ETCD数据库  搭建etcd集群 供k8s 使用

nod节点

kubelet 
	负责管控容器,从API server接受pod的创建请求,启动和停止容器,监控pod运行状态,汇报给API server

Kubernetes Proxy
	负责为Pod创建代理服务,Proxy会从master端 API  Server获取Service的创建和修改,根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发

Docker Engine  

	Docker引擎,负责本机的容器创建和管理工作;  

kubectl 或者dashboard

准备yaml文件,kubectl 工具发送给API server
apiserver 将资源内容保存到etcd

etcd接受创建资源信息,发送创建事件 给APIserver

控制器 controllermanager 一直在监听Api server中的事件,此时APIserver收到的创建事件,根据资源类型,yaml文件里的kind 又发送给了控制器
控制器收到创建事件,调用de来保证要创建的副本数量,创建好之后通过APIserver 记录到etcd中 内容是 副本数 模版内容

etcd将创建好的pod信息通过事件发送给Apiserver
apiserver 去寻找调度器 Scheduler
Scheduler 接收到创建pod事件, 根据 调度算法和策略 绑定到集群中 某个Node 节点上,并将绑定信息写入 etcd 中
etcd 将更新成功的事件发送给 APIServer
apiserver根据nod节点编号去联系节点的kubelete
kubelete 收到 APiserver的请求,去etcd查找调度到本节点的 pod信息 ,然后装载镜像文件,并且启动容器,监控容器运行状态并汇报给Kubernetes API

service是什么?
Service是一组Pod的服务抽象,相当于一组Pod的LB,负责将请求分发给对应的Pod;Service会为这个LB提供一个IP,称为ClusterIP

K8s的网络中pod的通信:
1.pod内部容器的通信
每个容器都有一个pause容器,这个容器运行就会挂起,但是该容器的namespace还在,pod里的其他容器通过容器映射模式,启动并接入到pause容器的namespace,之后容器直接可以使用localhost访问其他容器

2。pod与pod的通信 有两个场景
两个pod在一个节点上
两个pod不在一个节点上

两个pod在一个节点上
同一节点的Pod,默认路由都是docker0的地址,由于它们关联在同一个docker0网桥上,地址网段相同,它们之间应当是能直接通信的。

两个不在同一节点上
通过CNI插件实现, flannel,calico

为什么?
想要 不同节点 pod与pod通信,有两个条件
1.k8s 集群 pod的ip分配不能冲突
2. 找到一种办法,将 POD 的 IP 和所在的 NDOE 节点 IP 关联起来, 通过这个关联让 POD 相互访问
网络插件的作用:

  1. 对K8S集群中所有节点上的pod做IP规划,防止IP冲突。因为Pod之间通过Pod IP通信。

  2. 规划并保存 Pod IP与node IP映射关系。因为说到底node之间是通过node IP通信。

  3. Pod与Service间的通信
    Pod IP <—> cluster IP
    Service是一组Pod的服务抽象,相当于一组Pod的LB,负责将请求分发给对应的Pod;Service会为这个LB提供一个IP,称为ClusterIP。

  4. service和外部通信
    、NodePort
    NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,发送到端口的流量都被转发到对应pod。nod+port > gluster IP+port > pod IP

    节点上面都有kube-proxy组件,这个组件从master apiserver获取信息,感知service创建和变化,然后做两个事:
    1.为每个service 在集群中 每个节点上面创建一个端口,端口上面的连接会代理到相应的pod
    2.集群中每个节点编写iptables转发规则,用于clusterip + port路由到上一步定义的随机端口上面,

最后

以上就是受伤溪流为你收集整理的k8s 组件 网络 创建Deployment 过程的全部内容,希望文章能够帮你解决k8s 组件 网络 创建Deployment 过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部