一、整体架构

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. python中locals和globals函数

    参考:http://www.cnblogs.com/wanxsb/archive/2013/05/07/3064783.html Python有两个内置的函数,locals() 和globals(), ...

  2. web四则运算

    目录 1.coding.net地址 2.PSP 3.Information Hiding, Interface Design, Loose Coupling 4.计算模块接口的设计与实现过程 5.计算 ...

  3. js 给某个div增加class 样式(三种方式)

    第一种:      el.setAttribute('class','abc'); <!DOCTYPE HTML> <HTML> <HEAD> <meta c ...

  4. php 将数组存入cookie

    最近在做一个购物车的功能,需要将商品的ID和商品数量存入cookie,实际上,cookie是不能存数组的,因此需要用到序列化函数serialize() 函数解释: serialize()就是将PHP中 ...

  5. httpclient upload file

    用httpclient upload上传文件时,代码如下: HttpPost httpPost = new HttpPost(uploadImg); httpPost.addHeader(" ...

  6. [UVA1625]Color Length

    题面在这里 description 输入两个长度分别为\(n\)和\(m\)的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部. 对于每个颜色\(c\)来说,其跨度 ...

  7. git config文件总结及git alias配置

    1. 文件位置 mac /etc/.gitconfig 系统级~/.gitconifg 用户级(覆盖系统级) windows C:\Users\$user\.gitconfig 当前项目下 .git/ ...

  8. final变量属性小记

    final 修饰符对于类成员变量来说,具备语法上不可变的特性:对于类成员方法来说,具备语法上子类不可覆盖重写的特性(能被继承的前提下). 但 final 并不限制子类对父类被修饰声明的成员变量进行覆盖 ...

  9. HDU1828 Picture 线段树+扫描线模板题

    Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  10. event对象和事件冒泡

    <!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>无标 ...