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 string | CIDR 表示的 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 string | TLS 的客户端证书文件的路径。 |
--kubelet-client-key string | TLS 客户端密钥文件的路径。 |
--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 mapStringString | kubelet 在集群中注册本节点时设置的标签。标签以 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数量上限,查看参数:
| (待更新) | ||
RuntimeMaxUse | /etc/systemd/journald.conf | 节点日志缓存内存占用量上限,若不配置长时间运行会占用较大内存,查看参数:
| (待更新) | ||
Openfiles | /etc/security/limits.conf | 节点单进程最大文件句柄数,可视业务情况调整,查看参数:
| |||
(Openfiles容器内部) LimitNOFILE LimitNPROC | /etc/docker/daemon.json | 容器内部单进程最大文件句柄数,可视业务情况调整,查看参数:
| |||
file-max | /etc/sysctl.conf | 系统整体最大文件句柄数,可视业务情况调整,查看参数:
| |||
nf_conntrack_buckets nf_conntrack_max | /etc/sysctl.conf | 连接跟踪表容量,可视业务场景调整。 计算桶占用率= [nf_conntrack_count] / [nf_conntrack_buckets]。 通过调整buckets值,将占用率调整至0.7以下,查看参数:
| |||
net.netfilter.nf_conntrack_tcp_timeout_close | /etc/sysctl.conf | 连接跟踪表里处于close状态连接的表项的过期时间,缩短过期时间可加快回收,查看参数:
| |||
net.netfilter.nf_conntrack_tcp_be_liberal | /etc/sysctl.conf | 参数值为0或1。
查看参数:
| |||
tcp_keepalive_time | /etc/sysctl.conf | TCP 超时时长,即发送 keepalive 探测消息的间隔时间。参数值过大可能导致 TCP 挥手时间过长,长时间下造成大量连接卡在 Close_wait 阶段,耗尽系统资源,查看参数:
| |||
tcp_max_syn_backlog | /etc/sysctl.conf | TCP 最大半连接数,SYN_RECV 队列中的最大连接数,查看参数:
| |||
tcp_max_tw_buckets | /etc/sysctl.conf | 指定任何时候允许存在的处于“time-wait”状态的最大套接字数,参数值过大时易耗尽节点资源。 查看参数:
| |||
net.core.somaxconn | /etc/sysctl.conf | TCP最大连接数,ESTABLISHED 队列的最大大小,参数值过小时极易不足,查看参数:
| |||
max_user_instances | /etc/sysctl.conf | 每个用户允许的最大 inotify 实例数,参数值过小时容器场景下极易不足,查看参数:
| |||
max_user_watches | /etc/sysctl.conf | 所有监视实例的最大目录数,参数值过小时容器场景极易不足。 查看参数: sysctl fs.inotify.max_user_watches | |||
netdev_max_backlog | /etc/sysctl.conf | 网络协议栈收包队列大小,参数值过小时极易不足,查看参数:
| |||
net.core.wmem_max net.core.rmem_max | /etc/sysctl.conf | 收发缓冲区内存大小(字节),参数值过小时大文件场景下易不足,查看参数:
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表项的垃圾回收调优,查看参数:
| |||
vm.max_map_count | /etc/sysctl.conf | 参数值过小时,安装elk时会提示不足,查看参数:
|
TCOS 3.2.0 版本现有参数
参数名称 | 参数位置 | TCOS 默认值 | 说明 |
---|---|---|---|
fs.file-max | /etc/sysctl.conf | 26234859 | |
vm.max_map_count | /etc/sysctl.conf | 262144 | |
vm.swappiness | /etc/sysctl.conf | 0 | |
vm.nr_hugepages | /etc/sysctl.conf | 0 | |
net.netfilter.nf_conntrack_max | /etc/sysctl.conf | 1000000 | |
vm.vfs_cache_pressure | /etc/sysctl.conf | 1000 | |
vm.min_free_kbytes | /etc/sysctl.conf | 1048576 | |
net.bridge.bridge-nf-call-iptables | /etc/sysctl.conf | 1 | |
net.ipv4.tcp_tw_recycle | /etc/sysctl.conf | 0 | |
net.ipv4.tcp_timestamps | /etc/sysctl.conf | 0 | |
net.ipv4.tcp_keepalive_time | /etc/sysctl.conf | 300 | |
net.ipv4.conf.all.forwarding | /etc/sysctl.conf | 1 | |
net.core.rmem_max | /etc/sysctl.conf | 212992 | |
fs.aio-max-nr | /etc/sysctl.conf | 1048576 | |
fs.inotify.max_user_instances | /etc/sysctl.conf | 8192 | |
kernel.pid_max | /etc/sysctl.conf | 4194304 | |
(Openfiles容器内部) LimitNOFILE | /etc/docker/daemon.json | 1048576 | |
TCOS 3.2.2 版本现有参数
参数名称 | 参数位置 | TCOS 默认值 | 说明 |
---|---|---|---|
fs.file-max | /etc/sysctl.conf | 26234859 | |
vm.max_map_count | /etc/sysctl.conf | 262144 | |
vm.swappiness | /etc/sysctl.conf | 0 | |
vm.nr_hugepages | /etc/sysctl.conf | 0 | |
net.netfilter.nf_conntrack_max | /etc/sysctl.conf | 1000000 | |
vm.vfs_cache_pressure | /etc/sysctl.conf | 1000 | |
vm.min_free_kbytes | /etc/sysctl.conf | 1048576 | |
net.bridge.bridge-nf-call-iptables | /etc/sysctl.conf | 1 | |
net.ipv4.tcp_tw_recycle | /etc/sysctl.conf | 0 | |
net.ipv4.tcp_timestamps | /etc/sysctl.conf | 0 | |
net.ipv4.tcp_keepalive_time | /etc/sysctl.conf | 300 | |
net.ipv4.conf.all.forwarding | /etc/sysctl.conf | 1 | |
fs.aio-max-nr | /etc/sysctl.conf | 1048576 | |
fs.inotify.max_user_instances | /etc/sysctl.conf | 8192 | |
kernel.pid_max | /etc/sysctl.conf | 4194304 | |
(Openfiles容器内部) LimitNOFILE | /etc/docker/daemon.json | "default-ulimits": { "nofile": { "Hard": 1048576, "Name": "nofile", "Soft": 1048576 } } | |
kernel.numa_balancing | /etc/sysctl.conf | 0 | 以下为新增 |
net.core.somaxconn | /etc/sysctl.conf | 1024 | |
net.core.rmem_max | /etc/sysctl.conf | 16777216 | |
net.core.wmem_max | /etc/sysctl.conf | 16777216 | |
net.ipv4.tcp_rmem | /etc/sysctl.conf | 4096 87380 16777216 | |
net.ipv4.tcp_wmem | /etc/sysctl.conf | 4096 87380 16777216 | |
net.ipv4.max_tw_buckets | /etc/sysctl.conf | 360000 | |
net.ipv4.tcp_max_tw_buckets | /etc/sysctl.conf | 360000 | |
net.ipv4.tcp_max_syn_backlog | /etc/sysctl.conf | 8192 | |
net.ipv4.tcp_mem | /etc/sysctl.conf | 94500000 915000000 927000000 | |
net.ipv4.tcp_max_orphans | /etc/sysctl.conf | 3276800 | |
openfile | /etc/security/limits.conf | root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 | |
新版本待新增优化参数
参数名称 | 参数位置 | TCOS 默认值 | 说明 |
---|---|---|---|
Openfiles | /etc/security/limits.conf | 26234859 | |
项目上参数使用
可增加:
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 \ | /var/log/tos/apiserver/apiserver.log | Yes | /usr/sbin/logrotate /etc/logrotate.d/allpodlogs /var/log/tos/apiserver/apiserver.log | 参考项目: |
controller-manager | --logtostderr=true \ | /var/log/tos/controller/controller.log | Yes | ||
kube-proxy | - | /var/log/tos/proxy/proxy.log | Yes | ||
etcd | - | /var/log/tos/etcd/etcd.log | Yes | ||
venus-scheduler | --logtostderr=true \ | /var/log/tos/scheduler/scheduler.log | |||
scheduler | --logtostderr=true \ | /var/log/tos/scheduler/scheduler.log | Yes | ||
cni | - | /var/log/tos/cni.log | Yes | ||
flannel | - | /var/log/tos/flannel.log | Yes |
docker 容器日志配置
服务 | 日志规则 | 日志路径 |
---|---|---|
docker container | "log-opts": { | /var/lib/docker/containers/*/*-json.log |
系统日志配置
服务 | 类型 | 日志规则 | 日志路径 |
---|---|---|---|
docker kubelet | systemd-journald | [Journal] SystemMaxUse=24G #全部日志最大占用空间 SystemMaxFileSize=1G #单个日志文件最大空间 MaxRetentionSec=1month #日志文件的最大保留期限 | /var/log/journal |
最大文件句柄数即打开文件数的最大限制,Linux系统中包含两个文件句柄限制:一个是系统级的,即所有用户的进程同时打开文件数的上限;一种是用户级的,即单个用户进程打开文件数的上限。但是在容器中,还有另一个文件句柄限制,即容器内部单进程最大文件句柄数。
修改节点系统级最大文件句柄数
登录节点,查看 /etc/sysctl.conf 文件。
|
修改fs.file-max参数,fs.file-max=1048576 为内核参数名称及建议取值。
- 若查看sysctl.conf文件时,文件中已设置fs.file-max值,可通过以下命令进行修改。
|
也可以通过编辑 /etc/sysctl.conf 来修改。
- 若查看sysctl.conf文件时,文件中还未设置fs.file-max值,可通过以下命令添加。
|
执行以下命令检查是否修改成功,当返回与修改值一致时说明修改正确。
|
修改节点单进程最大文件句柄数
登录节点,查看/etc/security/limits.conf文件。
|
节点单进程最大文件句柄数通过以下参数设置:
|
通过sed命令修改最大文件句柄数,其中65535为最大文件句柄数的建议取值。
|
重新登录节点,执行以下命令检查是否修改成功,当返回与修改值一致时说明修改正确。
|
修改容器单进程最大文件句柄数
查看 docker daemon 配置
|
修改 docker daemon 配置
参考如下位置:
重新加载以及重启
|
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 ,并重启
-
停止第一台 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 不存在
-
修改第一台 master 节点的 controller-manager 配置文件
vim
/opt/kubernetes/kube-controller-manager
.manifest
## 修改 --pod-eviction-timeout 参数的值为 5m,具体可参考下图:
-
启动第一台 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 ,并重启
-
停止第一台 master 节点的 apiserver
cd
/opt/kubernetes/manifests-multi/
mv
kube-apiserver.manifest
/opt/kubernetes/
## tos 和 tdh 环境 manifest文件的名称不一样,本文以 tos 环境为例
docker
ps
|
grep
apiserver
## 确保 apiserver container 不存在
-
修改第一台 master 节点的 apiserver 配置文件
vim
/opt/kubernetes/kube-apiserver
.manifest
## 修改 --pod-eviction-timeout 参数的值为 5m,具体可参考下图:
-
启动第一台 master 节点的 controller-manager 服务
mv
/opt/kubernetes/kube-apiserver
.manifest
/opt/kubernetes/manifests-multi/
docker
ps
|
grep
apiserver
## 确保 apiserver container 正常 Running
其他 2 台 master 节点的 apiserver 同样操作。