[转帖]k8s中nginx工作线程的问题

k8s,nginx,工作,线程,问题 · 浏览次数 : 0

小编点评

## 针对k8s pod容器中nginx worker_processes参数的设置方法 由于k8s pod容器可以根据资源限制设置工作线程数量,如果nginx worker_processes参数设置为auto,则会根据node节点的cpu信息来动态调整线程数量。当pod容器给的资源为0.5核,内存为2G,宿主机node节点为4G8G,那么nginx的工作线程就会是4个,这与我们预期的设置不符。 以下几种方法可以根据pod容器设置的资源限制来生成正确的nginx worker_processes参数值: **1. 通过env变量** ```yaml - name: NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE value: "true" ``` **2. 通过command参数** ``` docker run -p 80:80 -v nginx.conf:/etc/nginx/nginx.conf -e NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE=true nginx ``` **3. 通过yaml配置文件** ```yaml nginx: entrypoint: /bin/sh command: -c "nginx -g 80 $NGINX_HOST:$NGINX_PORT -p $NGINX_PORT:$NGINX_PORT" env: - NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE: true ``` **4. 通过shell脚本** ```bash #!/bin/bash nginx -g 80 $NGINX_HOST:$NGINX_PORT -p $NGINX_PORT:$NGINX_PORT if [[ "$NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE" == "true" ]]; then worker_processes=$(nproc -r) echo worker_processes: $worker_processes fi ``` **总结:** 1. 通过`env`变量可以简单的设置工作线程数量。 2. 通过`command`参数可以设置工作线程数量,但需要在容器启动时手动设置参数。 3. 通过`yaml`配置文件可以定义工作线程数量,并默认情况下自动根据资源限制进行调整。 4. 通过`shell`脚本可以更加灵活地设置工作线程数量,并在需要时进行调整。

正文

https://www.cnblogs.com/lizexiong/p/15198863.html

 

  本次环境背景信息为,需要在k8s里面跑一些前端界面,所以在pod容器中还是使用到了nginx,但是发现,如果nginx worker_processes参数为auto,pod容器会读取node节点的cpu信息来生成线程,如,我pod容器给的资源为0.5核,内存为2G,宿主机node节点为4G8G,那么nginx的工作线程就是4个,这个结果不是我们想要的,需要根据pod容器限制的值来生成,找了很多方式,发下以下方式有效。

env:
  - name: NGINX_ENTRYPOINT_WORKER_PROCESSES_AUTOTUNE
    value: "true"

  这样,就会根据POD设置的资源限制limit值来设置工作线程。
  参考链接:https://github.com/nginxinc/docker-nginx/issues/472

与[转帖]k8s中nginx工作线程的问题相似的内容:

[转帖]k8s中nginx工作线程的问题

https://www.cnblogs.com/lizexiong/p/15198863.html 本次环境背景信息为,需要在k8s里面跑一些前端界面,所以在pod容器中还是使用到了nginx,但是发现,如果nginx worker_processes参数为auto,pod容器会读取node节点的c

[转帖]k8s部署-22-yaml文件怎么写,规则是什么,在k8s中分别有什么含义

https://www.jianshu.com/p/ba5e3d9ecc1e 在前面的文章中,我们使用了较多的yaml文件,例如测试kubespary方式搭建的集群可用性,亦或者前文中我们搭建ingress-nginx的时候也是用了yaml文件,那么k8s中的yaml文件到底该如何来写,针对k8s中

[转帖]k8s-mtu设置不当引发的线上故障

https://www.cnblogs.com/zisefeizhu/p/16611626.html 背景 在部署新的paas平台线上环境时,突发consul和es中间件无法创建。 排查过程 以consul 通过查询k8s集群中pod状态发现原来3pod的consul集群,其中2个pod一直重启。

[转帖]k8s学习-containerd命令行工具crictl使用

在最新k8s的版本中,containerdruntime已经不在使用docker,而是使用containerd了。​containerd是什么?containerd的自我介绍中说它是一个开放、可靠的容器运行时,实际上它包含了单机运行一个容器运行时的功能。 containerd为了支持多种OCI Ru

[转帖]k8s 服务注册与发现(一)DNS

文章目录 什么是DNS域名层级域名服务器 工作原理反向代理水平扩展集群中的 DNS......DNS劫持 什么是DNS 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UD

[转帖]kubelet 原理解析六: 垃圾回收

https://segmentfault.com/a/1190000022163856 概述 在k8s中节点会通过docker pull机制获取外部的镜像,那么什么时候清除镜像呢?k8s运行的容器又是什么时候清除呢? api-server: 运行在master,无状态组件,go自动内存垃圾回收 co

[转帖]K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

https://www.cnblogs.com/cheyunhua/p/15619317.html 一、Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序

[转帖]k8s学习: kubeconfig文件详解

1.什么是kubeconfig文件 用于配置集群访问的文件称为kubeconfig文件,这是引用配置文件的常用方法,.但并不是说有一个名为ubeconfi的文件。用于配置集群访问信息的文件叫作 kubeconfig 文件,在开启了 TLS 的集群中,每次与集群交互时都需要身份认证,生产环境一般使用证

[转帖]k8s 修改 pod 内容器内核参数

https://www.cnblogs.com/leffss/p/14832023.html 容器的本质是一个进程,共享宿主机的内核。原以为修改了宿主机的内核参数容器中也会改,但实际上并不是这样,容器的内核参数可以和宿主机不同。 docker 修改内核参数 docker run -it --rm -

[转帖]k8s 污点和容忍

文章目录 污点和容忍污点(Taints)查看污点:设置污点删除污点 容忍 (toleratints)Pod 设置容忍设置容忍时间容忍示例 节点自污染,pod 应对节点故障 污点和容忍 在 Kubernetes 中,节点亲和性 NodeAffinity 是 Pod 上定义的一种属性,能够使 Pod 按