首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Kubernetes(二)了解k8s的基本组件与概念

  • 23-11-14 12:44
  • 3578
  • 10174
blog.csdn.net

#博学谷IT学习技术支持#

Kubernetes是什么

Kubernetes是Google于2014年基于其内部Brog系统开源的一个容器编排管理系统,可使用声明式的配置(以yaml文件的形式)自动地执行容器化应用程序的管理,包括部署、伸缩、负载均衡、回滚等。

kubernetes提供的功能:

  • 自动发布与伸缩:可以通过声明式的配置文件定义想要部署的容器,Kubernetes将自动进行容器的部署,达到期望的结果;通过指定容器副本数,或者设置根据资源负载情况(如CPU、内存使用率),自动对容器组进行快速的伸缩——增大或缩小容器数量
  • 滚动升级与灰度发布:采用逐步替换的策略实现滚动升级,使用Kubernetes也可以很轻易地管理系统的灰度发布
  • 服务发现与负载均衡:Kubernetes通过DNS名称或IP地址暴露容器的访问方式,并且可在同一容器组内实现负载分发与均衡
  • 存储编排:Kubernetes可以自动挂载指定的存储系统,如local storage/nfs/云存储等
  • 故障恢复:Kubernetes自动重启已经停机的容器,替换不满足健康检查的容器
  • 密钥与配置管理:Kubernetes可以存储与管理敏感信息,如Docker Registry的登录凭证,密码,ssh密钥等

Kubernetes架构

我们先来看一张Kubernetes的架构图

Kubernetes是一套分布式系统, 与大多数分布式系统类似,包含控制节点(master node)与工作节点(worker node)。

master node

控制节点就是指挥官,负责发号施令的,其上运行一些管理服务来对整个系统进行管理与控制,包括

  • apiserver:作为整个系统的对外接口,提供一套Restful API供客户端调用,任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行,如kubectl、kubernetes dashboard等管理工具就是通过apiserver来实现对集群的管理
  • kube-scheduler:资源调度器,负责将容器组分配到哪些节点上
  • kube-controller-manager:管理控制器,集群中处理常规任务的后台线程,包括节点控制器(负责监听节点停机的事件并作出对应响应)、endpoint-controller(刷新服务与容器组的关联信息)、replication-controller(维护容器组的副本数为指定的数值)、Service Account & Token控制器(负责为新的命名空间创建默认的 Service Account 以及 API Access Token)
  • etcd:数据存储,存储集群所有的配置信息
  • coredns:实现集群内部通过服务名称进行容器组访问的功能

worker node

工作节点就是具体干活的小兵,其上也运行一些服务来执行指挥官分派的任务,包括

  • kubelet:是工作节点上执行操作的代理程序,负责容器的生命周期管理,定期执行容器健康检查,并上报容器的运行状态
  • kube-proxy:是一个具有负载均衡能力的简单的网络访问代理,负责将访问某个服务的请求分配到工作节点的具体某个容器上(kube-proxy也运行于master node上)
  • Docker Daemon:这个不难理解,所有服务或容器组都要以Docker容器的形式来运行(但Kubernetes其实不局限于Docker,它支持任何实现了Kubernetes容器引擎接口的容器引擎,如containerd、rktlet)

另外还有既在master node上也在worker node上运行的网络通信组件 kube-flannel。这些服务组件一般运行在kube-system的命名空间中,如图

Kubernetes基本概念

我们再来看第二张图

功能组件在上面已经做了介绍。Kubernetes的操作对象主要包括容器组(Pod),服务(Service),副本控制器(replication-controller),及围绕这些的其它辅助对象

Pod

Pod是Kubernetes创建或部署的最小基本单元。一个Pod封装一个或多个应用容器、存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod中的每个容器共享网络命名空间(包括IP与端口),Pod内的容器可以使用localhost相互通信。Pod可以指定一组共享存储卷Volumes,Pod中所有容器都可以访问共享的Volumes,Volumes用于数据持久化,防止容器重启丢失数据。

Volume

Kubernetes使用Volume来解决Pod中容器重启数据丢失的问题,以及Pod中多个容器间数据共享的问题。Kubernetes支持的Volume类型包括:

  • emptyDir:当Pod分配到Node上时,将会创建emptyDir,只要Node上的Pod一直运行,Volume就会一直存在。当Pod(不管任何原因)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除,但删除容器不影响emptyDir
  • hostPath:hostPath允许挂载Node上的文件系统到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath
  • nfs: 使用nfs网络文件系统提供的共享目录

ReplicationController

ReplicationController确保在任何时候都有按配置的Pod副本数在运行。现在推荐使用配置ReplicaSet(下一代ReplicationController)的Deployment来建立副本管理机制。

ReplicaSet

ReplicaSet是下一代ReplicationController,两者的唯一区别是ReplicaSet支持新的基于集合的选择器,而ReplicationController仅支持基于相等选择器的需求。

Deployment

Deployment为Pod与ReplicaSet提供了声明式的定义,描述你想要的目标状态是什么,Deployment controller就会帮你将Pod与ReplicaSet的实际状态改变到你想要的目标状态。

Service

一个Service可以看做一组提供相同服务的Pod的对外访问接口。Kubernetes提供两种类型的Service:

  • NodePort: 集群外部可以通过Node IP与Node Port来访问具体某个Pod
  • ClusterIP:指通过集群的内部IP暴露服务,服务只能够在集群内部可以访问,这也是默认的 ServiceType

Label

Label就是一对key/value,可以附加到各种资源对象上,如Node、Pod、Service等,一个资源对象可以定义任意数量的Label。可以通过Label选择器来选择具备某个(些)Label的资源。

PV & PVC

PersistentVolume(PV) 为用户提供了一个存储抽象,由管理员设置,它是集群的一部分。就像节点是集群中的资源一样,PV也是集群中的资源。 PV是Volume之类的卷插件,但具有独立于Pod的生命周期。

PersistentVolumeClaim(PVC)是用户存储的请求。它与Pod相似。Pod消耗节点资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和内存)。PVC可以请求特定大小和访问模式的存储资源(例如,可以以读/写或只读模式挂载)。

Secret

Secret解决了密码、token、密钥等敏感数据的存储问题,Secret的三种类型:

  • Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中
  • Opaque :Base64编码格式的Secret,用来存储密码、密钥等
  • kubernetes.io/dockerconfigjson :用来存储docker registry的认证信息

ConfigMap

ConfigMap用来保存key/value对的配置数据,这个数据可以在Pods里使用,或者被用来为像controller一样的系统组件存储配置数据。ConfigMap可以方便的处理不含敏感信息的字符串(敏感信息可使用Secret)。

Namespace

Namespace类似于Kubernetes中的虚拟集群,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。比如我们如果开发测试共用一个Kubernetes集群,则可以将开发环境的服务部署到dev的namespace,测试环境的部署到test的namespace。

Ingress

为集群服务提供外部访问,包括基于Nginx与Traefik两个版本,为服务提供域名绑定访问与路径路由功能。也可以基于Ingress实现服务的灰度发布。

注:本文转载自blog.csdn.net的liu_weiliang10405的文章"https://blog.csdn.net/liu_weiliang10405/article/details/123854738"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top