【kubernetes】【基础】基础知识

举报
huahua.Dr 发表于 2021/06/16 17:39:04 2021/06/16
【摘要】 Kubernetes(k8s)是什么容器是打包和运行应用程序的最好方式。kubernetes是一个提供了基于容器的应用集群管理平台或解决方案,kubernetes为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩灯一系列完整的方案。kubernetes的设计理念是:用户定义要部署的应用程序的规则(通过yaml文件),而Kubernetes则负责按照用户定义的规则去部署并运行应用程序。

Kubernetes(k8s)是什么

  • 容器是打包和运行应用程序的最好方式。

  • kubernetes是一个提供了基于容器的应用集群管理平台或解决方案,kubernetes为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩灯一系列完整的方案。

  • kubernetes的设计理念是:用户定义要部署的应用程序的规则(通过yaml文件),而Kubernetes则负责按照用户定义的规则去部署并运行应用程序。

  • 用户通过使用kubernetes API对象来描述应用程序规则,包括pod,Service,Volume,namespace,ReplicaSet,Deployment,Job等等资源对象的规则定义,这些资源规则定义需要写入一系列的yaml文件中,然后通过kubernetes命令行工具kubectl调用kubernetesAPI进行部署和运行。

K8s整体架构图

k8s组件介绍

  • 控制平面组件/master:负责控制集群的一个主要节点,集群的控制中心

   主节点包含四个关键组件,3个核心组件+1个数据库组件:

  • API Server

    提供操作的REST接口,是所有k8s资源对象增删改查的唯一入口。

  • controller manager(控制器管理器)

    所有资源的控制中心。

  • scheduler(调度器)

    负责pod的调度。

  • Etcd

    一个分布式高可用、强一致性的key/value存储,保存所有资源的信息和状态

  • Node组件:负责运行容器的节点

   node节点包含组件有:

  • Kubelet

   节点的管理员,负责创建、删除、更新节点上的资源;如管控docker容器,  docker启动/停止、监控docker运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的http请求,汇报pod的运行状态。

  • Kube-proxy

   负责为pod提供通信和负载均衡,它会定期从etcd获取所有的service,并根据service信息创建代理,当某个客户pod要访问其他pod的时候,访问请求会经过本机proxy做转发。

  • 上面四个组件的工作流程(以系统缺少一个pod资源事件为例):
  1. Controller Manager控制中心通过API Server查询到etcd数据库中的pod资源缺少了一个pod;
  2. Controller Manager控制中心又通过API Server告诉Scheduler,让其创建一个pod资源;
  3. Scheduler接收到需求后,通过API Server实现pod的资源调度
  4. Scheeduler调度完并把调度信息的pod资源信息状态写到etcd数据库

说明:kubectl为客户端命令行工具,用来管理k8s集群,需要单独安装。

k8s主要资源对象

  • 资源类:node、pod、replicaSet、deployment、statefulset、daemonset、PV/PVC
  • 服务类:service、ingress
  • 配置类:configmap、secret

 

K8s基本概念简介

  • Node

对应的虚拟机VM或物理机,一个Node节点就是一台虚拟机VM或物理机,是容器运行的载体,多个Node节点组成一个集群;安装有控制平面组件的节点就称之为master节点:集群的控制中心。

  • Pod

是k8s能够创建、调度和管理的最小部署单位,一个pod可以包含多个容器(如docker),是一个容器的集合。Pod寄存于Node之上,一个Node可以存在多个pod,它们相互协作完成一个应用功能。

  • Service
    • service表示同类型的pod(提供相同服务的pod),每个pod都可以独立完成某一项任务,service跟微服务类似,service对外提供服务,具体是由那个pod完成的,这由service进行调度,这就达到了负载均衡的目的。
    • service最主要的作用就是保证pod的动态变化对访问端透明,访问端只需知道service的地址,由service来提供代理。达到了前端与后端pods的解耦作用。
    • service支持TCP和UDP协议,默认是TCP协议
  • Labels

service是k8s抽象出来的表示逻辑相同的pod,那么service是根据什么来划分pod的呢,答案就是labels,在yaml中给每个pod标记labels标签,label的selector选择器就会根据相同的标签名(键值对)来划分service了。

  • Selector

一个yaml文件里面pod可以定义多个labels标签值,在定义service的时候,可以使用selector选择器指定那个label标签,以便于划分service。

  • RC(Replication Controller)

在创建pod的时候,怎么去创建指定种类和数量的pod呢,答案是通过RC文件,RC的功能完全可以使用Deployments完成。在yaml中通过replicas指定pod数量和selector选择service类别

  • RS(ReplicaSets)

ReplicaSets是一个副本控制器,用于确保在yaml中配置replica数量的pod在运行,与Deployments配合使用,主要用于解决pod的扩容和缩容的问题,如果超过replica数量的pod会杀死一些pod,如果少了会启动一些。通常用于无状态的应用。

  • Deployments

主要用于更新pod和ReplicaSet,支持上线部署,回滚升级Reployments版本,暂停恢复上线任务等功能。通常用于无状态的应用。

  • StatefulSets

与RS或Deployments相对的,StatefulSets适用于有状态的应用;RS或Deployment管理的pod之间是没什么区别的,可以随时创建一个新的pod来代替;而StatefulSets则是不一样,其创建的每个pod都有一个唯一标识(pod标识和网络标识)和自己的存储地方,如果有其中一个pod crash了,statefulSets会创建一个具有相同标识的pod,并使用原来的存储。

  • DaemonSet

DaemonSet 是这样一种资源pod(守护进程),它在集群的每个节点上运行一个 Pod,且保证只有一个 Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行,且不需要太多实例。一个比较好的例子就是 Kubernetes 的 kube-proxy。DaemonSet是跟随节点label的创建而创建,消失而消失。

  • Job/CronJob

前面RS和Deployments部署的pod是长时间运行的,而job拉起来的pod是一种任务,做完就结束停止pod;Job可以设置一个任务执行多少次并且同时执行多少格任务,通过设置 completions 和 parallelism 两个参数即可。同时支持扩容replicas。

另外一种任务CronJob支持定时任务,也就是指定时间去创建pod来执行任务。

  • Ingress

ingress为外部访问集群的一种方式,有NodePort和LoadBalance提供给外部访问了为什么还需要Ingress呢,第一个原因:每个LoadBalance都需要一个公网IP,而Ingress不需要,一个Ingress通过host和path映射到多个service;第二个原因是Ingress是基于HTTP实现的,可以提供基于Cookie的会话亲和特性,Service基于TCP无法做到。

  • configMap

用于pod环境的应用配置,通过configMap可以让不同环境有不同的配置,configMap是一组key-value键值对,可以做到使用相同pod描述文件的两个pod(一个生产环境一个开发环境)使用不同的配置。

  • PV/PVC

PV/PVC(PersistentVolume/Claim)是k8s用于持久化存储的。volume将本地目录或网络存储挂载给pod中的容器使用,生命周期与pod保持一致,不能持久化,而使用PV可以做到持久化存储,使用PV绑定volume,然后再声明pvc关联pv即可实现持久化存储,pvc屏蔽了持久化存储的一个复杂过程,只需要使用pvc声明存储资源即可。

  • Secret

secret是专门设计用来保存密码、私钥等敏感信息的。

Secret 与 ConfigMap 很像,都是 key-value 的键值对,对 Secret,可以

  • 通过环境变量传递给容器
  • 通过 Volume 以文件形式挂载到容器中

Kubernetes 确保 Secret 仅分发到运行需要访问 Secret 的 pod 的节点,以此保证 Secret 安全,而且在普通节点上,Secret 仅仅会存储在内存中,在 Master 节点上,Secret 会加密保存(在 ETCD 中).

  • PodIP

每个pod拥有的IP

  • ClusterIP

每一个Service的IP地址

  • NodeIP

物理机或虚拟机实际的物理IP地址

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。