容器云平台巡检实战:运维进阶技巧与策略

1 docker容器日常巡检

通过以下方式进行检查:

1.1 docker/podman ps查看容器状态

Docker/podman ps -a 查看容器状态STATUS:

图片

Exited(0):表示容器正常退出

Exited(其他数字):容器异常退出,需要通过log 查看原因

Up:容器在运行状态

Up(Paused):容器暂停

Up(healthy):容器监听健康

Up(unhealthy):容器监听异常

1.2 健康检查—HealthCheck

一些参数需要docker 17.05以上支持

1.2.1 通过docker run或者dockerfile添加健康检查

例如:

docker run --name=nginx --health-cmd="curl --silent --fail localhost/ || exit 1" --health-inter-val=30s --health-retries=3 --health-timeout=10s --start-period=60s nginx:latest

--interval:两次健康检查的间隔,默认为 30 秒

--timeout: 健康检查超时时间,,默认 30 秒

--retries: 连续失败次数,默认 3 次。

--start-period: 启动的初始化时间,默认 0 秒

--health-cmd: shell和exec 格式,取命令的返回值结果

0表示成功,1表示失败

图片

STATUS, healthy表示健康

unhealthy表示不健康

reserved保留值,不适用

1.2.2 输出健康检查状态

docker/podman inspect --format '{{json .State.Health}}' 容器名| python -m json.tool

图片

输出healthy表示健康,用户可以编写脚本监控容器状态做报警

1.3 docker stats查看容器状态

图片

可以通过docker stats查看容器的cpu, 内存,网络,IO的使用情况

1.4 通过第三方工具监听容器

这里主要介绍prometheus+grafana+cadvisor

1.4.1 prometheus介绍

prometheus通过node-exporter收集node主机的信息

图片

可以看到up状态和unhealthy状态的node节点主机

Unhealthy表示node节点node-exporter异常

Prometheus是一款强大的第三方工具,除了docker容器监控,还支持mysq,数据仓库,Hadoop,k8s 等开源系统

1.4.2 cadvisor介绍

Google的开源cadvisor,帮助收集,监听容器的status和数据,主要是CPU, 内存,FS,网络等usage

图片

1.4.3 grafana介绍

Grafana作为展示prometheus和cadvisor的数据,也可以实现自定义规则报警。(可以去grafana官网搜寻需要监控的模板)

图片

可以通过dashboard展示node主机上的所有容器

通过panel,metrics自定义需要收集的容器数据

图片

通过自定义规则统计需要收集的容器数据,也可以统计宕机状态的容器

Grafana支持自定义报警功能

图片

如果是大量的容器监控报警,建议使用alertmanager做报警

1.5 docker容器日志检查

Docker的日志分为两类,一类是 Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志。容器日志可以理解是运行在容器内部的应用输出的日志。

默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出) 和 STDERR(标准错误输出)。日志都会以 json-file的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log

CRIO的日志,存放在/var/log/containers/

通过docker/podman logs命令查看容器的日志

图片

查看最近1小时日志

docker/podman logs --since 60m容器名

查看某时间段日志

docker/podman logs -t --since="" --until "" 容器名

建议:docker/podman run时候,日志文件-v到宿主机上,

docker/podman run -d --name xxx -v /opt/log:/log xxx:latest

通过elk去抓取宿主机上的日志,尽量不要通过docker logs去检查容器日志。

除了docker容器,本文也向大家介绍kubernetes的日常巡检。

2 Kubernetes/OpenShift日常巡检

Kubernetes集群主要通过kubectl命令行进行运维,OpenShift中使用oc命令行进行运维。两个命令行的参是相同的(OpenShift集群也提供kubectl命令行,但建议使用oc命令行)。

2.1 检查master

主要通过以下命令检查。

2.1.1 kubectl/oc 检查master状态

kubectl/oc get cs

图片

通过以上方法,查看kube-scheduler,  kube-controller-manager,  etcd是否正常。在上图status列,Healthy表示健康,unhealthy表示有问题需要更详细的信息,可以使用kubectl/oc describe cs,输出更详细的信息。

图片

systemctl status calico.service

检查calico网络是否正常

systemctl status kube-apiserver.service

检查kube-apiserver 是否都是active状态

Active: active (running)

如果状态不正常,需要systemctl restart kube-apiserver

如果起不来,需要journalctl -xe查日志看下具体问题

2.1.2 kubectl/oc logs 检查master日志

kubectl/oc logs --tail 100 -f kube-apiserver -n kube-system

kubectl/oc logs --tail 100 -f kube-controllers -n kube-system

kubectl/oc logs --tail 100 -f kube-scheduler -n kube-system

kubectl/oc logs --tail 100 -f coredns -n kube-system

检查master服务日志是否正常

kubectl/oc logs --tail 100 -f calico-kube-controllers -n kube-system

检查calico是否正常

以下是node巡检

2.2 检查node

2.2.1 kubectl/oc检查node状态

kubectl/oc get node -n namespace

查看Node节点状态, STATUS Ready表示正常,NotReady不正常

图片

注意version必须保持一致

如有NotReady问题,需要重启节点kubectl/oc,或者重启docker

如不能解决,需要reset节点后,k8s重新join该node(注意先执行kubectl/oc drain node --delete-lo-cal-data 驱离node)

systemctl status kubelet.service

systemctl status kube-proxy.service

检查状态是否是Active: active (running)

如果不正常,需要systemctl restart

如果起不来,需要journalctl -xe查日志看下具体问题

2.2.2 kubectl/oc logs检查node日志

kubectl/oc logs --tail 100 -f kube-proxy -n kube-system

kubectl/oc logs --tail 100 -f kebelet -n kube-system

检查node服务日志是否正常

kubectl/oc logs --tail 100 -f calico-node -n kube-system

检查calico节点是否正常

2.3 检查service

kubectl/oc get svc -o wide

图片

查看k8s集群service信息

kubectl/oc get svc --all-namespaces -o wide

查看k8s所有service信息

图片

TYPE是NodePort的service, k8s集群外部可以通过port访问

Service的TYPE包括 NodePort, ClusterIP, Loadbalance和ExternalName

以下是pod巡检

2.4 检查pod

2.4.1 kubectl/oc检查pod状态

kubectl/oc get pods -n namespace -o wide

图片

查看STATUS状态是否正常

以下是status list:

Running,Succeeded,Waiting,ContainerCreating,Failed,Pending,Terminating,unknown,CrashLoopBackOff,ErrImagePull,ImagePullBackOff

status定义说明:

图片

如出现异常状态,可查看pod日志内容

kubectl/oc describe pod 容器名 -n namespace

查看Conditions状态

图片

True 表示成功,False表示失败

Initialized pod 容器初始化完毕

Ready pod 可正常提供服务

ContainersReady 容器可正常提供服务

PodScheduled pod 正在调度中,有合适的节点就会绑定,并更新到etcd

Unschedulable pod 不能调度,没有找到合适的节点

如有False状态显示

查看Events信息

图片

Reason显示Unhealthy异常,仔细查看后面的报错信息,有针对性修复

kubectl/oc get pods -n namespace -o wide

查看RESTARTS的次数是否为0

如果不是0,说明pod重启过,需要去日志检查原因

2.4.2 kubectl/oc logs 检查pod日志

kubectl/oc logs --tail 100 -f pod -n namespace

检查日志中有无异常

或者进入日志目录 /var/log/pods,找到容器id-json.log日志文件

也可以检查日志有无异常

2.5 pod health健康检测

针对pod容器增加health check健康检测,pod.yaml中增加以下参数

图片

livenessProbe是检测容器是否存活,running状态,如果不健康kubelet会kill pod,根据重启策略RestartPolicy执行重启pod。

ReadinessProbe判断容器是否处于Ready状态,ready状态表示pod可以接受请求,如果不健康,从service的后端endpoint列表中把pod驱离出去。

initialDelaySeconds 120表示pod初始化启动之后延迟120秒再开始检测等待pod内应用启动时间

timeoutSeconds表示超时时间

periodSeconds表示轮询时间

scheme连接使用的schema,默认HTTP,也支持TCP

successThreshold探测失败后,最少连续探测成功多少次被认定为成功。默认是1。对于liveness必须是1,最小值是1。

failureThreshold:探测成功后,最少连续探测失败多少次被认定为失败。默认是3,最小值是1。

超过failureThreshold的次数,pod重启多次后,pod STATUS状态会变更为不健康

2.6 通过dashborad检查

K8s支持dashboard管理方式

通过kubernetes-dashboard.yaml配置dashboard

图片

通过firefox浏览器访问,https://k8sip:30443/#!/login

图片

通过令牌方式访问,令牌查找方式,在master执行以下

kubectl/oc describe secret admin-token-xxxx -n kube-system

进入dashboard后,可以查看k8s所有资源状况

图片

选择节点,可以查看node状态

图片

可以查看node节点是否就绪状态,节点的CPU,内存资源使用状况

图片

选择容器组,可以查看pod的状态信息

图片

可以看到pod容器的状态

Dashboard也可以查看deployment,stateful, service,VP的状态信息

Dashboard的权限很高,可以创建容器,容器组,可以删除容器和容器组;

可以伸缩部署和副本集;可以创建,删除secret

2.7 通过kube-promtheus监控k8s

K8s监控需要考虑以下几方面

Kubernetes节点的监控:node节点的cpu、负载、内存、硬盘等指标

内部系统组件的状态:kube-scheduler、kube-controller-manager、kubedns/coredns等组件的运行状态

metrics:Deployment的状态、资源请求、调度和API延迟等数据指标

Kube-prom的组成如下

图片

2.7.1 node-export监控

我们使用prometheus来监控k8s node状态和性能,采集节点的监控指标,可以通过node_exporter获取,node_exporter就是抓取用于采集服务器节点的各种运行指标,目,比如cpu、distats、loadavg、meminfo、netstat等。

使用DeamonSet控制器来部署该pod,这样每一个节点都会运行一个Pod,如果我们从集群中删除或添加节点后,也会进行自动扩展,

node-exporter.yaml样例如下:

图片

图片

图片

图片

图片

执行kubectl get pod -n monitoring -o wide 或oc get pods -n openshift-monitoring -o wide(关于OpenShift命令行,本小节不再赘述)

图片

可以查到node-exporter的pod状态在k8s节点上, curl 127.0.0.1:9100/metrics,可以获取到数据,说明成功收集

配置node-exporter-service.yaml

图片

输入kubectl get svc -n monitoring -o wide |grep node

输出以下

图片

表示service配置完成

2.7.2 kube-state-metrics

kube-state-metrics本质上是不断轮询api-server,kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,而kube-state-metrics是将k8s的运行状况在内存中做了个快照,并且获取新的指标。

配置kube-state-metrics-deployment.yaml样式

图片

图片

图片

配置 kube-state-metrics-service.yaml

图片

查看pod和svc

kubectl get pod -n monitoring -o wide |grep state

kubectl get svc -n monitoring -o wide |grep state

图片

检查状态是否正常

2.7.3 grafana监控

我们使用grafana展示kube-prom的信息状态监控

grafana-deployment.yaml样式如下:

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

grafana-service.yaml样式如下:

图片

查看grafana service pod

kubectl get pod,svc -n monitoring -o wide |grep grafana

图片

访问grafana后台,浏览器访问http://ip:23000/login

(可以去grafana官网搜寻需要监控的模板)

图片

可以查看k8s容器的内存,CPU等资源的使用率

图片

可以查看有问题的容器副本

在alert里面可以配置报警规则

图片

可以配置pod宕机发送报警

2.8 kubernetes日志收集

1. 原生方式:使用kubectl/oc logs直接查看本地保留的日志,或者通过docker engine的 log driver把日志重定向到文件、syslog、fluentd等系统中。

2. DaemonSet方式:在K8S的每个node上部署日志agent,由agent采集所有容器的日志到服务端。

3. Sidecar方式:一个POD中运行一个sidecar的日志agent容器,用于采集该POD主容器产生的日志。

Sidecar和DaemonSet是被动采集方式,主动采集方式有原生方式DockerEngine 推主动送方式(也可以通过SDK进行业务日志直写,本文不介绍)

图片

2.8.1 原生方式log

DockerEngine本身具有LogDriver功能,可通过配置不同的LogDriver将容器的stdout通过DockerEngine写入到远端存储,以此达到日志采集的目的。这种方式的可定制化、灵活性、资源隔离性都很低,一般不建议在生产环境中使用。

K8s的容器提供标准输出和文件两种方式。在容器中,标准输出将日志直接输出到stdout或stderr,而DockerEngine接管stdout和stderr文件描述符,将日志接收后按照DockerEngine配置的LogDriver规则进行处理;日志打印到文件的方式和虚拟机/物理机基本类似,只是日志可以使用不同的存储方式,例如默认存储、EmptyDir、HostVolume、NFS等。

2.8.2 daemonset方式--Node上部署log agent

DaemonSet方式在每个node节点上只运行一个日志agent,采集这个节点上所有的日志。DaemonSet相对资源占用要小很多,但扩展性、租户隔离性受限,比较适用于功能单一或业务不是很多的集群。

通过部署Elasticsearch集群 ,Fluentd过滤、Elasticsearch存储、Kibana展示,来收集node agent的日志。(本文介绍较为简单的Filebeat方式)

yaml配置样式如下

图片

图片

图片

图片

图片

图片

图片

日志输出到文件,hostPath方式挂载,agent通过deamonset方式部署

2.8.3 sidecar方式:通过sidecar容器收集日志

在k8s里,可以为pod添加一个sidecar进行pod日志收集,可以使用filebeat。每个pod都需要一个独立的sidecar,以下是为nginx添加sidecar

yaml配置样式如下:

图片

图片

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/431398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

080|为什么阿里的价值观值得你关注?

在阿里巴巴20周年年会现场&#xff0c;万众瞩目之下&#xff0c;马云和张勇完成了阿里巴巴董事长职务的交接。 不过你也知道&#xff0c;这次接棒在一年前就已经公布了&#xff0c;在年会上只是一个仪式。在20周年年会过后&#xff0c;我找到了互联网圈的资深媒体人阳淼&#…

julia语言使用PyCall包调用Python代码及Python包

Julia语言虽然好&#xff0c;但是包管理方面和生态环境感觉还有一点小小的缺陷&#xff0c;但是Julia可以调用Python丰富的包&#xff0c;用起来很方便。 安装PyCall 在安装之前先确认下Julia和Python的版本&#xff0c;我使用的稳定版本的 Julia1.6.7&#xff0c;Python版本是…

电磁兼容(EMC):单、双面PCB板设计要点

目录 1 产品设计原则&#xff1a;性价比为第一要素 2 布局设计要点 3 布线设计要点 4 完整地平面不是最优方案 1 产品设计原则&#xff1a;性价比为第一要素 PCB在电磁兼容设计中通常是要求有完整的地和电源平面。但多层价格让对价格敏感的产品望而却步&#xff0c;只能采…

GPT本地化研究(JAVA版本)

1.我觉得gpt3 600多G个人是不可能部署得成功的,回想我自己个人不可能每一方面知识都知道,我只是知道最多的是我自己擅长的,百事通需要靠大公司才能解决,我们只是要关注这个gpt是哪个领域的, 我想做的是工业—>自动化gpt(貌似这个方向日本很专业了*_*) 它山之石可以攻玉 2.gp…

【设计模式 03】抽象工厂模式

一个具体的工厂&#xff0c;可以专门生产单一某一种东西&#xff0c;比如说只生产手机。但是一个品牌的手机有高端机、中端机之分&#xff0c;这些具体的属于某一档次的产品都需要单独建立一个工厂类&#xff0c;但是它们之间又彼此关联&#xff0c;因为都共同属于一个品牌。我…

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来&#xff0c;Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年&#xff0c;An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…

【go语言开发】yaml文件配置和解析

本文主要介绍使用第三方库来对yaml文件配置和解析。首先安装yaml依赖库&#xff1b;然后yaml文件中配置各项值&#xff0c;并给出demo参考&#xff1b;最后解析yaml文件&#xff0c;由于yaml文件的配置在全局中可能需要&#xff0c;可定义全局变量Config&#xff0c;便于调用 文…

面试题HTML+CSS+网络+浏览器篇

文章目录 Css预处理sass less是什么&#xff1f;为什么使用他们怎么转换 less 为 css&#xff1f;重绘和回流是什么http 是什么&#xff1f;有什么特点HTTP 协议和 HTTPS 区别什么是 CSRF 攻击HTML5 新增的内容有哪些Css3 新增的特性flex VS grid清除浮动的方式有哪些&#xff…

SAR ADC学习笔记(3)

一、SAR ADC采样电路 1.采样网络的时域响应&#xff1a;采保信号 2.采样网络的KT/C噪声 3.采样抖动 采样开关的种类 1.单MOS管开关 2.传输门开关 3.栅极自举&#xff08;Bootstrap&#xff09;开关 结论&#xff1a;M4的衬底需要和B点短接&#xff0c;保证B点能够到达高压&…

完美解决Iframe嵌入帆软报表出现跨域cookie写不进去的问题

随着google chrome对第三方cookie的限制越来越狠,现在发现之前使用iframe嵌入的帆软报表已经不好使了。官方现在解决iframe嵌入帆软报表出现跨域导致cookie写不进去的方案是主推 统一主域名的方案(谷歌浏览器单点登录失败- FineReport帮助文档 - 全面的报表使用教程和学习资料…

大唐杯学习笔记:Day5

1.1 小区搜索 搜索流程 PLMN选择 自动模式&#xff1a;UE根据NAS的请求或自主地向NAS报告可用的PLMN 手动模式&#xff1a;通过手动选择一个可用的VPLMN获取正常服务 频点选择 5G NR中,3GPP主要指定了两个频率范围,一个是6GHZ以下,另一个是毫米波,分别称之为FR1和FR2。 N…

稀碎从零算法笔记Day5-LeetCode:轮转数组

题型&#xff1a;数组、数学、双指针 前言&#xff1a;LC说你得用三种方法做出来(悲) 链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 …

专业145+总分410+西工大西北工业大学827信号与系统考研经验电子信息与通信工程,海航,真题,大纲,参考书。

经过一年的努力&#xff0c;分数终于出来。今年专业课827信号与系统145&#xff08;很遗憾差了一点点满分&#xff0c;没有达到Jenny老师的最高要求&#xff09;&#xff0c;数一130&#xff0c;英语和政治也都比较平衡&#xff0c;总分410分&#xff0c;当然和信息通信考研Jen…

学习java第一天(下载并配置环境+写第一个java程序)

一.安装 1.下载 直接去官网上选择与你电脑符合的版本下载 官网链接Java Archive Downloads - Java SE 8u211 and later &#xff08;拿我的为例 Windows x64版本&#xff09; ​ 2.然后安装好exe&#xff08;要让自己知道在哪&#xff09; 3.配置环境 大佬链接&#xff1…

蓝桥杯前端Web赛道-新鲜的蔬菜

蓝桥杯前端Web赛道-新鲜的蔬菜 题目链接&#xff1a;1.新鲜的蔬菜 - 蓝桥云课 (lanqiao.cn) 题目要求如下&#xff1a; 其实很容易联想到使用flex布局&#xff0c;这是flex布局一种非常经典的骰子布局&#xff0c;推荐Flex 布局教程&#xff1a;实例篇 - 阮一峰的网络日志 (r…

Java基于SpringBoot网上超市的设计与实现论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此超市商品销售信…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:点击回弹效果)

设置组件点击时回弹效果。 说明&#xff1a; 从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 clickEffect clickEffect(value: ClickEffect | null) 设置当前组件点击回弹效果。 系统能力&#xff1a; SystemCapabilit…

SQL技巧笔记(一):连续3人的连号问题—— LeetCode601.体育馆的人流量

SQL 技巧笔记 前言&#xff1a;我发现大数据招聘岗位上的应聘流程都是需要先进行笔试&#xff0c;其中占比很大的部分是SQL题目&#xff0c;经过一段时间的学习之后&#xff0c;今天开了一个力扣年会员&#xff0c;我觉得我很有必要去多练习笔试题目&#xff0c;这些题目是有技…

Linux - 进程概念

1、冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系&#xff1b; 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成&#xff1a; 输入单元&#xff1a;…

浏览器发出一个请求到收到响应步骤详解

前言 在网络通信中&#xff0c;浏览器向Web服务器发送HTTP请求消息的过程是一个复杂而精密的环节&#xff0c;涉及到URL解析、DNS解析、数据拆分、路由表规则和MAC头部添加等一系列步骤。本文将深入探讨这一过程的每个环节&#xff0c;帮助读者更全面地了解浏览器与Web服务器之…