Kubernets介绍

发布于:2022-11-29 ⋅ 阅读:(277) ⋅ 点赞:(0)

Kubernets介绍

概述:

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

概述 | Kubernetes

目录

Kubernets介绍... 1

概述:... 1

一、     K8s功能:... 4

1.     自动装箱... 4

2.     自我修复(自愈能力). 4

3.     水平扩展... 4

4.     服务发现... 4

5.     滚动更新... 4

6.     版本回退... 4

7.     密钥和配置管理... 5

8.     存储编排... 5

9.     批处理... 5

二、     k8s组件:... 5

1.      Master: 6

1)  kube-apiserver 6

2)  ETCD.. 6

3)  kube-controller-manager 7

4)  cloud-controller-manager 7

5)  kube-scheduler 7

2.      Node( Worker): 7

1)  kubelet 8

2)  kube-proxy. 8

3)  docker 8

4)  RKT.. 8

5)  supervisord. 8

6)  fluentd. 8

三、     K8S资源名词解释... 8

1.     Node. 8

2.     Namespace. 9

3.     Pods. 9

4.     Labels. 9

5.     Services. 10

6.     Volumes. 10

7.     PV/PVC/StorageClass. 10

8.     Replication Controller. 10

9.     Deployment. 10

10.      StatefulSet. 11

11.      DaemonSet. 11

12.      Service Account. 11

13.      ConfigMap. 11

14.      Secret. 11

15.      Ingress. 11

16.      Job. 12

17.      CronJob. 12

18.      Security Context和PSP. 12

19.      Resource Quotas. 12

20.      Network Policy. 13

21.      PodPreset. 13

四、     K8s常用的命令解释... 13


  1. 自动装箱

基于容器对应用运行环境的资源配置要求自动部署应用容器

  1. 自我修复(自愈能力)

当容器失败时,会对容器进行重启 当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度 当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

  1. 水平扩展

通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁

  1. 服务发现

用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡

  1. 滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

  1. 版本回退

可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

  1. 密钥和配置管理

在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

  1. 存储编排

自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

  1. 批处理

提供一次性任务,定时任务;满足批量数据处理和分析的场

 

  1. Master:

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求; Master 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。

  1. kube-apiserver

kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。

  1. ETCD

etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

  1. kube-controller-manager

kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。

这些控制器包括:

  • 节点(Node)控制器
  • 副本(Replication)控制器:负责维护系统中每个副本中的pod。
  • 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
  • Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。
  1. cloud-controller-manager

云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是Kubernetes版本1.6中引入的,目前还是Alpha的功能。

云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将--cloud-provider flag设置为external启动kube-controller-manager ,来禁用控制器循环。

cloud-controller-manager 具体功能:

  • 节点(Node)控制器
  • 路由(Route)控制器
  • Service控制器
  • 卷(Volume)控制器
  1. kube-scheduler

kube-scheduler 监视新创建没有分配到NodePod,为Pod选择一个Node

  1. Node Worker:

k8s集群工作节点,运行用户业务应用容器; 包含 kubelet、kube proxy 和 ContainerRuntime。

  1. kubelet

kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:

  • 安装Pod所需的volume。
  • 下载Pod的Secrets。
  • Pod中运行的 docker(或experimentally,rkt)容器。
  • 定期执行容器健康检查。
  • Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
  • Reports the status of the node back to the rest of the system.
  1. kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

  1. docker

docker用于运行容器。

  1. RKT

rkt运行容器,作为docker工具的替代方案。

  1. supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。

  1. fluentd

fluentd是一个守护进程,可提供cluster-level logging.。

Kubernetes 组件 | Kubernetes

  1. Node

Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。

  1. Namespace

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。

Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。

  1. Pods

在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元,一个pod包含一个或多个容器。

  1. Labels

标签其实就一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的(就是一眼就看出了这个Pod是那个数据库),但是标签对内核系统是没有直接意义的。标签可以用来划分特定组的对象(比如,所有女的),标签可以在创建一个对象的时候直接给与,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的

  1. Services

Kubernete Service 是一个定义了一组Pod的策略的抽象,我们也有时候叫做宏观服务。

  1. Volumes

拥有明确的生命周期的是一个目录。

  1. PV/PVC/StorageClass

PersistentVolumePV)是集群中已由管理员配置的一段网络存储。

PersistentVolumeClaimPVC)是用户存储的请求。

StorageClass为管理员提供了一种描述他们提供的存储的的方法。

  1. Replication Controller

Replication Controller 保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,Replication Controller就杀死几个,如果太少了,Replication Controller会新建几个,和直接创建的pod不同的是,Replication Controller会替换掉那些删除的或者被终止的pod,不管删除的原因是什么(维护阿,更新啊,Replication Controller都不关心)

  1. Deployment

DeploymentPodReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。

  1. StatefulSet

StatefulSet是为了解决有状态服务的问题(对应DeploymentsReplicaSets是为无状态服务而设计)

  1. DaemonSet

DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。

  1. Service Account

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的权限控制机制。

  1. ConfigMap

ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMapsecret很类似,但它可以更方便地处理不包含敏感信息的字符串。

  1. Secret

Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

  1. Ingress

Ingress可以给service提供集群外部访问的URL、负载均衡、SSL终止、HTTP路由等。为了配置这些Ingress规则,集群管理员需要部署一个Ingress controller,它监听Ingressservice的变化,并根据规则配置负载均衡并提供访问入口。

  1. Job

Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

  1. CronJob

CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。在Kubernetes 1.5,使用CronJob需要开启batch/v2alpha1 API,即–runtime-config=batch/v2alpha1

  1. Security Context和PSP

Security Context的目的是限制不可信容器的行为,保护系统和其他容器不受其影响。

Pod Security Policies(PSP)是集群级的Pod安全策略,自动为集群内的Pod和Volume设置Security Context。

使用PSP需要API Server开启extensions/v1beta1/podsecuritypolicy,并且配置PodSecurityPolicyadmission控制器。

  1. Resource Quotas

资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。

  1. Network Policy

Network Policy提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。

  1. PodPreset

PodPreset用来给指定标签的Pod注入额外的信息,如环境变量、存储卷等。这样,Pod模板就不需要为每个Pod都显式设置重复的信息。

kubectl


网站公告

今日签到

点亮在社区的每一天
去签到