随着Kubernetes的不断发展,技术不断成熟,越来越多的公司选择把自家的应用部署到Kubernetes中。但是把应用部署到Kubernetes中就完事了吗?显然不是,应用容器化只是万里长征的第一步,如何让应用安心、稳定的运行才是后续的所有工作。
日志对于我们管理Kubernetes集群及其上的应用具有非常重要的作用,特别是在出现故障或者Bug的时候。如果你能回答下面几个问题,那么可以不用再看本文了,如果不能回答,本文可能正好适合你。
作者 | 分布式实验室 来源 | zhuanlan.zhihu.com/p/70662744 正文 准备 关于容器日志 Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出)和STDERR(标准错误输出)。日志都会以json-file的格式存储于 /var/l
理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume
随着云计算技术的发展,越来越多的公司开始向业务更敏捷、成本更低、可伸缩、更灵活的云原生架构转变。而在云原生技术栈中,容器已经成为应用分发和交付的标准技术,将应用与底层运行环境进行解耦;其中 Kubernetes 已经成为容器编排的事实标准,被广泛用于自动部署、扩展和管理容器化应用。
日志采集功能是容器服务为用户提供的集群内日志采集工具,可以将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch或者腾讯云日志服务(CLS)。日志采集功能适用于需要对 Kubernetes 集群内服务日志进行存储和分析的用户。
基于centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0
容器化应用系统上生产的最佳实践 前言 最近忙的要死, 👻👻👻. 上一周来了一次比996更猛的`906. 这周二终于有点遭不住了, 调休一天, 稍微歇息一下. 同时手痒的不行, 把筹备了好久的重磅文章发上来哈哈. 😆😆😆 不过时间还是有点仓促, 所以这次就先开个头, 后面有时间再细化. 📷 容器化应用系统上生产的最佳实践 检查镜像、容器是否是用root启动以及配置其他特权. 如无必要, 一律使用普通用户. 检查镜像LANG配置: LANG = en_US.UTF-8. 目的: 避免生产出现 乱码等问题 检
log-Pilot是一个智能容器日志采集工具,它不仅能够高效便捷地将容器日志采集输出到多种存储日志后端,同时还能够动态地发现和采集容器内部的日志文件,更多咨询可以移步这里。
您还可以为 kubectl 使用一个速记别名,该别名也可以与 completion 一起使用:
Docker的日志分为两类,一类是 Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs 显示当前运行的容器的日志信息,内容包含 STOUT(标准输出) 和 STDERR(标准错误输出)。日志都会以 json-file 的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log,不过这种方式并不适合放到生产环境中。
可是随着我们使用 kubernetes 步入云原生的时代后, kubernetes 把以往的操作系统上的许多底层都屏蔽,再由他提供了一些标准接口。
在TKE中LogListener是以DaemonSet模式运行,可通过CRD方式创建采集配置采集TKE集群日志。本文介绍如何通过CRD方式创建采集配置。
通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大多数容器引擎同样被设计成支持某种日志机制。对于容器化应用程序来说,最简单和最易接受的日志记录方法是将日志内容写入到标准输出和标准错误流。 但是,容器引擎或运行时提供的本地功能通常不足以支撑完整的日志记录解决方案。例如,如果一个容器崩溃、一个Pod被驱逐、或者一个Node死亡,应用相关者可能仍然需要访问应用程序的日志。因此,日志应该具有独立于Node、Pod或者容器的单独存储和生命周期,这个概念被称为群集级日志记录。群集级日志记录需要一个独立的后端来存储、分析和查询日志。Kubernetes本身并没有为日志数据提供原生的存储解决方案,但可以将许多现有的日志记录解决方案集成到Kubernetes集群中。在Kubernetes中,有三个层次的日志:
作者 Todd Neal (AWS), Matthias Bertschy (ARMO), Sergey Kanzhelev (Google), Gunju Kim (NAVER), Shannon Kularathna (Google)
本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题,及时修复应用所存在的问题。
以下是一些使用Kubernetes常见的故障场景,需要通过查看容器日志来进行排查的示例:
通常一个线上问题的定位流程是: 通过 Metric 发现问题, 根据 Trace 定位到问题模块,根据模块具体的日志定位问题原因。在日志中包括了错误、关键变量、代码运行路径等信息,这些是问题排查的核心,因此日志永远是线上问题排查的必经路径;
kubernetes日志收集方案有几种方案,都适用于什么场景?本文对k8s常用日志采集方案做了详细介绍。
在Kubernetes中,每个容器都有自己的标准输出和标准错误输出,我们可以使用容器运行时提供的工具来采集这些输出,并将其重定向到日志文件中。例如,我们可以使用Docker提供的“docker logs”命令来查看容器的日志输出:
当前技术领域容器盛行,已然是一个云原生的时代, 在技术领域都或多或少跟云计算、容器、Kubernetes、云原生应用有着不同的渊源。云原生的技术变更带来了革命性的变化, 节省了成本,使得系统能够快速应对业务的快速迭代发布, 从而推动业务的快速发展。但同时导致了公司对于上云后对于应用的监控,管理发生了很大的变化.
pod 处于以上情况,可通过kubectl describe pod -n<namepsaces> <podname> 查看对应event 展示信息,基于对应报错信息进行解决;
今天在工作遇到一个docker日志丢失的问题,最终一步步查找到原因了,这里记录一下过程。
日志采集功能是容器服务为用户提供的集群内日志采集工具,可以将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch 或者 腾讯云日志服务(CLS)。日志采集功能适用于需要对 Kubernetes 集群内服务日志进行存储和分析的用户。
今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了。
今天在整理思维导图的时候突然发现有个我不知道的探针startupProbe,于是查了下官方是这样解释的:可以定义一个启动探针,该探针将推迟所有其他探针,直到 Pod 完成启动为止。看完这句话有蒙圈于是提出了下面这个问题:
前段时间小白发了很多关于Loki的实践分享,有同学就问了,我该如何把现在运行在kubernetes上的容器日志接入到Loki里面呢?那么今天小白在这里就主要跟大家分享下loki跟fluentd结合的一些实践。
Fluentd是一个由云原生基金会(CNCF)管理的统一日志层数据收集器。它可以从多种数据源里采集、处理日志,并集中将它们存储到文件或者数据库当中。其主要的目的也是让你的基础设施能够实现统一的数据收集和分发,以便业务可以更好的使用和理解数据。作为第六个从CNCF里面毕业的项目,fluentd拥有大量的数据处理插件和生产环境的实践指导,同时还有GKE和AWS这样公有云大厂应用为其背书,小白毅然的选择了fluentd作为我们kubernetes上唯一日志采集器。
翻译自 Learn 12 Factor Apps Before Kubernetes 。译者在团队里也一直把 12 factor 作为 Kubernetes 学习的必修前导课。译者和这个作者心有戚戚焉,确实很想告诉别人,这个很重要,但不好表达,而这个 12 factor 理论说出了我们很多的想法。不管使用何种管理工具,12 factor 都可以让云原生之旅更顺畅。
Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。
宜信容器云是一套基于kubernetes的容器管理平台。业务线用户在容器云上部署应用程序时,常常会遇到容器无法启动或者应用程序运行不正常的情况。为了方便用户排查在应用上云过程中的问题,我们在web端集成了一系列的排错方式,如下图:
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。运行kubectl命令的语法如下所示:
如果你正好想要了解关于 Kubernetes (K8S) 的 CKA 认证考试的内容占比和具体考纲,那么你来对地方了!本篇文章将详细解析 CKA 认证考试的内容占比以及具体考纲,让你对考试有一个清晰的了解。
如果我们想要在 Kubernetes 集群中部署两个副本的 Ghost,可以直接应用下面的资源清单文件即可:
要以特定格式将详细信息输出到终端窗口,可以将 -o 或 --output 参数添加到支持的 kubectl 命令
在前面已经提到,容器的生命周期可能很短,会被频繁的创建和销毁。那么容器在销毁的时候,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器中的数据,kubernetes引入了Volume的概念。 Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里面的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命周期不和Pod中的单个容器的生命周期有关,当容器终止或者重启的时候,Volume中的数据也不会丢失。
日志对于调试问题和监视集群情况也是非常有用的。而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中。对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件之中,同样也可以通过 docker logs 或者 kubectl logs 来查看到对应的日志信息。
Init Container 是一种特殊容器,顾名思义是用来做初始化工作的容器,可以是一个或者多个,如果有多个的话,这些容器会按定义的顺序依次执行,只有所有的Init Container执行完后,主容器才会被启动。
Logstash 是一个开源的数据收集引擎,它具有实时管道功能,可以用来统一处理来自不同源的数据,并将其发送到你选择的目标。Logstash 支持多种类型的输入数据,包括日志文件、系统消息队列、数据库等,可以对数据进行各种转换和处理,然后将数据发送到各种目标,如 Elasticsearch、Kafka、邮件通知等。
Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保障的挑战越来越大。
kahing,腾讯云CLS产品经理,负责CLS云原生日志的云产品接入工作。 willyi,腾讯云高级开发工程师,负责CLS云原生日志服务云原生生态建设,致力于大规模云原生设施的落地和实践工作。 简介 日志服务 (Cloud Log Service, CLS)支持采集自建K8s集群上的日志,在进行日志采集前,需要在K8s自建集群上通过CRD定义日志采集配置(LogConfig),并部署安装Log-Provisoner,Log-Agent,以及LogListener。针对使用腾讯云容器服务(Tencent
日志服务CLS支持采集自建K8s集群上的日志,在进行日志采集前,需要在K8s自建集群上通过CRD定义日志采集配置(LogConfig),并部署安装Log-Provisoner,Log-Agent,以及LogListener。针对使用腾讯云容器服务(Tencent Kubernetes Engine , TKE)的用户, 可参见TKE开启日志采集文档,通过控制台快速接入并使用日志服务。
很多人在实际工作中都使用过Kubernetes,我们的容器服务在2016年年底开始提供全托管的Kubernetes服务,主要提供了四个方面的功能。首先是提供了一键部署的Kubernetes,与其他容器服务的提供商不一样,我们的Kubernetes是完全隔离的,每个用户都会独享所有的计算节点和控制节点,集群网络也在用户自己的VPC中。我们在这个基础上提供了集群的全生命周期管理,包括集群的创建、销毁,还有计算节点的添加、删除,还有一些类似Kubernetes原有组件的初始化以及证书的初始化工作。为了大家更方便地使用Kubernetes,我们在控制台包装了一些界面,使大家可以通过可视化的方式创建一些负载来暴露自己的服务,避免了大家手工编码的烦琐。第三,我们提供了周边的监控能力,包括集群本身pod内存的使用率以及一些Kubernetes事件。这些能力都与腾讯云的云监控产品进行了打通,大家可以直接在云监控产品界面使用这些能力。为了方便大家将自己的一些比较传统的应用部署到云上,我们在Kubernetes集群之外还提供了Docker镜像仓库、TencentHub、CICD的功能,为大家提供了一站式应用的云解决方案。
本篇博客将介绍Kubernetes(简称K8s)常用命令,包括用频率最高、难度较高、易错等方面的总结。Kubernetes是一种用于自动化部署、扩展和管理容器化应用程序的开源平台,掌握Kubernetes常用命令对于管理和运维Kubernetes集群至关重要。
Helm 的使用是比较简单的,但是要让我们自己开发一个 Chart 包还是有不小难度的,主要还是 go template 的语法规则不够人性化,这里我们用一个完整的实例来演示下如何开发一个 Helm Chart 包。
我们经常会遇到Pod在启动后一会儿就挂掉然后又重启一直循环. kubernetes是如何探测Pod是否存活的呢,
应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的。而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中。对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件之中,同样我们也可以通过 docker logs 或者 kubectl logs 来查看到对应的日志信息。
当你使用kubernetes的时候,有没有遇到过Pod在启动后一会就挂掉然后又重新启动这样的恶性循环?你有没有想过kubernetes是如何检测pod是否还存活?虽然容器已经启动,但是kubernetes如何知道容器的进程是否准备好对外提供服务了呢?让我们通过kubernetes官网的这篇文章Configure Liveness and Readiness Probes,来一探究竟。
领取专属 10元无门槛券
手把手带您无忧上云