kubernetes基本概念

Kubernetes基础

一.Kubernetes基本概念

1.裸容器的问题

宿主机宕机容器无法自动恢复
程序级健康检查依旧不到位
程序的扩容部署回滚和更新依旧不够灵活
端口问题并未得到解决

2.容器编排应特点

轻松管理成千上万的业务容器
全自动容灾机制
全自动扩容、回滚
原生支持服务发现和负载均衡
更加灵活方便地健康检查
一时间想不起来的优点

3.Kubernetes概念

Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。
Kubernetes也叫k8s:它提供了资源调度、扩容缩容、服务发现、储存编排、自动部署和回滚,并且天生高可用、负载均衡、故障自动恢复等功能“生态系统”,目前已成为云原生领域的标准。

4.架构

etcd最好用独立的磁盘和SSD,最好部署3个,奇数台。
master主节点高可用最好用3台,奇数台,预防脑裂。
工作node节点可以弹性扩容
kubectl:通过一个config文件验证,是个控制管理工具,可以控制k8s集群,一般装在其中一台主节点上或者装在另外一台机器上(生产环境)。

二.master主节点

整个集群的控制中枢

Kube-APIServer

简介:kube-apiserver: 核心组件,每个模块都要经过,集群安全机制的入口。
是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群状态和信息存储到分布式键值储存系统Etcd集群中。同时它也是集群管理、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查以及watch的REST API接口。
kube-apiserver是无状态的节点。

Controller-Manager

简介:状态管理器,控制pod数量、状态。
保证pod或者其它资源打到期望值,当集群中某个pod的副本数或者其它资源因为故障和错误导致无法正常运行,没有达到设定的值时,Controller manager会尝试自动修复并使其达到期望状态。
scheduler是有状态的组件,同时工作的只有一个。(1.20版本以下查询:kubectl get leases -n kube-system)

Scheduler

简介:集群的调度中心,创建pod的任务,控制pod部署在最佳的节点上。
主要是通过调度算法将POS分配到最佳的Node节点,它通关APIServer监听所有POD状态,一旦发现新的未被调度到任何Node节点的Pod(podspec.nodeName为空),将会根据一系列策略选择最佳节点进行调度。
scheduler是有状态的组件,同时工作的只有一个。

Etcd

键值数据库,节点间的服务发现和配置共享,用来保存集群的信息。
用于可靠地存储集群的配置数据,是一种持久性、轻量型、分布式的键值数据储存,作为kubernetes集群的持久化储存系统。
,一般生产环境中建议部署三个以上节点(奇数个)。

三.Node工作节点

Worker、node节点、minion节点

Kubelet

负责监听、管理Pod状态,与master通信
负责和Master通信协作,管理该节点上的Pod,对容器进行健康检查及监控,同时负责上报节点和节点上面Pod的状态。

Kube-proxy

负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。
查看Kube-proxy工作模式:curl 127.0.0.1:10249/proxyMode

Ipvs

监听Master节点增加和删除service以及endpoint的消息,调用Netlink接口创建相应的IPVS规则。通过IPVS规则,将流量转发至相应的Pod上。
Iptables
监听Master节点增加和删除service以及endpoint的消息,对于每一个Service,他都会场景一个iptables规则,将service的clusterIP代理到后端对应的Pod。
Calico
符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。

CoreDNS

用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。

Docker

容器引擎,负责对容器的管理。

四.pod的通信

1.同一个 Pod 中 容器通信:
容器中 pod 共享同一个 IP 地址。故同一个 Pod 中 Container 可以做到直接通过 localhost 直接通信。
2.同一个节点多个 Pod 之间通信
pause 容器启动之前,会为容器创建虚拟一对 ethernet 接口,一个保留在宿主机 vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,另一端出来。任何 Pod 连接到该网桥的 Pod 都可以收发数据。


3.跨节点的pod通信
节点 Pod 通信,相当于创建一个整个集群公用的【 网桥 】然后把集群中所有的 Pod 连接起来,就可以通信了。
其中跨整个集群的 Pod ip 是唯一的,当报文从一个节点转发到另外一个节点时,报文首先通过 veth,然后通过网桥,转发到物理适配器网卡,最后转发到其它节点的虚拟网桥,进而到达 veth 目标容器。其实现方式有 Flannel、calico、weave 等。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇