每天打卡5分钟,学会k8s 第四章集群架构

LogicEchoMaster
• 阅读 919

今天讲的是kubernetes的架构简讲吧,kuberbetes cluster有Master和Node【slave】组成,节点上运行多个kubernetes服务。

Master 节点

Master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver、kube-scheduler、kube-controller-manager、etcd和pod网络(例如flannel)。

每天打卡5分钟,学会k8s 第四章集群架构

  1. API Server(kube-apiserver)

这个提供了Rest API,也就是我们应用层所说的前端接口,各种客户端工具CLI/UI管理的资源的东西,如果你 需要进行二次开发的话,这个服务需要掌握。

  1. scheduler(kube-scheduler)

负责讲Pod放在那个Node上运行,也就是调度时会充分考虑cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、数据亲和性的需求

  1. Controller Manager

负责Cluster各种资源,保护资源处于预期的状态,也就是运行的服务器资源,控制在一个合适的地方,不会像老AMD CPU那种情况。一方有难,八方围观。在Controller有可以分了好几种Controller,replication、endpoints、namescpace、serviceaccounts等

不同的controller管理的不同的资源,例如 replication 管理的是deployment、statefulset、daemonset的生命周期,namespace管理的是Namespace资源

4.etcd

etcd是一个key/value分布式数据库,由于他是go写的。所以这东西也就成为了k8s用来保存资状态信息和配置信息使用,自带的负载均衡里的服务发现也用到它。

  1. pod网络

这个比较重要了,因为docker是不能跨主机通信的。如果要跨主机通信,就必须自己手动开启port映射,如果你的容器过多,那你操作就很麻烦。flannel刚好就帮你解决了这个问题,当然还有其他的网络方案,这是flannel用的人多,资料多一点。

Node节点

所有的node是pod打工的地方,kubernetes支持docker、rkt等容器Runtime。Node上运行的组件有Kubelet、kube-proxy和Pod网络。

每天打卡5分钟,学会k8s 第四章集群架构

Kubelet

kubelet是node的agent。当scheduler确定在某个node上运行pod后,会将pod的具体配置image、volume等信息发送该街道到kubelet然后根据这些信息创建和运行容器,并向master报告状态。

kube-proxy

service在逻辑上代表了后端的多个pod,外界是通过service访问pod。service接收到request需要通过proxy进行代理pod进行容器交换,如果你的pod是多个副本的话,这里也会帮你自动进行负载均衡。也就是说如果你使用了k8s无效在使用nginx进行手动负载均衡这些愚蠢的操作。我看到很多php的教程是这么搞docker。

下面我们就看看完整的结构图

每天打卡5分钟,学会k8s 第四章集群架构

从图中你会发现master也存在kubelet和kube-proxy,那是因为master也可以运行应用,如果你好奇的话可以去试试使用rancher,就算是单节点它也可以创建pod容器的。

我们要查看k8s上已经运行的pod可以用下面的命令,和你用docker ps一样频繁

kubectl get pod --all-namespaces -o wide

每天打卡5分钟,学会k8s 第四章集群架构

k8s的系统组件被放到了kube-system namespace中。这里有一个kube组件,它为cluster提供了dns服务。这个服务在k8s初始化的时候作为附加服务安装

kubelet是唯一没有以容器形式运行的k8s组件,它在ubuntu中通过systemd服务中。你可以使用进行查看服务信息

systemctl status kubelet

用例子把他们串起来

以下所有的命令都是第一章有说到

kubectl run httpd-app --image=httpd --replicas=2

每天打卡5分钟,学会k8s 第四章集群架构

k8s部署了deployment httpd-app,有两个副本pod,分别运行在k8s-node1和k8s-node2

每天打卡5分钟,学会k8s 第四章集群架构

他们运作的步骤是这样的

  1. kubectl发送部署请求到API Server
  2. API Server通知Controller Mananger创建一个deployment pod
  3. Scheduler执行调度任务、将两个pod分别分发到两个集群节点上
  4. 收到信息的节点,会自己创建并运行pod,应用的配置和当前运行状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些数据,flannel会为每个pod进行分配ip。
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
4年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
4年前
K8S基础概念
一、核心概念1、NodeNode作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kubeproxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。Node包含
Stella981 Stella981
4年前
RabbitMQ镜像队列
本节主要讲述镜像队列。镜像队列的主要作用是用来解决队列的单点故障。镜像队列主要有两种类型:master和slave。master和slave节点位于同一个集群中。master只要一个节点,slave可以有多个节点。生产者发送到主节点消息会同时被发往各个slave节点,除了发送消息,其他动作只会发给master,然后通过master广播给其他slave
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
4年前
Kubernetes集群部署之五node节点部署
Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet:负责pod对应的容器的创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能.Kubeproxy:实现kubernetesservice的通信与负载均衡机制的重要
Stella981 Stella981
4年前
Centos7.6部署redis6.0.8集群(redis cluster模式)
集群规划:三台服务器各部署一个主节点、一个从节点,同一台服务器上不是直接主从关系。服务器角色ip:端口node1master1/slave2192.168.146.199:6379/192.168.146.199:6380node2master2/slave3192.168.146.200:6379/192.168.1
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
4年前
Kubernetes 调度器实现初探
Kubernetes调度器Kubernetes是一个基于容器的分布式调度器,实现了自己的调度模块。在Kubernetes集群中,调度器作为一个独立模块通过pod运行。从几个方面介绍Kubernetes调度器。调度器工作方式Kubernetes中的调度器,是作为单独组件运行,一般运行在Master中,和Master数量保持
Stella981 Stella981
4年前
CenotOS7.3上安装Kubernates1.11容器(一主多从)
1.服务器规划 部署节点etcd节点master节点node节点192.168.0.101是是是 192.168.0.102   是192.168.0.103   是192.168.0.104