k8s-day1-k8s简介及基础架构

非淡泊无以明志,非宁静无以致远。这篇文章主要讲述k8s-day1-k8s简介及基础架构相关的知识,希望能为你提供帮助。
?1、?K8S简介??Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
Kubernetes是一个完备的分布式系统支撑平台。具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。
在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node,其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。
通过Kubernetes你可以:快速部署应用、快速扩展应用、无缝对接新的应用功能、节省资源,优化硬件资源的使用。
Kubernetes 特点:
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
在Kubernetes集群中,它解决了传统IT系统中服务扩容和升级的两大难题。如果今天的软件并不是特别复杂并且需要承载的峰值流量不是特别多,那么后端项目的部署其实也只需要在虚拟机上安装一些简单的依赖,将需要部署的项目编译后运行就可以了。但是随着软件变得越来越复杂,一个完整的后端服务不再是单体服务,而是由多个职责和功能不同的服务组成,服务之间复杂的拓扑关系以及单机已经无法满足的性能需求使得软件的部署和运维工作变得非常复杂,这也就使得部署和运维大型集群变成了非常迫切的需求。
Kubernetes 的出现不仅主宰了容器编排的市场,更改变了过去的运维方式,不仅将开发与运维之间边界变得更加模糊,而且让 DevOps 这一角色变得更加清晰,每一个软件工程师都可以通过 Kubernetes 来定义服务之间的拓扑关系、线上的节点个数、资源使用量并且能够快速实现水平扩容、蓝绿部署等在过去复杂的运维操作。
?2、?K8S基础架构??

Kubernetes主要由以下几个核心组件组成:
【k8s-day1-k8s简介及基础架构】

etcd保存了整个集群的状态;
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;(节点(Node)控制器。副本(Replication)控制器:负责维护系统中每个副本中的pod。端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。)
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;


除了核心组件,还有其他组件:
kube-dns负责为整个集群提供DNS服务;
Ingress Controller为服务提供外网入口;
Heapster提供资源监控;
Dashboard提供GUI;
Federation提供跨可用区的集群;
Fluentd-elasticsearch提供集群日志采集、存储与查询等。


??Kubernetes对象:??Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。具体来说,他们可以描述:容器化应用正在运行(以及在哪些节点上);这些应用可用的资源;关于这些应用如何运行的策略,如重新策略,升级和容错。
kubernetes资源类别:

??类别???
??名称???
?资源对象?
?Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling?
?配置对象?
?Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、 ServiceAccount?
?存储对象?
?Volume、Persistent Volume?
?策略对象?
?SecurityContext、ResourceQuota、LimitRange?
对于要创建的Kubernetes对象的yaml文件,需要为以下字段设置值:
apiVersion:创建对象的Kubernetes API 版本
kind :要创建什么样的对象?
metadata:具有唯一标示对象的数据,包括 name(字符串)、UID和Namespace(可选项)


个人公众号:linux言叙


    推荐阅读