prometheus的alertmanager监控报警 firing:表示告警项已经触发了发送配置(邮件, 短息,电话,钉钉告警)需要声明一个邮箱地址。配置是以configmap进行部署。pending:告警的阀值已经触发,正在等待发送邮件。alert是一个单独的模块,需要我们单独的配置。但是kube-proxy断开了,要做一个小的修改。给alertment配置service,提供访问。inactive:表示已经激活的告警指标。先进入pending状态。再变成firing状态。
prometheus 容器化部署 创建一个账号,来管理Prometheus,搜集集群信息。prometheus pod 创建一个 service。如果要更新 prometheus-config这个。配置Prometheus的configmap。不要直接delete。线上环境一定要热更新。设置两个监控,一个是node,一个是容器。prometheus的容器化部署。创建node-exporter。node-export 装好了。做一个压力测试,监控情况。创建prometheus。如果出现时间不同步的时候。进入容器,开始压力测试。
procmethues 二进制安装 七,pushgateway:类似于一个中转站,server端只会使用pull拉取数据,节点的数据只能以上传的方式(push)发送,先把数据保存在pushgateway,prometheus server统一从pushgateway拉取数据。二,exports负责在节点收集数据,node-exports服务收集服务器节点的状态数据,CPU,内存,网络,磁盘等等都是他收集。不在于数据的持久化,只关注最近的需要查询的数据。2,是时间序列的数据,按照时间的顺序记录系统,设备变化的数据,容器化数据。
k8s 安全机制 服务端收到加密字符串,节目,获取用户名和密码,验证通过,登录成功。k8s中的组件通过启动时自动访问不同的kube config,可以分为不同的集群-----api server----namespace-----资源对象----pod-----容器。客户端发起请求----(请求包含)token----apiserver(用户名存储文件)-----解码------用户名-----访问集群。------------------- 实践:创建一个用户只能管理指定的命名空间 -------------------
k8s的图形化工具---rancher 都是为了容器的调度和编排系统,但是rancher不仅能调度,还能管理k8s集群,自动监控(普罗米修斯)。你哪怕不知道k8s是什么,一样轻松的部署 容器到k8s的集群中。在master01、node01、node02上下载rancher监控端。racher是一个开源的企业级多集群的k8s关联平台。在k8s4主机上部署rancher的服务端。k8s的图形化工具---rancher。在k8s5---部署rancher服务。rancher部署的结构。创建deployment。声明式:yaml文件。
HPA 自动伸缩 通过跟踪分析副本和deployment的pod的负载变化,针对性的调整目标pod的副本数。lucky-cloud项目----部署再test1的命名空间,如果lucky-cloud不做限制,或者命名空间不做限制,他依然会占满所有集群资源。如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。阀值:正常情况下,pod的副本数,以及到达阀值之后,pod的扩容做的数量。pod的资源限制,一般是我们创建的时候就声明好的,生产中是必加选项。自动扩缩容的的机制,扩的快,缩的慢,快的话系统容易崩溃。
helm 一键部署 什么是helm,再没有整个helm之前,deplyment service ingress helm的作用就是通过打包的方式, 把deployment,service ingress 这些打包在一块,一键部署服务。--dry-run --debug:这个chart不会部署到集群当中,参数验证,测试chart的配置是否正确。Chart.yaml:helm chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等。Repostory:仓库,提供一个服务器,服务器中包含chart的资源。
ingress 现在执行这个yaml文件, 会生成一 个service,在ingress-nginx这个命名空间生成一 个service .所有的controller的请求都会从这个定义的service的nodeport的端口, 把请求转发到自定义的service的pod .每个节点都有controller----接受到解析后的请求ip+端口----ingress---service----pod。1,集群内部:不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制。
配置资源管理 configmap的1.2引入的功能,应用程序会从配置文件,免密参数,以及环境变量中读取配置信息 configmap在创建容器中,给他主任我们需要的配置信息。configMap的热更新:热更新可以直接反映到容器的内部,也不会触发pod的更新机制。generic:是secret的默认模式,Opaque base64加密编码的secret,用户自定义的密码,密钥等等。2,config的热更新,在pod运行的情况下,对config的配置信息进行修改。把加密的信息传到指定容器的指定目录当中去,在容器中不是加密的。
pod 控制器 statefulSet:有状态的应用,pod的名称的有序的,所有的pod都是独立的。statefulset是有序的,pod的名称是固定的。3,statefulSet:控制器的一种,管理有状态的应用,可以可以设置副本数,可以扩缩容。pod的序号的固定的,重启之后,pod的名称也不会发生变化。maxUnavailable: 25%在升级的过程中,新的pod启动好后,销毁的就的pod的数量不能超过pod的25%pod控制器:工作负载,workload,用于管理pod的中间层,确保pod资源符号预期的状态。
k8s 存储卷和pvc,pv 1,provisioing(配置)----pvc请求request----检索(找一个合适的pv)---pvc和pv(binding 绑定)----使用-----pod被删除------pv的releasing(释放)----recycling(回收)pod内的挂载点声明一个请求pvc请求,pvc会找一个最合适的pv来作为pod的存储卷,pv和关系目录在一一映射,最终由nfs来提供最终的关系存储空间。2,hostPath:将容器内的挂载点,和节点上的目录进行挂载,hostPath可以失效数据的持久。
k8s的集群调度 test1一般是节点标签,表示希望把pod调度到包含有app标签的pod,值为nginx的在test1的拓扑域上的节点。2,podfitshost:pod适应主机,如果pod指定了node的name,nginx1pod---->node01,检测主机名是否存在,存在要和pod指定的名称匹配。查找指定node节点上的标签是否存在,存在的标签是否匹配。有的节点还是在源节点上。旨定key的值,指标节点的标签值,但是不指定污点的类型,那么所有节点上只要包含了这个指定的标签名,可以容忍含有标签的所有的污点。
pod 基础 3 就绪探针,pod的状态是runing ready状态是notready,容器不可以提供正常的业务访问,就绪探针不会重启容器。3,退出时,可以执行自定义命令,删除或者生成一下必要的程序,自定义销毁方式以及自动会场的方式,以及容器的退出等待时间。6,就绪探针,如果不影响容器运行,status:running,这个时候不会重启,但是容器退出的话,就绪探针也会重启。5,在pod的生命周期当中,后续的条件是满足哪个探针的条件,触发哪个探针的条件。2,再度探针的优先级是最高的,只有启动探针成功,后续的探针才会执行。
pod 基础 2 3,tcpSocket:端口,对指定端口上的容器的IP地址进行的tcp检查(三次握手),端口打开认为 探测成功。检查特点容器的打开济安泰状态。1,存活探针:livenessProbe 探测容器是否正常运行,如果发现探测失败,会杀容器,容器会根据重启策略来决定是否重启,不是杀掉pod。httpGet:对web容器发起一次get请求,可以添加path,指定访问的资源。只是在容器的启动后开始检测,容器内的应用是否启动成功。pod可以有多个容器,只要有一个容器退出,整个pod都会重启,pod内的所有容器都会重启。
k8s pod基础 1 1,pod内部有一组容器,挂了一个,整个pod也不会失效。1,在pod的启动过程中,每一个初始化容器,容器按照初始化容器先启动,每个容器必须在下一个容器启动之前,要成功退出。2,running:运行中,pod已经被分配到了node节点,pod内部定义容器都已经启动,运行状态正常,稳定。2,pod内的容器共享ip,共享volume挂载卷,解决了容器内网络通信的问题,解决了容器内部文件共享的问题。自主式pod:pod不会自我修复,如果pod内容器的进程终止,被删除,缺少资源被驱逐,这个pod没有办法自愈。
声明式管理方法 灰布发布(重点)基于deployment的滚动发布,使用了一个机制 pause。apply -f:既可以创建资源对象也可以更新资源对象。不论是args和commmand都会覆盖CMD和ENTYRPOINT容器的标准输出。3,编辑好的yaml文件,还是要依靠陈述式命令发布到k8s集群当中。2,声明式管理依赖于yaml文件,所有的内容都在yamI文件当中。args可以理解docker中的CMD,给commnad传参。delete -f:删除yaml文件中声明的资源对象。2,可以根据已有的yaml文件进行修改。
k8s 陈述式资源管理 确定无问题之后,在把剩下的老版本,升级成新的版本,把暂停取消,继续发布。ClusterIP:创建service的默认类型,通过一个集群内部的虚拟ip地址,这是service的默认类型,通过这个虚拟ip可以服务pod的资源,无法对外提供访问。如果是基于deployment方式创建的pod,或者是daemonset方式创建的pod,是由控制器创建的pod。在发布升级的过程中,只有一部分集群在对外提供服务,可能会使集群的负载能力下降,响应变慢,需要注意给集群增加负载能力(一般来说没什么特殊需要。
kubeadm 快速搭建 所有节点上传 flannel 镜像 flannel.tar 和网络插件 cni-plugins-linux-amd64-v0.8.6.tgz 到 /opt 目录,协调这个命名空间里面的资源。--service-cidr=10.96.0.0/16 \ 所有sevice的对外代理地址都是10.96.0.0/16。--apiserver-advertise-addres : 声明master节 点的apisever的监听地址。--token-ttI=0 默认的token的有效期,默认是24小时,示永不过期。
k8s 网络 ----------------------------- 部署 Dashboard ------------------------------------------------------------ 负载均衡部署 ------------------------------cni是一个标准接口,用于容器运行时调用网络插件,配置容器网络,负责设置容器的网络命名空间,IP地址,路由等等参数。每一个pod都有一个全局的真实的IP地址,同一个node之间的不同的pod可以直接使用对方的IP地址进行通信。
k8s的二进制部署1 RBAC授权,生成和赋权用户kubelet-bootstrap,发起node节点的请求认证,通过CSR加密认证实现NODEk节加入到集群当中。------------------------------ 部署 Master 组件 ------------------------------定义连接到哪个k8s集群,以及使用哪个用户的身份来进行操作,上下文包含 了集群,户,和可选命名空间的信息。ca-config.ison 证书颁发机构的配置文件,打印了证书生成的策略,默认的过期时间和模板。