Kubernetes条记(二):领会k8s的基本组件与观点

前文 Kubernetes条记(一):十分钟部署一套K8s环境 先容了若何快速搭建一个k8s系统。为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与观点有个领会。

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条记(二):领会k8s的基本组件与观点

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条记(二):领会k8s的基本组件与观点

Kubernetes基本观点

我们再来看第二张图

Kubernetes条记(二):领会k8s的基本组件与观点

功效组件在上面已经做了先容。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类型包罗:

聊聊算法——BFS和DFS

  • 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实现服务的灰度公布。

总结

本文对Kubernetes中涉及的基本组件与观点举行了整理,对其基本组成有了一个大致的明白与印象。下一篇将从一个实践出发,实现一个基于Gitlab+Jenkins+K8s的CI/CD流程,以对涉及的各个组件举行深入领会与学习。

相关阅读:

作者:雨歌
迎接关注作者微信民众号:半路雨歌,一起学习发展

Kubernetes条记(二):领会k8s的基本组件与观点

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/7844.html