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

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按