一、整体架构

kubernetes分为 master节点和工作节点,前者是管理节点,后者是容器运行的节点。其中master节点主要有3个重要组件,分别是APIServer,sheduler和controller manager。

工作节点 有两个组件 kubelet 和 kubelet (有时候master节点也可以既是管理节点也是工作节点)

APIServer

APIServer组件负责响应用户的管理请求、进行指挥协调工作

scheduler

scheduler组件是将待调度的pod按照一定的调度算法绑定到合适的工作节点上

controller manager

是一组控制器的合集,负责控制控制管理对应的资源,如副本(replication)和工作节点(node)等。

etcd

etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。

 kubelet

管理维护pod运行的agent

kube-proxy

将service的流量转发到对应endpoint

flannel网络

维持各个节点上pod之间的通信。

kuernetes架构可以用下图来简单描述,mster节点上的APIServer将负责与master节点、工作节点上的各个组件之间交互,以及集群外用户(如kubectl命令)

与集群的交互、在集群中处于消息收发的中心地位。其他各个组件各司其职,共同完成应用的分发,部署与运行的工作。

二、通过示例来理解

[root@k8s-master k8s]# kubectl run httpd-pod --image=httpd --replicas=
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/httpd-pod created
[root@k8s-master k8s]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
httpd-pod 22s
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
httpd-pod-7cdfc75664-4trb9 / Running 32s 10.244.2.4 k8s-node1 <none>
httpd-pod-7cdfc75664-mjm7f / Running 32s 10.244.1.4 k8s-node2 <none>

上面使用run命令在命令行创建pod的方式已经不被推荐使用

官方推荐使用如下的方式,其中第三种方式已经成为一种广泛流传的方式。

Examples:
# Create a pod using the data in pod.json.
kubectl create -f ./pod.json # Create a pod based on the JSON passed into stdin.
cat pod.json | kubectl create -f - # Edit the data in docker-registry.yaml in JSON then create the resource using the edited data.
kubectl create -f docker-registry.yaml --edit -o json

上面的命令 httpd-pod 是所要deployment的名称

--image  是指定使用镜像   --replicas 指定副本的数量

通过查看pod,发现pod分别被调度到 k8s-node1和k8s-node2节点上运行。

详细过程:

1.kubectl发送部署的请求到API Server

2.API Server通知Controller Manager创建一个 deployment 资源

3.Scheduler执行调度任务,将两个副本Pod分发到k8s-node和k8s-node2上。

4.k8s-node1和k8s-node2上的kubelet在各自的节点上创建并运行pod。

tips:

1.应用的配置和当前的状态信息保存在etcd中,当执行kubectl get pod 等查询操作时 API Server会从中读取数据

2.flannel 会为每个Pod分配IP。因为没有创建service,目前kube-proxy还没有参与进来

为了下面的学习,需要删除节点上的pod。删除这个deployment时,pod的状态会从running变为Terminating 直至清除。

root@k8s-master k8s]# kubectl delete deployment httpd-pod
deployment.extensions "httpd-pod" deleted
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
httpd-pod-7cdfc75664-4trb9 / Terminating 12m 10.244.2.4 k8s-node1 <none>
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
httpd-pod-7cdfc75664-4trb9 / Terminating 12m 10.244.2.4 k8s-node1 <none>
[root@k8s-master k8s]# kubectl get pod -o wide
No resources found.

k8s 组件架构的更多相关文章

  1. k8s之系统组件架构-02

    k8s系统架构图 网络组件:calico+kube-proxy(IPVS) 网络暴露:traefik+ingress,分别对HTTP与TCP的服务暴露 存储:glusterfs(heketi管理) 日 ...

  2. 【K8S学习笔记】初识K8S 及架构组件

    K8S是什么?发展历史 Kubernetes (简称 k8s)是 Google 在2014年开源的,对容器生命周期管理的开源平台,致力于对容器集群提供易于管理.高可用.弹性负载与故障转移的能力,提高服 ...

  3. k8s 组件介绍__单Master集群部署

    参考链接:https://github.com/opsnull/follow-me-install-kubernetes-cluster kubernetes 概述 1.kubernetes 是什么 ...

  4. [k8s]kube-dns架构图解

    kubedns DNS Policy http://blog.fleeto.us/translation/configuring-private-dns-zones-and-upstream-name ...

  5. K8s生产架构

    部分图片显示问题,特附上有道云笔记中的链接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4 ...

  6. 5分钟让你理解K8S必备架构概念,以及网络模型(上)

    写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...

  7. Kubernetes学习之路(二十)之K8S组件运行原理详解总结

    目录 一.看图说K8S 二.K8S的概念和术语 三.K8S集群组件 1.Master组件 2.Node组件 3.核心附件 四.K8S的网络模型 五.Kubernetes的核心对象详解 1.Pod资源对 ...

  8. Serverless 的运行原理与组件架构

    本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景.对 Serverless ...

  9. K8S Kubernetes 架构

    Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统. Kubernetes架构 Kubernetes借鉴了Borg的设计理念,比如Pod.Service.Label ...

随机推荐

  1. java计算两个日期之间的相隔天数

    [原创] 之前在很多竞赛的题目中有这样饿一类题,计算给定两个日期之间的相隔天数,或者很多类似的题目,都是需要转化到这个问题上时,之前用c++写的时候思想是这样的,一个结构体,包括年月日,还有一个计算下 ...

  2. Linux建立FTP服务器

    http://blog.chinaunix.net/uid-20541719-id-1931116.html http://www.cnblogs.com/hnrainll/archive/2011/ ...

  3. 使用window.getSelection()获取div中选中文字内容及位置

    div添加一个弹出事件: $(document).ready(function () { $("#marked-area").mouseup(function (e) { $sco ...

  4. CSS设计指南之ID属性

    1.用于页内导航的ID ID也可以用在页内导航连接中.下面就是一个链接,其目标是同一页的另一个位置. <a href="#bio">Biography</a> ...

  5. Delphi组件开发教程指南目录

    用Delphi开发的时间也不短了!刚接触Delphi的时候,就觉得组件这个东西非常方便!根本不必知道组件内部的作为,只要使用就好了!然而用的多了,也不免会对各种delphi组件的内部实现方式产生兴趣! ...

  6. 【转】配置Tomcat使用https协议(配置SSL协议)

    转载地址:http://ln-ydc.iteye.com/blog/1330674 内容概览: 如果希望 Tomcat 支持 Https,主要的工作是配置 SSL 协议 1.生成安全证书 2.配置to ...

  7. Android Service的分类详解

    按照启动方式分类 谷歌官网对Service的分类 Service根据启动方式分为两类:Started和Bound.其中,Started()是通过startService()来启动,主要用于程序内部使用 ...

  8. COGS 497——奶牛派对

    奶牛派对 我们发现每头牛需要走的路程即为它到x的最短路+x到它的最短路. 转化: 于是这道题变成了一道典型的单源最短路问题,只需求出每个点到x的最短路dl,以及从x到此点的最短路d2,然后去找max( ...

  9. 【BZOJ4325】NOIP2015 斗地主 搜索+贪心

    这个东西考试的时候一眼以为状压就压炸了考试又了一下午.....最后我打出来发现后几个点10min都过不去,我大概算了一下,可能是吧.......最后一脸懵逼的我去怂了正解,我们发现只要确定了顺子就可以 ...

  10. greendao的基本操作

    1.先配置项目的builder.gradle // Top-level build file where you can add configuration options common to all ...