初识kubernetes
Kubernetes 简称 k8s. 是一个开源的 Linux 容器自动化运维平台,它消除了容器化应用程序在部署、 伸缩时涉及到的许多手动操作。换句话说,你可以将多台主机组合成集群来运行 Linux 容器,而 Kubernetes 可以帮助你简单高效地管理那些集群
master组件
• kube-apiserver
• etcd
• kube-scheduler
• kube-controller-manager
• etcd
• coredns
• dashboard
node组件
• kubelet
• kube-proxy
k8s物理架构图(四个API server,Controller,Scheduler,etcd)
Node的架构图(三个Kube-proxy,kuberlet,Docker)
k8s系统架构,逻辑架构,网络架构
kubenetes组件简介
master组件
• kube-apiserver
API服务器为K8s集群资源操作提供唯一入口,并提供认证、授权、访问控制、API 注册和发现机制。
Kubernetes API 服务器的主要实现是 kube-apiserver。 kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间进行流量平衡。
• etcd
etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库(例如 Pod 的数量、状态、命名空间等)、API 对象和服务发现细节。 在生产级k8s中etcd通常会以集群的方式存在,安全原因,它只能从 API 服务器访问。
• kube-scheduler
kube-scheduler 负责监视新创建、未指定运行Node的 Pods,决策出一个让pod运行的节点。
例如,如果应用程序需要 1GB 内存和 2 个 CPU 内核,那么该应用程序的 pod 将被安排在至少具有这些资源的节点上。每次需要调度 pod 时,调度程序都会运行。调度程序必须知道可用的总资源以及分配给每个节点上现有工作负载的资源。
调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
1.通过调度算法为带调度pod列表从可用node列表中选择一个最合适的node并将信息写入etcd中
2.node节点上通过kubelet调用apeserver监听到pod绑定信息,然后获取信息下载image并启动
• kube-controller-manager
k8s在后台运行许多不同的控制器进程,当服务配置发生更改时(例如,替换运行 pod 的镜像,或更改配置 yaml 文件中的参数),控制器会发现更改并开始朝着新的期望状态工作。
从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
控制器包括:
节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
• etcd
etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现,它通过Raft一致性算法处理日志复制以保证强一致性,我们可以理解它为一个高可用强一致性的服务发现存储仓库。
在kubernetes集群中,etcd主要用于配置共享和服务发现。
• coredns
CoreDNS是一个用Go语言编写的DNS服务器软件;
CoreDNS支持非常多的插件,灵活度很高,配置和使用也非常的简单;
最最重要的一点来了,它集成了k8s插件,可以作为k8s的服务发现机制;
• dashboard
dashboard是基于网页的kubernetes用户界面,可以使用dashboard获取运行再集群中的应用的概览信息,也可以创建或修改kubernetes资源。
node组件
• kubelet
一个在集群中每个node上运行的代理。 它保证容器都 运行在 Pod 中。kubelet 定期接收新的或修改过的 pod 规范 PodSpecs(主要通过 kube-apiserver)并确保 pod 及容器健康并以所需状态运行。该组件还向 kube-apiserver 报告运行它的主机的健康状况。
kubelet 不会管理不是由 Kubernetes 创建的容器。
• kube-proxy
kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。用于处理单个主机子网划分并向外部世界公开服务。它跨集群中的各种隔离网络将请求转发到正确的 pod/容器。
kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。