1.Kubernetes是什么?
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
2.Kubernetes版本
Kubernetes版本表示为xyz,其中x是主要版本,y是次要版本,z是补丁版本,遵循语义版本控制术语。
简单来讲,kubernetes项目存在3类分支(branch),分别为master,release-X.Y,release-X.Y.Z
。
master
分支上的代码是最新的,每隔2周会生成一个发布版本(release),由新到旧以此为master-->alpha-->beta-->Final release
,这当中存在一些cherry picking的规则,也就是说从一个分支上挑选一些必要pull request应用到另一个分支上。
release-X.Y
我们可以认为X.Y.0为稳定的版本,这个版本号意味着一个Final release。一个X.Y.0版本会在X.(Y-1).0版本的3到4个月后出现。
release-X.Y.Z
X.Y.Z为经过cherrypick后解决了必须的安全性漏洞、以及影响大量用户的无法解决的问题的补丁版本。
总体而言,我们一般关心X.Y.0(稳定版本),和X.Y.Z(补丁版本)的特性。
3.Kubernetes功能
自动装箱
自动修复
水平扩展
服务发现
滚动更新
版本回退
密钥和配置管理
存储编排
4.对于Kubernetes误解的更正
Kubernetes并不是传统的PaaS(平台即服务)系统。
Kubernetes不限制支持应用的类型,不限制应用框架。
Kubernetes支持不同负载应用,包括有状态、无状态、数据处理类型的应用。
Kubernetes不提供中间件(如message buses)、数据处理框架(如Spark)、数据库(如Mysql)或者集群存储系统(如Ceph)作为内置服务。但这些应用都可以运行在Kubernetes上面。
Kubernetes不部署源码不编译应用。持续集成的 (CI)工作流方面,不同的用户有不同的需求和偏好的区域,Kubernetes提供分层的 CI工作流,但并不定义它应该如何工作。
Kubernetes允许用户选择自己的日志、监控和报警系统。
Kubernetes不提供或授权一个全面的应用程序配置 语言/系统(例如,jsonnet)。
Kubernetes不提供任何机器配置、维护、管理或者自修复系统。
5.Node及Pod的支持
Node节点支持
早期版本管理100台
现版本管理2000台
pod管理支持
早期版本管理1000台
现版本管理150000台
6.应用部署架构分类
1.无中心节点架构
GlusterFS
2.有中心节点架构
HDFS
K8S
7.K8S集群架构
如下图
8.k8s集群架构节点角色功能
Master Node
集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
由API Server,Scheduler,Cluster State Store(ETCD数据库)和Controller Manager Server组成
Worker Node
集群工作节点,运行用户业务应用容器;
包含kubelet,Container runtime,kube-proxy
9.核心组件
Kubernetes主要由以下几个核心组件组成:
etcd
Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。
apiserver
提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler
负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet
负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime
负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy
负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons:
kube-dns
负责为整个集群提供DNS服务
Ingress Controller
为服务提供外网入口
Heapster
提供资源监控
Dashboard
提供GUI
Federation
提供跨可用区的集群
Fluentd-elasticsearch
提供集群日志采集、存储与查询
10.Kubernetes工作原理
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信息存储。
11.Kubernetes集群部署工具
常见的部署方式
1.二进制源码包部署
(1)获取源码包
(2)部署节点和启动服务
Master节点部署
api-server
etcd
scheduler
controller manager
Worker节点部署
kubelet
kube-proxy
docker
(3)生成证书
http
https
2.使用kubeadm部署
(1)安装软件kubelet,kubeadm,kubectl,docker(每个节点)
(2)初始化集群
(3)添加node到集群
(4)证书自动生成
(5)集群管理系统以容器的形式,运行在master
(6)容器镜像由谷歌提供
这门课学习主要就是它的部署
3.Minikube部署
传送阵
菜鸟说
1.一个简简单单的kubeadm部署,就把我定住了两天!Kubernetes,你为什么这么难!
2.真不知道怎么学了!学又学不进去!
3.坚持!坚持!熬到这么技术退休!我就可以不用学了!
其他博客:
Kubernetes技术极速入门(二)----初次交锋,请手下留情
Kubernetes技术极速入门(三)---- 我有神器,能赢不
Kubernetes技术极速入门(四)---- 太强了,干不过
Kubernetes技术极速入门(五)----再来,我必定胜你
Kubernetes技术极速入门(六)---- 我搬救兵,等我回来
Kubernetes技术极速入门(七)---- 我又带了把神器
Kubernetes技术极速入门(八)---- 挥挥手,不带走一片云彩
感谢大家,点赞,收藏,关注,评论!