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. Unity3D_(API)Quaternion四元数中的Quaternion.LookRotation()

    四元数百度百科: 传送门 四元数官方文档: 传送门 欧拉旋转.四元数.矩阵旋转之间的差异: 传送门 四元数转换为欧拉角eulerAngles 官方文档: 传送门 欧拉角转换为四元数Euler 官方文档 ...

  2. springBoot 整合 mybatis 项目实战

    二.springBoot 整合 mybatis 项目实战   前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...

  3. 讨厌的adb占用

    adb重启的方法 2018年06月13日 14:59:47 丽闪无敌 阅读数:11969   执行以下命令: D:\android-sdks\platform-tools>adb kill-se ...

  4. C语言中的!!

    C语言中!!的作用是?看例子: #include <stdio.h> int main() { ; printf("test=%d !test=%d !!test=%d\n&qu ...

  5. xshell上windows和linux互传文件命令

    1.安装lrzsz包: yum install -y lrzsz 2.从windows上传文件到linux服务器: rz 会弹出选择文件窗口,按照提示做就行3.从linux服务器下载文件到本地的win ...

  6. LeetCode 39. 组合总和(Combination Sum)

    题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限 ...

  7. 一、Smarty安装与调试

    一.安装注:这里所使用的Smarty是3.x版本,要求PHP版本为5.2或者更高.解压下载下来的Smarty压缩文件,将文件夹libs拷到项目中,在项目中引入libs文件夹中的"Smarty ...

  8. python模块------pyautogui

    安装 pip install pyautogui 基本使用 查询 screenWidth, screenHeight = pyautogui.size() # 屏幕尺寸 mouseX, mouseY ...

  9. vue问题一:触发接口

    //在script中先引用 import api from './../../api/index' //vue文件方法中 写 del(index, row) { let self=this; // 传 ...

  10. gromacs2018使用踩坑记--insert-molecules

    1] gmx插入分子[ -f [<.gro / .g96 / ...>] ] [ -ci [<.gro / .g96 / ...>] ] [ -ip [<.dat> ...