Kubernetes基础概念

是什么

Kubernetes是开源的容器编排系统,Kubernetes 是google 10多年大规模容器管理技术的Borg的开源版本,它是容器集群管理系统, 可使先容器集群的自动化部署,自动扩缩容,维护等功能,它可以帮助我们快速部署应用,快速扩展应用, 无缝对接新应用,DevOps自动化运维,金丝雀发布。

部署进化
传统部署时代

早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。

虚拟化部署时代

作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。

因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代

容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植。容器因具有许多优势而变得流行起来。下面列出了容器的一些好处:敏捷应用程序的创建和部署持续开发集成和部署关注开发与运维的分离可观察性跨开发测试和生产的环境一致性云和操作系统分发的可移植性以应用程序为中心的管理松散耦合、分布式、弹性、解放的微服务资源隔离高效率和高密度的资源利用

Kubernetes 为什么存在

在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。Kubernetes 提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足扩展要求、故障转移、部署模式等。Kubernetes 提供了如下的功能:服务发现和负载均衡,存储编排,自动部署和回滚,自动二进制打包,自我修复,密钥与配置管理

Kubernetes构成

节点类型分为master节点和node节点
master节点 :调度控制集群资源
node节点 :运行容器,运行服务。就是干活的

master节点的模块构成 : kube-apiserver,kube-scheduler,kube-controller-manager,etcd

node节点模块构成kubelet,kube-proxy,runtime

kubernetes 内部使用grpc通信,对外提供restful aip

基础概念
kubernetes对象

pod :用于运行容器的最小单元,一个pod可以对应着一个docker容器, 也可以是对应一组docker容器。 pod很少直接创建,一般情况下pod 由Controller创建和管理,由调度器调度在集群中的node节点上运行。他们共享IPC(进程间通信),Network(网络),和UTS(后面有解释)

service: 默认情况下,Docker 使用私有主机网络连接,只能与同在一台机器上的容器进行通信。 为了实现容器的跨节点通信,必须在机器自己的 IP 上为这些容器分配端口,为容器进行端口转发或者代理。service是为运行在一组 Pods 上的应用程序 提供对外网络服务的。借助Service,应用可以方便地实现服务发现和负载均衡

Volume: 容器中的磁盘文件是临时的,当容器崩溃时,kubelet 将重新启动容器,这些文件会丢失。当在一个 Pod 中同时运行多个容器时,常常需要在这些容器之间共享文件。Volumes就是来解决这两个问题的。 Kubernetes 支持的卷类型很多:awsElasticBlockStore,azureDisk,azureFile,cephfs,cinder,configMap,csi,downwardAPI,emptyDir,fc (fibre channel),flexVolume,flocker,gcePersistentDisk,gitRepo (deprecated)… …

Namespace: Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。命名空间适用于存在很多跨多个团队或项目的用户的场景。命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的。在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。命名空间是在多个用户之间划分集群资源的一种方法。

Kubernetes 中的 Controller 高级抽象

deployment: Controller中的一种,负责部署 pod, deployment存在的时候,我们通过命了删除了pod,pod也会被deployment自动创建出来

DaemonSet: DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

StatefulSet: StatefulSet 是用来管理有状态应用的工作负载 API 对象。StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证,

ReplicaSet: ReplicaSet 是下一代的 Replication Controller。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持。ReplicaSet 支持新的基于集合的选择器需求,这在标签用户指南中有描述。而 Replication Controller 仅支持基于相等选择器的需求。

Job: Job用于执行任务,例如临时任务 ,Job会创建一个或多个Pod,并确保指定数量的Pod成功终止。pods成功完成后,Job将跟踪成功完成的情况。当达到指定的成功完成次数时,Job就完成了。删除Job将清除其创建的Pod

其他

label (k-v)标签,可以被管理到pod这样的对象上,主要作用是标记,

GUI 用户图形界面,可以是web用户页面例如kubernetes-dashboard组件,用户可以通过dashboard部署集群中的容器化应用,可以查看集群运行情况,通过部署向导对容器进行扩容缩容,进行滚动更新,重启pod,dashboard也能查看资源状态

kubectl:用户管理Kubernetes 的命令行工具

kube-apiserver:提供了资源操作的唯一入口,并提供认证授权,访问控制,api注册和发现等机制。

runtime: 负责镜像管理以及pod和容器的真正运行(CRI Containner Runtime Interface),默认的容器runtime是Docker。

kubelet: 负责维持容器的生命周期,同时也负责Volume(CVI Container Volume Interface)和网络(CNI Container Network Interface) 的管理

kube-proxy: 负责为Service提供cluster(集群) 内部的服务发现和负载均衡

UTS命名空间是Linux命名空间的子系统,主要作用是完成对容器的Hostname和Domain的隔离,同时保存内核名称, 版本和底层体系结构类型等信息,Docker就是基于它开发的。


文章引用
kubernetes官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值