K8s 组件启动参数整理

apiserver

原有参数:

参数

含义

--etcd-servers stringSlice要连接的 etcd 服务器列表(scheme://ip:port),以逗号分隔。
--etcd-cafile string用于保护 etcd 通信的 SSL 证书颁发机构文件。
--etcd-certfile string用于保护 etcd 通信的 SSL 证书文件。
--etcd-keyfile string用于保护 etcd 通信的 SSL 密钥文件。
--apiserver-count int     默认值:1集群中运行的 apiserver 数量,必须为正数。 (在启用 --endpoint-reconciler-type=master-count 时使用。)
--insecure-bind-address ip已废弃
--insecure-port int已废弃
--bind-address ip 默认值:0.0.0.0监听 --secure-port 端口的 IP 地址。 集群的其余部分以及 CLI/web 客户端必须可以访问关联的接口。 如果为空白或未指定地址(0.0.0.0 或 ::),则将使用所有接口。
--advertise-address ip向集群成员通知 apiserver 消息的 IP 地址。 这个地址必须能够被集群中其他成员访问。 如果 IP 地址为空,将会使用 --bind-address, 如果未指定 --bind-address,将会使用主机的默认接口地址。
--secure-port int     默认值:6443带身份验证和鉴权机制的 HTTPS 服务端口。 不能用 0 关闭。
--kubelet-https bool已废弃,会在1.22 版本去掉。Apiserver 连接始终使用 https。

--runtime-config mapStringString

一组启用或禁用内置 API 的键值对。支持的选项包括:
v1=true|false(针对核心 API 组)
<group>/<version>=true|false(针对特定 API 组和版本,例如:apps/v1=true)
api/all=true|false 控制所有 API 版本
api/ga=true|false 控制所有 v[0-9]+ API 版本
api/beta=true|false 控制所有 v[0-9]+beta[0-9]+ API 版本
api/alpha=true|false 控制所有 v[0-9]+alpha[0-9]+ API 版本
api/legacy 已弃用,并将在以后的版本中删除
--enable-admission-plugins stringSlice除了默认启用的插件之外要启用的插件,取值为逗号分隔的准入插件列表
--authorization-mode stringSlice     默认值:[AlwaysAllow]在安全端口上进行鉴权的插件的顺序列表。 逗号分隔的列表:AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node。
--token-auth-file  string如果设置该值,这个文件将被用于通过令牌认证来保护 API 服务的安全端口。
--service-account-key-file stringArray包含 PEM 编码的 x509 RSA 或 ECDSA 私钥或公钥的文件,用于验证 ServiceAccount 令牌。提供 --service-account-signing-key 时必须指定。
--service-cluster-ip-range stringCIDR 表示的 IP 范围用来为服务分配集群 IP。 此地址不得与指定给节点或 Pod 的任何 IP 范围重叠。
--client-ca-file string如果已设置,则使用与客户端证书的 CommonName 对应的标识对任何出示由 client-ca 文件中的授权机构之一签名的客户端证书的请求进行身份验证。
--tls-cert-file string包含用于 HTTPS 的默认 x509 证书的文件。 如果启用了 HTTPS 服务,并且未提供 --tls-cert-file 和 --tls-private-key-file, 为公共地址生成一个自签名证书和密钥,并将其保存到 --cert-dir 指定的目录中。
--tls-private-key-file string包含匹配 --tls-cert-file 的 x509 证书私钥的文件。

--tls-cipher-suites stringSlice

服务器的密码套件的列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
--requestheader-client-ca-file string在信任请求头中以 --requestheader-username-headers 指示的用户名之前, 用于验证接入请求中客户端证书的根证书包。 警告:一般不要假定传入请求已被授权。
--requestheader-allowed-names  stringSlice此值为客户端证书通用名称(Common Name)的列表;表中所列的表项可以用来提供用户名, 方式是使用 --requestheader-username-headers 所指定的头部。 如果为空,能够通过 --requestheader-client-ca-file 中机构认证的客户端证书都是被允许的。
--requestheader-extra-headers-prefix stringSlice用于查验请求头部的前缀列表。建议使用 X-Remote-Extra-。
--requestheader-group-headers stringSlice用于查验用户组的请求头部列表。建议使用 X-Remote-Group。
--requestheader-username-headers stringSlice用于查验用户名的请求头头列表。建议使用 X-Remote-User。
--proxy-client-cert-file string当必须调用外部程序以处理请求时,用于证明聚合器或者 kube-apiserver 的身份的客户端证书。 包括代理转发到用户 api-server 的请求和调用 Webhook 准入控制插件的请求。
--proxy-client-key-file string当必须调用外部程序来处理请求时,用来证明聚合器或者 kube-apiserver 的身份的客户端私钥。 这包括代理转发给用户 api-server 的请求和调用 Webhook 准入控制插件的请求。
--enable-swagger-ui bool已废弃
--allow-privileged bool如果为 true, 将允许特权容器。[默认值=false]
--audit-policy-file string定义审计策略配置的文件的路径。
--audit-log-maxage  int根据文件名中编码的时间戳保留旧审计日志文件的最大天数。
--audit-log-maxbackup  int保留的旧审计日志文件的最大数量。
--audit-log-maxsize  int轮换之前,审计日志文件的最大大小(以兆字节为单位)。
--audit-log-path string如果设置,则所有到达 apiserver 的请求都将记录到该文件中。 "-" 表示标准输出。
--kubelet-client-certificate stringTLS 的客户端证书文件的路径。
--kubelet-client-key stringTLS 客户端密钥文件的路径。
--event-ttl duration     默认值:1h0m0s事件的保留时长。

可新增参数:

参数

含义

--endpoint-reconciler-type string 默认值:"lease"使用端点协调器(master-count, lease, none),在值为 master-count 时 --apiserver-count 使用。
--anonymous-auth  默认值:true启用到 API server 的安全端口的匿名请求。 未被其他认证方法拒绝的请求被当做匿名请求。 匿名请求的用户名为 system:anonymous, 用户组名为 system:unauthenticated。
--delete-collection-workers int     默认值:1为 DeleteCollection 调用而产生的工作程序数。 这些用于加速名字空间清理。
--max-mutating-requests-inflight int     默认值:200在给定时间内进行中变更类型请求的最大个数。 当超过该值时,服务将拒绝所有请求。 零表示无限制。
--max-requests-inflight int     默认值:400在给定时间内进行中非变更类型请求的最大数量。 当超过该值时,服务将拒绝所有请求。 零表示无限制。
--enable-admission-plugins="PodPreset"PodPreset 是一种 K8s API 资源,用于在创建 Pod 时注入其他运行时需要的信息,这些信息包括 secrets、volume mounts、environment variables 等。K8s 默认不开启 PodPreset 支持的,其 API 类型为 settings.k8s.io/v1alpha1,所以还需要添加 --runtime-config=settings.k8s.io/v1alpha1=true
--watch-cache-sizes stringSlice各类resource的watch cache,默认100,资源数量较多时需要增加。
--http2-max-streams-per-connection int服务器为客户端提供的 HTTP/2 连接中最大流数的限制。 零表示使用 golang 的默认值,250。
某节点上若是同一时刻有超过250个资源,kubelet 就会无法处理更多的数据流,报 stopped posting node status 错误,与 apiserver 同步数据有问题,这时候可以配置 apiserver 参数  --http2-max-streams-per-connection  推荐设置为1000。

kube-controller-manager

原有参数

参数

含义

--cluster-signing-duration duration     默认值:8760h0m0s所签名证书的有效期限。
--feature-gates mapStringBool一组 key=value 对,用来描述测试性/试验性功能的特性门控(Feature Gate)。SupportIPVSProxyMode BlockVolume  will be removed in a future release.
--kubeconfig string指向 kubeconfig 文件的路径。该文件中包含主控节点位置以及鉴权凭据信息。
--leader-elect 默认值:true在执行主循环之前,启动领导选举(Leader Election)客户端,并尝试获得领导者身份。 在运行多副本组件时启用此标志有助于提高可用性。
--root-ca-file string如果此标志非空,则在服务账号的令牌 Secret 中会包含此根证书机构。 所指定标志值必须是一个合法的 PEM 编码的 CA 证书包。
--service-account-private-key-file string包含 PEM 编码的 RSA 或 ECDSA 私钥数据的文件名,这些私钥用来对服务账号令牌签名。
--cluster-signing-cert-file string包含 PEM 编码格式的 X509 CA 证书的文件名。该证书用来发放集群范围的证书。 如果设置了此标志,则不需要设置 --cluster-signing-* 标志。
--cluster-signing-key-file string包含 PEM 编码的 RSA 或 ECDSA 私钥的文件名。该私钥用来对集群范围证书签名。
--controllers stringSlice     默认值:[*]要启用的控制器列表。* 表示启用所有默认启用的控制器;foo 启用名为 foo 的控制器; -foo 表示禁用名为 foo 的控制器。默认禁用的控制器有:bootstrapsigner 和 tokencleaner。
--logtostderr 默认值:true将日志写出到标准错误输出(stderr)而不是写入到日志文件。
--log-dir string此标志为非空字符串时,日志文件会写入到所给的目录中。
--allocate-node-cidrs基于云驱动来为 Pod 分配和设置子网掩码。
--cluster-cidr string集群中 Pods 的 CIDR 范围。要求 --allocate-node-cidrs 标志为 true。

可新增参数

参数

含义

--kube-api-qps float32     默认值:20与 API 服务器通信时每秒请求数(QPS)限制。
--kube-api-burst int32     默认值:30与 Kubernetes API 服务器通信时突发峰值请求个数上限。
--concurrent-* int32 默认值:5所有带有 --concurrent 前缀的参数;可以并发同步的对象的个数。数值越大意味着对对象的响应越及时, 同时也意味着更大的 CPU(和网络带宽)压力。
--controllers stringSlice     默认值:[*] 要启用的控制器列表。* 表示启用所有默认启用的控制器;默认禁用的控制器有:bootstrapsigner 和 tokencleaner。集群数量大时可以禁用不需要的 controller。

Kubelet

原有参数

参数

含义

--hostname-override string如果为非空,将使用此字符串而不是实际的主机名作为节点标识。如果设置了 --cloud-provider,则云驱动将确定节点的名称 (请查阅云服务商文档以确定是否以及如何使用主机名)
--log-dir string如果此值为非空,则在所指定的目录中写入日志文件。
--node-labels mapStringStringkubelet 在集群中注册本节点时设置的标签。标签以 key=value 的格式表示,多个标签以逗号分隔。
--node-ip string节点的 IP 地址。如果设置,kubelet 将使用该 IP 地址作为节点的 IP 地址。
--pod-infra-container-image string指定基础设施镜像,Pod 内所有容器与其共享网络和 IPC 命名空间。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--rotate-certificates设置当客户端证书即将过期时 kubelet 自动从 kube-apiserver 请求新的证书进行轮换。 已弃用:应在 --config 所给的配置文件中进行设置。
--feature-gates mapStringBool用于 alpha 实验性质的特性开关组,每个开关以 key=value 形式表示。已弃用:应在 --config 所给的配置文件中进行设置。
--network-plugin string<警告:alpha 特性> 设置 kubelet/Pod 生命周期中各种事件调用的网络插件的名称。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。

因 config 文件内涉及参数过多,此处不会一一列出。

可新增参数

参数

含义

参数

含义

--serialize-image-pulls     默认值:true逐一拉取镜像。建议 *不要* 在 docker 守护进程版本低于 1.9 或启用了 Aufs 存储后端的节点上 更改默认值。已弃用:应在 --config 所给的配置文件中进行设置。
--image-pull-progress-deadline duration     默认值:1m0s如果在该参数值所设置的期限之前没有拉取镜像的进展,镜像拉取操作将被取消。 仅当容器运行环境设置为 docker 时,此特定于 docker 的参数才有效。
--max-pods int32     默认值:110此 kubelet 能运行的 Pod 最大数量。 已弃用:应在 --config 所给的配置文件中进行设置。
--kube-reserved mapStringString     默认值:<None>
kubernetes 系统预留的资源配置,以一组 资源名称=资源数量 格式表示。 (例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100')。 已弃用:应在 --config 所给的配置文件中进行设置。
--kube-reserved-cgroup string     默认值:""给出某个顶层 cgroup 绝对名称,该 cgroup 用于管理通过标志 --kube-reserved 为 kubernetes 组件所预留的计算资源。已弃用:应在 --config 所给的配置文件中进行设置。
--system-reserved mapStringString     默认值:<None>
系统预留的资源配置,以一组 资源名称=资源数量 的格式表示,(例如:cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100') 已弃用:应在 --config 所给的配置文件中进行设置。
--system-reserved-cgroup string     默认值:""此标志给出一个顶层 cgroup 绝对名称,该 cgroup 用于管理非 kubernetes 组件, 这些组件的计算资源通过 --system-reserved 标志进行预留。 例如 "/system-reserved"。 已弃用:应在 --config 所给的配置文件中进行设置。 

关键内核参数说明

参数名称

参数位置

TCOS 3.2.0 默认值

说明

参考文档

kernel.pid_max

/etc/sysctl.conf

节点进程 ID数量上限,查看参数:

sysctl kernel.pid_max

修改节点进程 ID数量上限kernel.pid_max

(待更新)

RuntimeMaxUse

/etc/systemd/journald.conf

节点日志缓存内存占用量上限,若不配置长时间运行会占用较大内存,查看参数:

cat /etc/systemd/journald.conf | grep RuntimeMaxUse

修改节点日志缓存内存占用量上限RuntimeMaxUse

(待更新)

Openfiles

/etc/security/limits.conf

节点单进程最大文件句柄数,可视业务情况调整,查看参数:

ulimit -n

修改最大文件句柄数

(Openfiles容器内部)

LimitNOFILE

LimitNPROC

/etc/docker/daemon.json

容器内部单进程最大文件句柄数,可视业务情况调整,查看参数:

cat /proc/`pidof dockerd`/limits | grep files

file-max

/etc/sysctl.conf

系统整体最大文件句柄数,可视业务情况调整,查看参数:

sysctl fs.file-max

nf_conntrack_buckets

nf_conntrack_max

/etc/sysctl.conf

连接跟踪表容量,可视业务场景调整。

计算桶占用率= [nf_conntrack_count] / [nf_conntrack_buckets]。

通过调整buckets值,将占用率调整至0.7以下,查看参数:

sysctl net.netfilter.nf_conntrack_count

sysctl net.netfilter.nf_conntrack_buckets

sysctl net.netfilter.nf_conntrack_max

修改节点内核参数

net.netfilter.nf_conntrack_tcp_timeout_close

/etc/sysctl.conf

连接跟踪表里处于close状态连接的表项的过期时间,缩短过期时间可加快回收,查看参数:

sysctl net.netfilter.nf_conntrack_tcp_timeout_close

net.netfilter.nf_conntrack_tcp_be_liberal

/etc/sysctl.conf

参数值为0或1。

  • 0:表示关闭,所有不在TCP窗口中的RST包都被标志为无效。
  • 1:表示开启,只有不在TCP窗口内的RST包被标志为无效。容器场景下,开启这个参数可以避免NAT过的TCP连接带宽受限。

查看参数:

sysctl net.netfilter.nf_conntrack_tcp_be_liberal

tcp_keepalive_time

/etc/sysctl.conf

TCP 超时时长,即发送 keepalive 探测消息的间隔时间。参数值过大可能导致 TCP 挥手时间过长,长时间下造成大量连接卡在 Close_wait 阶段,耗尽系统资源,查看参数:

sysctl net.ipv4.tcp_keepalive_time

tcp_max_syn_backlog

/etc/sysctl.conf

TCP 最大半连接数,SYN_RECV 队列中的最大连接数,查看参数:

sysctl net.ipv4.tcp_max_syn_backlog

tcp_max_tw_buckets

/etc/sysctl.conf

指定任何时候允许存在的处于“time-wait”状态的最大套接字数,参数值过大时易耗尽节点资源。

查看参数:

sysctl net.ipv4.tcp_max_tw_buckets

net.core.somaxconn

/etc/sysctl.conf

TCP最大连接数,ESTABLISHED 队列的最大大小,参数值过小时极易不足,查看参数:

sysctl net.core.somaxconn

max_user_instances

/etc/sysctl.conf

每个用户允许的最大 inotify 实例数,参数值过小时容器场景下极易不足,查看参数:

sysctl fs.inotify.max_user_instances

max_user_watches

/etc/sysctl.conf

所有监视实例的最大目录数,参数值过小时容器场景极易不足。

查看参数:

sysctl fs.inotify.max_user_watches

netdev_max_backlog

/etc/sysctl.conf

网络协议栈收包队列大小,参数值过小时极易不足,查看参数:

sysctl net.core.netdev_max_backlog

net.core.wmem_max

net.core.rmem_max

/etc/sysctl.conf

收发缓冲区内存大小(字节),参数值过小时大文件场景下易不足,查看参数:

sysctl net.core.wmem_max

sysctl net.core.rmem_max

net.core.wmem_max,建议值:16777216

net.core.wmem_max,建议值:16777216

net.ipv4.neigh.default.gc_thresh1

net.ipv4.neigh.default.gc_thresh2

net.ipv4.neigh.default.gc_thresh3

/etc/sysctl.conf

ARP表项的垃圾回收调优,查看参数:

sysctl net.ipv4.neigh.default.gc_thresh1

sysctl net.ipv4.neigh.default.gc_thresh2

sysctl net.ipv4.neigh.default.gc_thresh3

vm.max_map_count

/etc/sysctl.conf

参数值过小时,安装elk时会提示不足,查看参数:

sysctl vm.max_map_count

TCOS 3.2.0 版本现有参数

参数名称

参数位置

TCOS 默认值

说明

fs.file-max/etc/sysctl.conf26234859
vm.max_map_count/etc/sysctl.conf262144
vm.swappiness/etc/sysctl.conf0
vm.nr_hugepages/etc/sysctl.conf0
net.netfilter.nf_conntrack_max/etc/sysctl.conf1000000
vm.vfs_cache_pressure/etc/sysctl.conf1000
vm.min_free_kbytes/etc/sysctl.conf1048576
net.bridge.bridge-nf-call-iptables/etc/sysctl.conf1
net.ipv4.tcp_tw_recycle/etc/sysctl.conf0
net.ipv4.tcp_timestamps/etc/sysctl.conf0
net.ipv4.tcp_keepalive_time/etc/sysctl.conf300
net.ipv4.conf.all.forwarding/etc/sysctl.conf1
net.core.rmem_max/etc/sysctl.conf212992
fs.aio-max-nr/etc/sysctl.conf1048576
fs.inotify.max_user_instances/etc/sysctl.conf8192
kernel.pid_max/etc/sysctl.conf4194304

(Openfiles容器内部)

LimitNOFILE
LimitNPROC

/etc/docker/daemon.json1048576

TCOS 3.2.2 版本现有参数

参数名称

参数位置

TCOS 默认值

说明

fs.file-max/etc/sysctl.conf26234859
vm.max_map_count/etc/sysctl.conf262144
vm.swappiness/etc/sysctl.conf0
vm.nr_hugepages/etc/sysctl.conf0
net.netfilter.nf_conntrack_max/etc/sysctl.conf1000000
vm.vfs_cache_pressure/etc/sysctl.conf1000
vm.min_free_kbytes/etc/sysctl.conf1048576
net.bridge.bridge-nf-call-iptables/etc/sysctl.conf1
net.ipv4.tcp_tw_recycle/etc/sysctl.conf0
net.ipv4.tcp_timestamps/etc/sysctl.conf0
net.ipv4.tcp_keepalive_time/etc/sysctl.conf300
net.ipv4.conf.all.forwarding/etc/sysctl.conf1
net.core.rmem_max/etc/sysctl.conf212992
fs.aio-max-nr/etc/sysctl.conf1048576
fs.inotify.max_user_instances/etc/sysctl.conf8192
kernel.pid_max/etc/sysctl.conf4194304

(Openfiles容器内部)

LimitNOFILE
LimitNPROC

/etc/docker/daemon.json"default-ulimits": {
"nofile": {
"Hard": 1048576,
"Name": "nofile",
"Soft": 1048576
}
}
kernel.numa_balancing/etc/sysctl.conf0以下为新增
net.core.somaxconn/etc/sysctl.conf1024
net.core.rmem_max/etc/sysctl.conf16777216
net.core.wmem_max/etc/sysctl.conf16777216
net.ipv4.tcp_rmem/etc/sysctl.conf4096 87380 16777216
net.ipv4.tcp_wmem/etc/sysctl.conf4096 87380 16777216
net.ipv4.max_tw_buckets/etc/sysctl.conf360000
net.ipv4.tcp_max_tw_buckets/etc/sysctl.conf360000
net.ipv4.tcp_max_syn_backlog/etc/sysctl.conf8192
net.ipv4.tcp_mem/etc/sysctl.conf94500000 915000000 927000000
net.ipv4.tcp_max_orphans/etc/sysctl.conf3276800
openfile/etc/security/limits.confroot soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

新版本待新增优化参数

参数名称

参数位置

TCOS 默认值

说明

Openfiles/etc/security/limits.conf26234859

项目上参数使用

可增加:

kernel.sysrq=1
vm.swappiness = 0    ##控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。
vm.max_map_count=500000    ##限制一个进程可以拥有的虚拟内存区域的数量
fs.file-max=655360    ## 系统级别能够打开的文件句柄的数量
fs.nr_open=52706963  
fs.inotify.max_user_instances=8192   ##默认值:128 指定每一个 real user ID可创建的 inotify instances的数量上限
fs.inotify.max_user_watches=1048576   ## 默认值:8192 指定了每一个inotify instance相关联的watches 上限
net.ipv4.ip_forward=1  #开启ip转发支持,是NAT实现的前提
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024  #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_keepalive_time=600  #默认值 7200seconds(2h)
net.ipv4.tcp_keepalive_intvl=30   #默认值 9
net.ipv4.tcp_keepalive_probes=10   ##默认值75 seconds,tcp_keepalive这3个参数是与TCP keepalive有关的,
net.ipv4.tcp_fin_timeout=3
net.ipv4.tcp_max_orphans=655360
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.ip_local_port_range=20000 60999
net.netfilter.nf_conntrack_max=2310720  ##允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的任务(连接跟踪条目)

net.netfilter.nf_conntrack_tcp_timeout_established=300
net.netfilter.nf_conntrack_buckets=655360       # 哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)
net.core.somaxconn=8192

net.core.netdev_max_backlog=10000    # 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

 net.bridge.bridge-nf-call-iptables=1

 net.bridge.bridge-nf-call-ip6tables=1

交行:
vm.vfs_cache_pressure = 100
vm.dirty_background_ratio = 10
vm.dirty_ratio =20
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs =3000
net.core.rmem_default = 12582912
net.core.wmem_default = 12582912
net.core.rmem_max = 12582912
net.core.wmem_max = 12582912
net.core.netdev_max_backlog = 9000     #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.somaxconn = 512
net.ipv4.tcp_rmem = 4096 87380 9437184
net.ipv4.tcp_wmem = 4096 87380 9437184

# 配置arp cache 大小 
net.ipv4.neigh.default.gc_thresh1=1024   # 存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。 
net.ipv4.neigh.default.gc_thresh2=4096   # 保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。 
net.ipv4.neigh.default.gc_thresh3=8192   # 保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。
以上三个参数,当内核维护的arp表过于庞大时候,可以考虑优化

k8s 组件日志配置

组件名称日志规则日志路径是否包含rotate  说明
apiserver

--audit-log-maxage=30 \
--audit-log-maxbackup=3 \
--audit-log-maxsize=100 \
--audit-log-path=/var/log/kubernetes/audit.log

/var/log/tos/apiserver/apiserver.logYes
/usr/sbin/logrotate /etc/logrotate.d/allpodlogs

/var/log/tos/apiserver/apiserver.log
/var/log/tos/controller/controller.log
/var/log/tos/scheduler/scheduler.log
/var/log/tos/proxy/proxy.log
/var/log/tos/etcd/etcd.log
/var/log/tos/license-server/license-server.log
/var/log/tos/transwarp-etcd/etcd.log
/var/log/tos/kuberouter/kube-router.log
/var/log/tos/flannel.log
/var/log/tos/cni.log
/var/log/tos/cni-audit.log
/var/log/tos/app-manager.log
{
rotate 5
copytruncate
missingok
notifempty
compress
size 100M
dateext
dateformat -%Y%m%d-%s
}

参考项目:

Linux日志切割神器logrotate原理介绍和配置详解

controller-manager

--logtostderr=true \
--log-dir=/var/log/kubernetes/

--log-file-max-size uint     默认值:1800(MB)

/var/log/tos/controller/controller.logYes
kube-proxy-/var/log/tos/proxy/proxy.logYes
etcd-/var/log/tos/etcd/etcd.logYes
venus-scheduler

--logtostderr=true \
--log-dir=/var/log/kubernetes/

/var/log/tos/scheduler/scheduler.log
scheduler

--logtostderr=true \
--log-dir=/var/log/kubernetes/ \

/var/log/tos/scheduler/scheduler.logYes
cni-/var/log/tos/cni.logYes
flannel-/var/log/tos/flannel.logYes

docker 容器日志配置

服务

日志规则

日志路径

docker

container

"log-opts": {
"max-file": "2", #最大存储2个文件
"max-size": "500m" #每个文件最大500M
}

/var/lib/docker/containers/*/*-json.log

系统日志配置

服务

类型

日志规则

日志路径

docker

kubelet

systemd-journald

[Journal]

Compress=yes #压缩存储

SystemMaxUse=24G #全部日志最大占用空间
SystemKeepFree=5G # 除日志外至少保留多少空间

SystemMaxFileSize=1G #单个日志文件最大空间

MaxRetentionSec=1month #日志文件的最大保留期限

/var/log/journal

最大文件句柄数即打开文件数的最大限制,Linux系统中包含两个文件句柄限制:一个是系统级的,即所有用户的进程同时打开文件数的上限;一种是用户级的,即单个用户进程打开文件数的上限。但是在容器中,还有另一个文件句柄限制,即容器内部单进程最大文件句柄数。

修改节点系统级最大文件句柄数

登录节点,查看 /etc/sysctl.conf 文件。

cat /etc/sysctl.conf

修改fs.file-max参数,fs.file-max=1048576 为内核参数名称及建议取值。

  • 若查看sysctl.conf文件时,文件中已设置fs.file-max值,可通过以下命令进行修改。

sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p

也可以通过编辑 /etc/sysctl.conf 来修改。

  • 若查看sysctl.conf文件时,文件中还未设置fs.file-max值,可通过以下命令添加。

echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p

执行以下命令检查是否修改成功,当返回与修改值一致时说明修改正确。

# sysctl fs.file-max

fs.file-max = 1048576

修改节点单进程最大文件句柄数

登录节点,查看/etc/security/limits.conf文件。

cat /etc/security/limits.conf

节点单进程最大文件句柄数通过以下参数设置:

...

root soft nofile 65535

root hard nofile 65535

* soft nofile 65535

* hard nofile 65535

通过sed命令修改最大文件句柄数,其中65535为最大文件句柄数的建议取值。

sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf

重新登录节点,执行以下命令检查是否修改成功,当返回与修改值一致时说明修改正确。

# ulimit -n

65535

修改容器单进程最大文件句柄数

查看 docker daemon 配置

cat /etc/docker/daemon.json

修改 docker daemon 配置

参考如下位置:

重新加载以及重启

systemctl daemon-reload && systemctl restart docker

1. 问题描述

tcos3.2.0 版本之前在集群节点异常后 30min 才会对异常节点上的 pod 开始驱逐,当集群一节点真的异常,比如宕机时,这种情况对异常节点上的应用影响就很大了,针对这种情况,tcos3.2.0 版本进行了优化,修改这个超时时间为 5min,当在出现节点异常时,5min 后就开始进行 pod 的驱逐。

2. 影响版本

tcos3.2.0 之前所有版本

3. 解决方案

3.1 controller-manager 配置修改

tos 环境默认 3 个 master 节点,kube-controller-manager 为静态 pod 部署方式,所以默认也有3个副本,3个节点的 kube-controller-manager 依次重启

修改 kube-controller-manager 文件 --pod-eviction-timeout 参数的值 为 5m ,并重启

  1. 停止第一台 master 节点的 kube-controller-manager

    cd /opt/kubernetes/manifests-multi/

    mv kube-controller-manager.manifest /opt/kubernetes/      ## tos 和 tdh 环境 manifest文件的名称不一样,本文以 tos 环境为例

    docker ps grep controller    ## 确保 controller-manager container 不存在

  2. 修改第一台 master 节点的 controller-manager 配置文件

    vim /opt/kubernetes/kube-controller-manager.manifest     ## 修改 --pod-eviction-timeout 参数的值为 5m,具体可参考下图:

  3. 启动第一台 master 节点的 controller-manager 服务

    mv /opt/kubernetes/kube-controller-manager.manifest  /opt/kubernetes/manifests-multi/

    docker ps grep controller    ## 确保 controller-manager container 正常 Running

其他 2 台 master 节点的 controller 同样操作。

3.2 apiserver 配置修改

tos 环境默认 3 个 master 节点,kube-apiserver 为静态 pod 部署方式,所以默认也有3个副本,3个节点的 kube-apiserver 依次重启

修改 kube-apiserver 文件 --default-not-ready-toleration-seconds 和 --default-unreachable-toleration-seconds 参数的值 为 5m ,并重启

  1. 停止第一台 master 节点的 apiserver

    cd /opt/kubernetes/manifests-multi/

    mv kube-apiserver.manifest /opt/kubernetes/      ## tos 和 tdh 环境 manifest文件的名称不一样,本文以 tos 环境为例

    docker ps grep apiserver    ## 确保 apiserver container 不存在

  2. 修改第一台 master 节点的 apiserver 配置文件

    vim /opt/kubernetes/kube-apiserver.manifest     ## 修改 --pod-eviction-timeout 参数的值为 5m,具体可参考下图:

  3. 启动第一台 master 节点的 controller-manager 服务

    mv /opt/kubernetes/kube-apiserver.manifest  /opt/kubernetes/manifests-multi/

    docker ps grep apiserver    ## 确保 apiserver container 正常 Running

其他 2 台 master 节点的 apiserver 同样操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值