一、IaaS、PaaS、SaaS简介
1 基础设施即服务 (IaaS): Infrastructure as a Service
基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。
2 平台即服务 (PaaS):platform as a service
平台即服务消除了组织对底层基础设施(一般是硬件和操作系统)的管理需要,让您可以将更多精力放在应用程序的部署和管理上面。这有助于提高效率,因为bash 您不用操心资源购置、容量规划、软件维护、补丁安装或与应用程序运行有关的任何无差别的繁重工作。
3 软件即服务 (SaaS):Software as a Service
软件即服务提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。使用 SaaS 产品时,服务的维护和底层基础设施的管理都不用您操心,您只需要考虑怎样使用 SaaS 软件就可以了。SaaS 的常见应用是基于 Web 的电子邮件,在这种应用场景中,您可以收发电子邮件而不用管理电子邮件产品的功能添加,也不需要维护电子邮件程序运行所在的服务器和操作系统。
二 K8s重要插件
CoreDNS:可以为集群中的SVC创建一个域名IP的对应关系解析
Dashboard:提供一种B/S GUI的方式对集群资源进行管理,可以获取运行在集群中的应用的信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)
Ingress Controller:为服务提供外网入口,对外提供服务的方式之一
Federation:提供一 个可以跨集群中心多K8S统一管理功能
Prometheus:提供资源监控
elk:提供集群日志采集、存储与查询
Flannel:是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP 地址之间建立一个覆盖网络(Overlay Network) ,通过这个覆盖网络,将数据包原封不动地传递到目标容器内
推荐在 Kubernetes 集群中使用 Etcd v3,v2 版本已在 Kubernetes v1.11 中弃用。etcd 的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转:
资源清单
资源清单含义:在 k8s 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod等资源对象,这样的 yaml 文件我们一般 称为资源清单。
分类
名称空间级别:仅存此名称空间下生效
工作负载型资源(workload):
Pod: k8s中最小单元
ReplicaSet:调度器,通过标签控制 pod 的副本数目
Deployment:控制器,通过控制 rs 的创建来创建 pod
StatefulSet:为有状态服务创建的管理器
DaemonSet:可以在每个节点运行 pod 主键
Job:为批处理而生
CronJob(ReplicationController)在v1.11版本被废弃:为批处理而生
服务发现及负载均衡型资源(ServiceDiscoveryLoadBalance):Service、Ingress、...
配置与存储型资源:Volume(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)
特殊类型的存储卷:
ConfigMap(当配置中心来使用的资源类型):通过他可以创建一些配置文件,达到热更新
Secret(保存敏感数据):加密方案存储数据,可以用它存储一些秘钥等
DownwardAPI(把外部环境中的信息输出给容器):下载文件的接口,可以下载、上传
集群级别:所有名称空间都可以使用
Namespace:名称空间
Node:工作节点
Role
ClusterRole
RoleBinding
ClusterRoleBinding
元数据型资源
HPA
PodTemplate(pod模板)
LimitRange(资源限制)
三 Pod的创建过程
用户通过kubectl或APIServer提供的调用接口将要创建的pod信息提交给apiserver;
APIServer通过鉴权等后,构建出完整的Pod信息,并将该信息存储到etcd中,然后返回确认信息至客户端;
apiserver开始反映etcd中的pod对象的变化,其他组件使用watch(监听)机制来跟踪检查apiserver上的变动;
Scheduler watch(监听)到pod的事件,发现有新的pod创建信息, 随即为该pod分配合适的node,然后调用APIServer的修改接口,将Pod与node绑定;
node节点上的kubelet watch到pod事件,发现有pod调度过来,尝试调用docker启动容器,并将结果送至apiserver;
apiserver将接收到的pod状态信息存入etcd中