1.k8s介绍
1.历史和现状
Laas 基础设施平台服务 --代表厂商 阿里云
Paas 平台及服务 --新浪 (k8s) docker 是paas 的标准
Saas 软件及服务
1、发展经历
以前:mesos apache 分布式资源管理框架 2019-5 twitter > kubernetes
Docker swarm 2019-07 阿里云宣布 docker swarm 剔除
Kubernetes google 10年容器话基础框架 borg go语言对borg进行重新编写
特点:
轻量级(消耗的资源比较少)
开源
弹性伸缩
负载均衡:IPVS(IP虚拟服务器)
适合人群:软件工程师,测试工程师 ,运维工程师 ,软件架构师 ,项目经理
云原生的定义:
实际上,云原生是一条最佳路径或者最佳实践。更详细的说,云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。
因此,云原生其实是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:首先,天然就“生在云上,长在云上”;其次,能够最大化地发挥云的能力,使得我们开发的软件和“云”能够天然地集成在一起,发挥出“云”的最大价值。
所以,云原生的最大价值和愿景,就是认为未来的软件,会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。说到了这里,大家可以思考一下为什么容器技术具有革命性?
其实,容器技术和集装箱技术的革命性非常类似,即:容器技术使得应用具有了一种“自包含”的定义方式。所以,这样的应用才能以敏捷的、以可扩展可复制的方式发布在云上,发挥出云的能力。这也就是容器技术对云发挥出的革命性影响所在,所以说,容器技术正是云原生技术的核心底盘。
2. 知识图谱
介绍说明:前世今生 kubernetes 框架 kubernetes关键字含义
基础概念:什么是pod 控制器类型 k8s网络通讯模式
kubernetes:构建k8s集群
资源清单:资源掌握资源清单的语法编写pod掌握pod 的生命周期***
pod控制器:掌握各种控制器的特点以及使用定义方式
服务发现(servece):掌握svc(交换虚拟链路) 原理及其构建方式
存储:掌握多种存储类型的特点 ,并且能够在不同环境中选择合适的存储方案(自己的见解)
调度器:掌握调度器原理 , 能够根据要求把pod定义到想要的节点运行
集群安全机制:集群的认证 鉴权 访问控制 , 原理及其流程
helm:类型linux里面的yum包管理工具掌握HELM原理 , HELM模板自定义,HELM部署一些常用的插件
运维 : 修改kubeadm达到证书可用期限为10年 能够构建高可用状态
服务器分类
-
有状态服务:DBMS
-
无状态服务:lvs apache
高可用集群副本数据最好是 》=3奇数个
查看 k8s api支持版本的文档 https://kubernetes.io/docs/reference/
通过api 查看各个控制器的支持版本
kubectl api-versions
api-resources
可以通过查看api-resources
来查看受支持的资源。
这里的资源包括Kubernetes自带的,和用户自建的CRD
kubectl api-resources
第三列和第五列就可以看到title为APIVERSION
和KIND
,其实到此就已经可以明确如何对应使用资源了。
kubectl explain
通过kubectl explain {kind_name}
可以参考到某个kind资源拥有的字段以及对应的apiVersion
查看资源支持所有字段
kubectl explain { kind_name } --recursive
如:kubectl explain { kind_name } --recursive
因为太长这里就不列出来了。
查看具体字段里的子字段
kubectl explain { kind_name }.字段名1.字段名2
其中从左往右是父子关系,如:deployment.spec.selector
当在自己写yaml文件时,没有参考示例,可以使用这些命令来摸索
3.组件说明
etcd:官方将它定位成一个可信赖的分布式键值存储服务 ,它能够为整个分布式集群存储一些关键数据 , 协助分布式集群的正常运转
推荐在kubernetes 集群中使用etcdv3 ,v2 版本已在kubernetsv1.11中弃用
server端安装:
apiserver:所有服务访问的统一入口
crontrollermanager:维持副本期望数目
scheduler:负责介绍任务 ,选择合适的节点进行分配任务
etcd:键值对数据库, 存储k8s集群所有重要信息(持久化)
kubelet:直接跟容器引擎交互实现容器的生命周期管理
kube-proxy:负责写入规则至iptables ,IPvs实现服务映射访问的
coreDNS:可以为集群中的svc创建一个域名IP的对于关系解析
DASHBOARD:给k8s集群提供一个B/s结构访问体系
INGRESS CONTROLLER:官方只能实现四层代理 , ingress 可以实现七层代理
fedetation:提供一个可以跨几圈中心多个k8s统一管理
Prometheus :提供k8s集群的监控能力
elk:提供k8s 集群日志统一分析接入平台
4.云原生
4.1发展史
首先从第一个要的问题,那就是“什么是云原生?”云原生、CNCF 都是目前非常热门的关键词,但是这些技术并不是非常新鲜的内容。
- 2004 年— 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
- 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干;
- 2013 年,Docker 项目正式发布。
- 2014 年,Kubernetes 项目也正式发布。这样的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。
- 2015 年,由Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。在这之后,CNCF 的发展速度非常迅猛;
- 2017 年,CNCF 达到 170 个成员和 14 个基金项目;
- 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。
4.2 云原生的现状
- 云原生基金会 —— CNCF;
- 云原生技术社区,比如像 CNCF 目前正式托管的 20 多个项目共同构成了现代云计算生态的基石,其中像 Kubernetes 这样的项目已经成为了世界第四活跃的开源项目;
- 除了前面两点之外,现在全球各大公有云厂商都已经支持了 Kubernetes。此外,还有 100 多家技术创业公司也在持续地进行投入。现在阿里巴巴也在谈全面上云,而且上云就要上云原生,这也是各大技术公司拥抱云原生的一个例子。
五、各个版本支持情况说明
-
alpha
名称中带有alpha的API版本是进入Kubernetes的新功能的早期候选版本。这些可能包含错误,并且不保证将来可以使用。 -
beta
API版本名称中的beta表示测试已经超过了alpha级别,并且该功能最终将包含在Kubernetes中。 虽然它的工作方式可能会改变,并且对象的定义方式可能会完全改变,但该特征本身很可能以某种形式将其变为Kubernetes。 -
stable
稳定的apiVersion这些名称中不包含alpha或beta。 它们可以安全使用。 -
v1
这是Kubernetes API的第一个稳定版本。 它包含许多核心对象。 -
apps/v1
apps是Kubernetes中最常见的API组,其中包含许多核心对象和v1。 它包括与在Kubernetes上运行应用程序相关的功能,如Deployments,RollingUpdates和ReplicaSets。 -
autoscaling/v1
此API版本允许根据不同的资源使用指标自动调整容器。此稳定版本仅支持CPU扩展,但未来的alpha和beta版本将允许您根据内存使用情况和自定义指标进行扩展。 -
batch/v1
batchAPI组包含与批处理和类似作业的任务相关的对象(而不是像应用程序一样的任务,如无限期地运行Web服务器)。 这个apiVersion是这些API对象的第一个稳定版本。 -
batch/v1beta1
Kubernetes中批处理对象的新功能测试版,特别是包括允许您在特定时间或周期运行作业的CronJobs。 -
certificates.k8s.io/v1beta1
此API版本添加了验证网络证书的功能,以便在群集中进行安全通信。 您可以在官方文档上阅读更多内容。 -
extensions/v1beta1
此版本的API包含许多新的常用Kubernetes功能。 部署,DaemonSets,ReplicaSet和Ingresses都在此版本中收到了重大更改。 -
policy/v1beta1
此apiVersion增加了设置pod中断预算和pod安全性新规则的功能 -
rbac.authorization.k8s.io/v1
此apiVersion包含Kubernetes基于角色的访问控制的额外功能。这有助于您保护群集