Kubernetes的概述与架构

概述

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)
Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

核心组件

Pod

官网描述 :https://kubernetes.io/docs/concepts/workloads/pods/pod/.

A Pod (as in a pod of whales or pea pod) is a group of one or more containers (such as Docker containers), with shared storage/network, and a specification for how to run the containers.

在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。Pod也是Kubenetes操作的最小单位。
同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器。

ReplicaSet

官网描述 :https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/.

A ReplicaSet is defined with fields, including a selector that specifies how to identify Pods it can acquire, a number of replicas indicating how many Pods it should be maintaining, and a pod template specifying the data of new Pods it should create to meet the number of replicas criteria.

ReplicaSet包括一个选择器,该选择器指定如何标识它可以获取的Pod,同时声明期望的Pod数量,然后一个Pod模板指定应创建的新Pod的数据以满足该数量。

Deployment

官网描述 :https://kubernetes.io/docs/concepts/workloads/controllers/deployment/.

A Deployment controller provides declarative updates for Pods and Pods .
You describe a desired state in a Deployment, and the Deployment controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments

Deployment提供了对Pods和Pods维护和监测的功能

Lable

官网描述 :https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/.

Labels are key/value pairs that are attached to objects, such as pods.

一个Label是一个键值对,用于描述Pod,然后可以使用Selectors选择带有特定Label的Pod

Service

官网描述 :https://kubernetes.io/docs/concepts/services-networking/service/.

An abstract way to expose an application running on a set of Pods as a network service. With Kubernetes you don’t need to modify your application to use an unfamiliar service discovery mechanism. Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods, and can load-balance across them.

Service用于描述相同Label的Pod组的一层抽象,Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。具体情况,后面会详细进行讲解

Node

官网描述 :https://kubernetes.io/docs/concepts/architecture/nodes/.

A node is a worker machine in Kubernetes, previously known as a minion. A node may be a VM or physical machine, depending on the cluster. Each node contains the services necessary to run pods and is managed by the master components

一台运行Pod的物理主机称为一个Node

Kubernetes的核心组件图如下:
在这里插入图片描述

架构

了解完Kubernetes的核心组件,接下来我们需要讨论的是在一个集群中,总是需要一些组件去完成一些工作才能让整个集群工作起来。

  • kubectl:操作集群的客户端,也就是和集群打交道的
  • APIServer:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
  • Scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
  • Controller Manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  • Kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  • Kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;
  • DNS:提供DNS服务
  • Dashboard:提供GUI
  • ETCD:保存了整个集群的状态

Kubernetes整体架构如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xzw12138/article/details/108241251