K8S中的sidecar 和daemonset的理解和实践

2023-10-19 20:50

本文主要是介绍K8S中的sidecar 和daemonset的理解和实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要: DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。

概念

Sidecar 也叫做边车模式.

边车模式sidecar是在不改变原有container功能的情况下,在同一个pod下增加其他container来增加对应的功能。

因为在同一个Pod下的容是共享一个namespace空间的,所以对应的网络、存储等资源也是同一个空间下的,这就可以很方便的进行两个containers之间交互。

当然这个比较理解,举个通俗的例子:在近代战争电影里,我们经常看到一群日本兵开着三轮摩托,插着膏药旗进城,通常这个三轮摩托上还架着机关枪。

这个就可以理解成sidecar模式,因为三轮摩托的主要作用肯定是一个交通载具,但是旁边坐的老日在那驾个枪就多了警戒防护的功能。

Sidecar 模式案例

apiVersion: batch/v1
kind: Job
metadata:name: nginx-log-sidecar-demonamespace: default
spec:template:metadata:name: nginx-log-sidecar-demospec:restartPolicy: Nevercontainers:- name: nginx-log-demoimage: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]volumeMounts:- name: nginx-logmountPath: /var/log/nginx##### logtail sidecar container- name: logtail# more info: https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/detail# this images is released for every regionimage: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest# when recevie sigterm, logtail will delay 10 seconds and then stopcommand:- sh- -c- /usr/local/ilogtail/run_logtail.sh 10livenessProbe:exec:command:- /etc/init.d/ilogtaild- statusinitialDelaySeconds: 30periodSeconds: 30resources:limits:memory: 512Mirequests:cpu: 10mmemory: 30Mienv:##### base config# user id- name: "ALIYUN_LOGTAIL_USER_ID"value: "${your_aliyun_user_id}"# user defined id- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"value: "${your_machine_group_user_defined_id}"# config file path in logtail's container- name: "ALIYUN_LOGTAIL_CONFIG"value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"##### env tags config- name: "ALIYUN_LOG_ENV_TAGS"value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"- name: "_pod_name_"valueFrom:fieldRef:fieldPath: metadata.name- name: "_pod_ip_"valueFrom:fieldRef:fieldPath: status.podIP- name: "_namespace_"valueFrom:fieldRef:fieldPath: metadata.namespace- name: "_node_name_"valueFrom:fieldRef:fieldPath: spec.nodeName- name: "_node_ip_"valueFrom:fieldRef:fieldPath: status.hostIPvolumeMounts:- name: nginx-logmountPath: /var/log/nginx##### share this volumevolumes:- name: nginx-logemptyDir: {}

参考文档

##
http://www.361way.com/k8s-sidecar/6689.html##
https://blog.csdn.net/yujia_666/article/details/115705807

日志采集方式

日志作为任一系统不可或缺的部分,在K8S的官方文档中也介绍了多种的日志采集形式,总结起来主要有下述3种:原生方式、DaemonSet方式和Sidecar方式。

  • 原生方式:使用 kubectl logs 直接在查看本地保留的日志,或者通过docker engine的 log driver 把日志重定向到文件、syslog、fluentd等系统中。
  • DaemonSet方式:在K8S的每个node上部署日志agent,由agent采集所有容器的日志到服务端。
  • Sidecar方式:一个POD中运行一个sidecar的日志agent容器,用于采集该POD主容器产生的日志

daemonset的理解

  DaemonSet确保全部(或者某些)节点上运行一个Pod副本。当有新节点加入集群时,也会为它们新增一个Pod。当节点从集群中移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod
  使用DaemonSet的一些典型用法:
     运行集群存储daemon(守护进程),例如在每个节点上运行Glusterd、Ceph等
     在每个节点运行日志收集daemon,例如Fluentd、Logstash
     在每个节点运行监控daemon,比如Prometheus Node Exporter等

创建的案例如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd-es-v2.0.4namespace: logginglabels:k8s-app: fluentd-esversion: v2.0.4kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile
spec:selector:matchLabels:k8s-app: fluentd-esversion: v2.0.4template:metadata:labels:k8s-app: fluentd-eskubernetes.io/cluster-service: "true"version: v2.0.4# This annotation ensures that fluentd does not get evicted if the node# supports critical pod annotation based priority scheme.# Note that this does not guarantee admission on the nodes (#40573).annotations:scheduler.alpha.kubernetes.io/critical-pod: ''seccomp.security.alpha.kubernetes.io/pod: 'docker/default'spec:serviceAccountName: fluentd-escontainers:- name: fluentd-esimage: k8s.gcr.io/fluentd-elasticsearch:v2.0.4env:- name: FLUENTD_ARGSvalue: --no-supervisor -qresources:limits:memory: 500Mirequests:cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/log- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: true- name: config-volumemountPath: /etc/fluent/config.dnodeSelector:beta.kubernetes.io/fluentd-ds-ready: "true"terminationGracePeriodSeconds: 30volumes:- name: varloghostPath:path: /var/log- name: varlibdockercontainershostPath:path: /var/lib/docker/containers- name: config-volumeconfigMap:name: fluentd-es-config-v0.1.4

这篇关于K8S中的sidecar 和daemonset的理解和实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242289

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可