理论:kubernetes概述与各组件详解
目录一. kubernetes 是什么二. kubernetes 的特性三. kubernetes 集群架构与组件四. kubernetes 核心概念前言:docker的集群管理工具:swarm 是docker官方的集群管理工具Mesos 管理目前kubernetes 占用当前市场80%以上一. kubernetes 是什么kubernetes 是google在2014年开源的一个容器集群管理系统
前言:
docker的集群管理工具:
swarm 是docker官方的集群管理工具
Mesos 管理
目前kubernetes 占用当前市场80%以上
一. kubernetes 是什么
- kubernetes 是google在2014年开源的一个容器集群管理系统,kubernetes 简称k8s
- k8S用于容器化应用程序的部署,扩展和管理
- k8S提供容器编排,资源调度,弹性伸缩,部署管理,服务发现等一些列功能
- kubernetes目标是让部署容器化应用简单高效
- 官方网站:http://www.kubernetes.io
二. kubernetes 的特性
-
自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。 -
弹性伸缩
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小的成本运行服务 -
自动部署和回滚
K8S采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响服务。 -
服务发现和负载均衡
K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联所有容器,使得用户无需考虑容器IP地址问题 -
机密和配置管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8S中,方便应用程序使用。 -
存储编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS)
三. kubernetes 集群架构与组件
node业务节点组件:(网站,邮件,APP)
- kube-proxy: 在node节点上实现pod的网络代理,维护网络规则和四层的负载均衡工作
(反向代理,访问的唯一的入口,也是必经的出口) - kubelet:kubelet是master在node节点上的代理agent,管理本node运行容器的生命周期
比如创建容器、pod挂载数据卷、下载sercet、获取容器和节点状态等工作,kubelet把每个Pod转换成一组容器。
(接头人)master在node节点的指令代理(master 下达的指令委托kubelet 下发到node) - docker或rockert
容器引擎,运行容器 - pod 是容器的集群,集合(一个pod可以放多个容器,生产环境中一个pod只放一个容器当需要采集日志时,就会多放一个容器,负责采集业务端的日志) 。概念:K8S管理的为pod ,pod 里面装着容器。
pod:contaier在pod里面,k8s管理的最单元为pod
master组件:
注意:master 不能挂掉,master挂掉就相当于失控,想连回来非常难,需要重新写配置,重新连接,远程连接node,把node的配置全删掉,重新申请证书,但是业务还可以访问
- kubectl:k8s的控制命令两种终端,字符界面及图形界面,人为下达的指令
AUTH:身份验证,人为下达的指令需要身份验证 - API Server :集群的统一入口,各组件之间的协调者,以restful api提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后在提交给etcd存储记录
主脑,控制k8s 唯一访问入口,只用它才能写入etcd(API Server挂了整个master就挂掉了) - controller-manager: 处理集群中常规的后台任务,一种资源对应一个控制器,controller-manager就是负责管理这些控制器的控制器,决定创建资源的类型,执行的任务是一次性任务还是周期性任务
类型:有状态类型还是无状态类型,一次性任务还是周期性任务等
无状态化:只管数量,不需要管内容
有状态化:每个节点都有自己的角色,不可以被随意删除
- scheduler:根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同节点上
(调度器,根据调度算法,决定资源创建的位置调度器只负责算,算完后,交给API Server,API server 通过kubelet 下达指令,在node创建pod) - etcd
分布式键值存储系统,用户保存集群状态数据,比如pod、service等对象信息
k8s 的工作原理
以增加一个tomcat容器作为例子:
思路:如果想要创建一个tomcat容器,这时候会由kubectl下达指令,通过auth进行身份验证,如果具备权限就会交给API server,API server会先把一些概要性的信息(我要创建一个什么样的资源)先写入到Etcd中,有一些信息是还没能写进去的比如我要在哪一个node节点上创建资源。这时候API server 会把未知的元素就会找自己的一个小组件 controller-manage决定创建什么类型的资源(有状态,无状态,一次性任务,周期性任务),然后交给scheduler调度器去算哪个节点空缺,决定创建资源的位置。这时候会把这些信息传给 API server,API server 这时候会把信息传给kubelet,kubelet会完成master下达的指令,进行容器的创建。创建完容器后就会知道这个pod 的地址,状态等信息,这些信息会通过kubelet传达给API server,API server 会把信息写在etcd里。当我查看这个容器是否创建成功时就会通过kubectl 先进行身份验证,身份验证完后,具备资格就会把命令传递给API Server,API Server 就会在etcd 取数据,反馈给管理员。
四. kubernetes 核心概念
pod
- 最小部署单元
- 一组容器的集合
- 一个pod中的容器共享网络命名空间
- pod是短暂的(生产环境一般不会使用重启,而是使用重新创建)
controllers
- relicaset: 确保预期的pod副本数量
- deployment: 无状态应用部署,比如nginx、apache,一定程度上的增减不会影响客户体验
- statefulset: 有状态应用部署,是独一无二型的,会影响客户的体验
- daemonset: 确保所有node运行同一个pod,确保pod在统一命名空间
- job: 一次性任务
- cronjob: 定时任务
- 更高层次对象:部署和管理pod
service
- 防止pod失联
- 定义一组pod的访问策略
- 确保了每个pod的独立性和安全性
storage
- volumes
- persistent volumes
pollcies 策略 - resource quotas
other - label:标签,附加到某个资源上,用户关联对象,查询和筛选
- namespaces: 命名空间,将对象从逻辑上隔离
- annotations: 注释
- 探针:探测pod的健康状况
更多推荐
所有评论(0)