容器化守护进程:理解Kubernetes DaemonSet

需积分: 9 0 下载量 114 浏览量 更新于2024-06-30 收藏 1.3MB PDF 举报
“21|容器化守护进程的意义:DaemonSet.pdf” 在Kubernetes集群中,DaemonSet是一种关键的控制器,它的主要任务是确保每个节点(或特定节点集合)上都运行一个或者多个副本的Pod。这些Pod通常包含了系统服务、监控代理或者其他需要在集群每个角落运行的守护进程。在本文中,我们将深入探讨DaemonSet的作用及其在容器化环境中的重要性。 首先,DaemonSet的出现解决了在传统环境中部署和管理守护进程的复杂性。在非容器化的系统中,部署守护进程可能涉及手动配置,这不仅费时,而且容易出错,尤其是在大规模集群中。而DaemonSet则提供了一种自动化的方式,使得守护进程能够随着集群的扩展而自动扩展,并且保证每个节点都有一个副本,确保服务的稳定性和一致性。 文章提到的StatefulSet是用于管理有状态应用的另一种控制器,它保证了Pod的持久标识、有序部署和稳定的网络身份。尽管StatefulSet可以处理某些特定的业务需求,但当我们需要在每个节点上运行一个守护进程时,DaemonSet就成了首选。 DaemonSet的工作原理是,每当有新的节点加入集群,或者是现有节点重启,DaemonSet控制器都会创建或恢复一个Pod在该节点上运行。同样,如果某个节点被删除,对应的Pod也会被删除。这种特性使得 DaemonSet 能够适应集群动态变化的情况。 在更新策略方面,DaemonSet同样支持“滚动更新”(rolling update)。不同于StatefulSet,DaemonSet的滚动更新不是按照Pod的编号顺序进行,而是根据更新策略来决定。通过设置`spec.updateStrategy.rollingUpdate.partition`字段,我们可以控制更新的顺序和比例,实现灰度发布或金丝雀发布,从而降低更新过程中可能带来的风险。 例如,通过`kubectl patch`命令,我们可以指定只更新编号大于或等于特定值的Pod,这在需要逐步推进更新的场景中非常有用。这确保了即使更新过程中出现问题,也能快速回滚,避免影响整个集群的服务。 DaemonSet在Kubernetes中扮演了至关重要的角色,它简化了守护进程的部署和管理,同时提供了灵活的更新策略,确保了服务的高可用性和稳定性。对于需要在所有或特定节点上运行的关键服务,如日志收集、监控或网络插件,使用DaemonSet是最佳实践。通过掌握和应用DaemonSet,我们能更好地利用Kubernetes的容器编排能力,提升整体集群的运维效率。

我的代码跟docker-compose.yml文件放在/app目录下 /app/frontend存放前端代码 /app/backend存放后端代码 我想直接在/app/frontend直接install跟build再拷贝到容器内,如何实现 docker-compose.yml文件: version: '3' services: frontend: build: context: ./frontend dockerfile: Dockerfile ports: - 8010:80 restart: always backend: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: python manage.py runserver 0.0.0.0:8000 ports: - 8011:8000 restart: always celery-worker: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server worker -l info --pool=solo --concurrency=1 depends_on: - redis - backend restart: always celery-beat: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler depends_on: - redis - backend restart: always redis: image: redis:latest ports: - 6379:6379 restart: always mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=sacfxSql258147@ ports: - 8016:3306 volumes: - ./mysql:/var/lib/mysql restart: always frontend:dockerfile文件: FROM node:16.18.1 WORKDIR /app/frontend COPY package*.json ./ RUN npm install COPY . . RUN npm run build:prod FROM nginx:latest COPY --from=0 /app/frontend/dist/ /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

2023-07-14 上传