什么是K8S:
K8S(Kubernetes) 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
K8S可以做什么?
容器是打包和运行应用程序的好方式。在生产环境中,你需要管理运行应用程序的容器,并确保不会停机。 例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易? 这就是 Kubernetes 来解决这些问题的方法! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。
服务发现和负载均衡
K8S可以使用DNS和自己ip地址公开容器,如果进入容器的流量很大,k8s可以负载均衡并分配网络流量,从而使部署稳定
自动部署和回滚
K8S描述已经部署容器的所需状态,他可以以受控的速率将实际状态更改为期望状态,例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
自动完成装箱计算
K8S允许你指定的每个容器所需CPU和内存。当容器指定了资源请求时,k8S可以作出更好地决策来管理容器的资源
自我修复
k8s重新启动失败的容器,替换容器,杀死不响应用户定义的运行状况检查的容器,并在准备好服务之前将其通告给客户端
秘钥与配置管理
允许存储和管理敏感信息,例如密码,令牌,私钥。你可以在不重建容器镜像的情况下部署和更新秘钥,和应用程序配置,也无需在堆栈配置中暴露秘钥。
K8s系统架构
k8s分为2种节点:
- MASTER 控制节点,主节点(具有指挥权)
- Node工作节点
Master节点组成
- Etcd:K8s集群的数据库,所有持久化的状态信息存储在Etcd中
- API Servcie:提供K8s Api接口,主要处理Rest操作以及更新Etcd中的对象,是所有资源增删改查的唯一入口。
- Scheduler: 资源调度器,根据etcd的节点资源决定Pod绑定到哪个Node上
- Controller Manager,负责保障pod的健康存在,资源对象的自动化控制中心,Kubernetes集群有很多控制器
- API相当于命令,沟通API server
Node节点的组成
- Docker Engine:负责节点容器的管理工作,最终创建出来的是一个Docker容器
- Kubelet:安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理
- kube-proxy:安装在Node上的网络代理服务,提供网络代理以及负载均衡
K8S逻辑架构
从逻辑架构上看,K8s分为Pod、Controller、Service
POD
- POD是k8s的最小单位
- POD的IP地址是随机的,删除POD会改变IP
- POD都有一个根容器
- 一个POD内可以由一个或多个容器组成
- 一个POD内的容器共享根容器的网络命名空间
- 一个POD内的网络地址由根容器提供
Controller
用来管理POD。控制器的种类有很多:
- RC Replication Controller;控制POD有多个副本
- RS ReplicaSet:RC控制的升级版
- Deployment:推荐使用,功能更强大,包含了RS控制器
- DaemonSet:保证所有的Node上有且只有一个Pod在运行
- StatefulSet:有状态的应用,为Pod提供唯一的表示,他可以保证部署和scale的顺序