01:kubernetes基础
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基础的更多相关文章
- Kubernetes基础:查看状态、管理服务
目标 了解Kubernetes Pod 了解Kubernetes Node 学习如何调试部署问题 了解如何通过Service暴露应用 Kubernetes Pods 在Kubernetes中创建一个D ...
- 01: tornado基础篇
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...
- 后端 - Lession 01 PHP 基础
目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...
- 1-2、kubernetes架构概述和kubernetes基础概念
kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...
- linux运维、架构之路-Kubernetes基础(一)
一.Kubernetes介绍 Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统.Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并 ...
- 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 ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现
075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...
- 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现
074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...
- 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现
073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...
随机推荐
- C语言 - 堆和栈
一.堆内存 1.就是程序员手动管理的一块内存,在C语言中,可以理解为用malloc.realloc等申请空间的一些函数,这些函数所申请的空间就是堆空间 2.C语言中,堆空间是申请和释放 malloc/ ...
- Luogu P4709 信息传递 (群论、生成函数、多项式指数函数)
题意: 题解: 这道题我思路大方向是正确的,但是生成函数推错导致一直WA,看了标程才改对-- 首先一个长为\(m\)的轮换的\(n\)次幂会分裂成\(\gcd(n,m)\)个长为\(\frac{m}{ ...
- Linux安装并使用Ludwig训练模型
一.在Python3环境安装Ludwig: 1.使用pip安装:pip install ludwig 2.源码编译安装: git clone git@github.com:uber/ludwig.gi ...
- 前端js图片上传
前端js图片上传,原理用input type="file"获取图片然后把图片转换成base64编码传到后台. 图片上传 <!DOCTYPE html><html& ...
- [CSP-S模拟测试]:小L的数(数位DP+模拟)
题目传送门(内部题132) 输入格式 第一行一个整数$t$. 接下来$t$行每行一个整数$n$. 输出格式 $t$行,每行一个整数表示答案. 样例 样例输入: 41818231232691052109 ...
- JAVA源文件中可以包含多个类
可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一直:例如: package test; public class test { } class ...
- idea 下运行安卓项目
修改 gralde 路径修改安卓sdk路径进入project structure 设置 Project settings / Project /project SDK 选择 Android API 2 ...
- P2010 回文日期
P2010 回文日期 题解 回文日期,一共8位,只需要枚举4位就好了其实,然后判断它是否合法 代码 #include<bits/stdc++.h> using namespace std; ...
- java 深入HashTable
在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相 ...
- 写python获取android设备的GPS及姿态信息
在android上,我们可以使用QPython来编写.执行Python脚本.它对很多android 系统函数进行了方便的封装,使用QPython编写功能简单的小程序异常方便. 这个示例是我之前用来读取 ...