1.1kubernetes简介

    参考博客:https://www.kubernetes.org.cn/k8s

  1、kubernetes介绍

      1. Kubernetes是容器集群管理系统,是一个开源的平台

      2. 可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

      3. 目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。

      作用:

        1)快速部署应用
        2)快速扩展应用
        3)无缝对接新的应用功能
        4)节省资源,优化硬件资源的使用

      举例:

        1)Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着
        2)比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务

  2、kubernetes作用

    1)自我修复

        1. 在节点故障时重新启动失败的容器,替换和重新部署,保证预期我们设置的副本的数量;

        2. 杀死健康检测失败的容器,并且在没有准备好之前是不会处理客户端请求的(不对外提供服务),保证线上服务不中断

    2)弹性伸缩(比如618活动,保证我们服务的快速缩容和扩容)

        1. 使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用的程序实例(容器的副本数)

        2. 保证应用业务高峰并发时的高可用性;

        3. 在业务低峰时期回收资源,以减小成本运行服务

    3)自动部署和回滚

        1. k8s 采用滚动更新的策略更新应用,一次更新一个Pod,而不是同时删除所有的pod

        2. 如果更新过程中出现问题,将回滚更改,确保升级不影响业务

    4)服务发现和负载均衡

        1. k8s为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP的问题

    5)机密数据(密码,证书)和配置管理

        1. k8s提供存储能力(可以把密码加密放在容器存储中)

        2. 管理机密数据和应用程序的配置,而不需要把敏感的数据暴露在镜像里,提高敏感数据的安全性

        3. 并且可以把一些常用的配置存储在k8s中,方便应用程序的使用

    6)存储编排

        1. 挂载外部的存储系统,无论是来自本地存储,公有云,还是网络存储(NFS《GlustFS,Ceph)

        2. 都作为集群资源的一部分使用,极大的提高存储使用灵活性

    7)批处理

        1. 提供一次性任务,定时任务,满足批量数据处理和分析的场景

  3、核心组件:Pod

      1. 在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器

      2. 同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源

      3. 一个Pod也可以包含0个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享

      4. 对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器

      5. 当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet

1.2 Kubernetes 集群架构与组件

    官网地址:https://www.kubernetes.org.cn/kubernetes设计架构

    参考博客:https://www.cnblogs.com/Su-per-man/p/11101823.html

  1、Kubernetes中master核心组件

    1)etcd

        1. 是Kubernetes的存储状态的数据库(所有master的持续状态都存在etcd的一个实例中);

        2. 它是一个集群分布式数据库,它可以提供分布式数据的一致性。

    2)apiserver

        1. Kubernetes的核心组件是API Server,它是Kubernetes系统和Etcd直接对话的唯一组件

        2. 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;

    3)controller manager

        1. controller manager 是通过API Server 进行协调的组件,绑定到单独的服务器Master上;

        2. 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

    4)scheduler

        1. scheduler是通过API Server 进行协调的组件,绑定到单独的服务器Master上;

        2. scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

  2、Kubernetes中Node核心组件

    1)kubelet(Node Agent)

        1. kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。

        2. Agent负责监视绑定到其节点的一组Pod,并确保这些Pod正常运行,并且能实时返回这些Pod的运行状态。

    2)Container runtime

        1. Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);

    3)kube-proxy

        1. kube-proxy网络代理和负载均衡,负责为Service提供cluster内部的服务发现和负载均衡;

kube-dns负责为整个集群提供DNS服务
Ingress Controller为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-elasticsearch提供集群日志采集、存储与查询

其他组件

    注: Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

  3、k8s工作原理

      1. 我们通过kubectl向k8s Master发出指令。

      2. kubernetes Master主要是提供API Server、Scheduler、Controller组件,接收kubectl的命令

      3. kubernetes Master主从Node节点获取Node的资源信息,并发出调度任务。

      4. Node节点提供kubelet、kube-proxy,每个node节点都安装docker,是实际的执行者。

      5. kubernetes不负责网络,所以一般是用flannel或者weave。

      6. etcd负责服务发现和node信息存储。

      

  4、分层架构

      1. 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

      2. 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

      3. 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

      4. 接口层:kubectl命令行工具、客户端SDK以及集群联邦

      5. 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

      6. Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

      7. Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

1.3 创建pod的流程

  1.用户提交创建Pod的请求,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式;

  2.API Server 处理用户请求,存储Pod数据到Etcd;

  3.Schedule通过和 API Server的watch机制,查看到新的pod,尝试为Pod绑定Node;

  4.过滤主机:调度器用一组规则过滤掉不符合要求的主机(比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机);

  5.主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略

                      比如:把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;

  6.选择主机:选择打分最高的主机,进行binding操作,结果存储到Etcd中;

  7.kubelet根据调度结果执行Pod创建操作:

    1)绑定成功后,会启动container, docker run,

    2)scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。

    3)运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息

    4)一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。

    

11111111111111111

01:kubernetes基础的更多相关文章

  1. Kubernetes基础:查看状态、管理服务

    目标 了解Kubernetes Pod 了解Kubernetes Node 学习如何调试部署问题 了解如何通过Service暴露应用 Kubernetes Pods 在Kubernetes中创建一个D ...

  2. 01: tornado基础篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...

  3. 后端 - Lession 01 PHP 基础

    目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...

  4. 1-2、kubernetes架构概述和kubernetes基础概念

    kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...

  5. linux运维、架构之路-Kubernetes基础(一)

    一.Kubernetes介绍 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统.Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并 ...

  6. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  7. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  8. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  9. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

  10. 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现

    073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...

随机推荐

  1. CF293E Close Vertices 点分治+树状数组

    开始zz写了一个主席树,后来发现写个树状数组就行~ #include <cstdio> #include <vector> #include <algorithm> ...

  2. 51 Nod 最大子矩阵和

    1051 最大子矩阵和  基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的 ...

  3. C++入门经典-例6.12-使用数组地址将二维数组输出

    1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数 ...

  4. 关于varchar的总结

    摘自:https://www.jianshu.com/p/c3e188440c67 大家都知道用 varchar 比用 char 类型更省空间(不过性能略有下降,char查询更快),相对于定长的 ch ...

  5. ubuntu16.04修改host上外網

    1.打开hosts文件: sudo emacs /etc/hosts 2.加入下面的内容 #chrome同步服务器 203.208.46.132 chrome.google.com203.208.46 ...

  6. Java内存泄漏分析和预防

    1. 什么是内存泄漏?有什么危害 书面说法: 内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个 ...

  7. 对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们

    托管调试助手“CallbackOnCollectedDelegate”在“D:\XXX\XXX.vshost.exe”中检测到问题. 其他信息: 对“XXX+HookProc::Invoke”类型的已 ...

  8. 第七章 SpringCloud之非声明式RestClient:Feign

    study-url:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.4.6.RELEASE/multi/multi ...

  9. flutter 快速生成Widget

    快速生成对象 List.generate(20, (i){ return Text("$i"); }), 快速生成Widget ListView.builder( itemCoun ...

  10. [Cinder] 存储 Qos

    目录 文章目录 目录 前言 操作步骤 参考文章 前言 Cinder 支持 front-end 和 back-end 两种类型的存储 QoS,前者由 Hypervisor 端实现(e.g. 通过 Lib ...