Kubernets基本介绍
Kubernetes是一个容器编排引擎,主要用于容器自动化部署,自动扩容和容器化应用(如docker)的管理。
不同的部署方式
传统方式: 所有的应用程序共用所有的硬件资源。如果某一个应用占用资源比较多的话,另外的应用程序就会减少到占用相同资源的机会。
虚拟部署方式:在同一个机器上部署多个不同的虚拟机,这些虚拟机之间互相不影响资源的占用。每个虚拟机都有一个自己独立的操作系统,所有这种部署方式虚拟机本身对资源的占用就比较多,而且同一个物理机器上能部署的虚拟机数量也是有限的。
容器化部署:所有的容器共享机器本身的操作系统,每个容器本身都有自身的一套文件系统,容器之间互相不影响,这种方式相对于虚拟部署方式就会更轻量。
为什么需要kubernets?
由于容器化部署越来越受到青睐,但是如果手动部署和管理这些容器,容器就会存在宕机事件,这样是不能接受的。同时手动部署也容易出现人为错误,所有kubernetes就出现了,他可以帮我们解决这些问题。
Kubernetes主要能做下面这些事情:
- 服务发现和负载均衡
- 存储编排:允许自动挂载所需的存储系统,如本地储存,公共云提供商等。
- 自动部署和回滚
- 自动完成装箱计算:允许指定每个容器所需的CPU和内存(RAM)
- 自我修复
- 密钥与配置管理:可以存储和管理敏感信息。
kubernetes组件
kubernetes都是以集群方式存在的,一旦部署Kubernets,就部署了一个Kubernets集群。
Kubernetes集群主要有三个部分组成:控制平台组件,节点(Node)组件和插件(Addons)
控制平面组件
组件 | 描述 |
---|---|
kube-apiserver | kubernetes API服务器,是Kubernetes控制平面的前端。 |
etcd | 是kubernetes集群所有数据的后台键值数据库,具有一致性和高可用的特点 |
kube-scheduler | 负责监视新创建的,未指定运行节点(node)的Pods,选择节点让Pod在上面运行 |
kube-controller-manager | 主要负责运行控制器进程。主要包括节点控制器(负责节点出现故障时进行通知和响应),任务控制器(监控代表一次性任务的Job对象,然后创建Pods来运行这些任务),断点控制器(填充断点对象), 服务账户和令牌控制器:为新的命名空间创建默认账号和API访问令牌) |
cloud-controller-manager | 指嵌入特定云的控制管理器 |
Node(节点)组件
节点组件在每个节点上运行,维护运行的Pod并提供Kubernetes运行环境
组件 | 描述 |
---|---|
kubelet | 每个节点上运行的代理。 |
kube-proxy | 集群种每个节点上运行的网络代理,实现kubernetes服务(service)概念的一部分 |
容器运行时(Container Runtime) | 负责运行容器的软件,如Docker, containerd, CRI-O等其他任何实现 |
插件(Addons)
插件使用Kubernetes资源(DamonSet、Deployment等)实现集群功能。插件种命令空间域的资源所有kube-system命令空间)
插件类型 | 描述 |
---|---|
DNS | 集群DNS是一个DNS服务器,和环境中的其他DNS服务器一起工作,它为Kubernetes服务提供DNS记录 |
Web界面(仪表盘) | Dashboard是Kubernetes集群的通用的、基于Web的用户界面 |
容器资源监控 | 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中 |
集群层面日志 | 负责将容器的日志数据保存到一个集中的日志存储中 |
各种资源
kubernetes的资源对象主要分为4类,分别是资源对象,存储对象,策略对象和身份对象,如下
类别 | 名称 |
---|---|
资源对象 | Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling、Node、Namespace、Service、Ingress、Label、CustomResourceDefinition |
存储对象 | Volume、PersistentVolume、Secret、ConfigMap |
策略对象 | SecurityContext、ResourceQuota、LimitRange |
身份对象 | ServiceAccount、Role、ClusterRole |
每个kubernetes资源对象包含两个嵌套的对象字段:对象spec和对象status。其中spec描述对象的期望状态,status描述了对象的实际状态,由kubernetes系统提供和更新。
命令行工具
kubernetes提供了4个常用的命令行工具:kubectl、kind、minikube和kubeadm
工具 | 介绍 |
---|---|
kubectl | 可以对Kubernetes集群运行命令,主要可以做部署应用、监控和管理集群资源以及查看日志 |
kind | 使用该工具可以让你在本地计算机运行Kubernetes |
minikube | 与kind类似,能让你在本地运行kubernetes |
kubeadm | 可以用来创建和管理Kubernetes集群 |