生产环境k8s集群优化技巧_第1页
生产环境k8s集群优化技巧_第2页
生产环境k8s集群优化技巧_第3页
生产环境k8s集群优化技巧_第4页
生产环境k8s集群优化技巧_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、生产环境k8s集群优化技巧1、内核参数调化fs. fi1e-max=1000000max-file表示系统级别的能够翻开的文件句柄的数量,一般如果遇到文件句柄到达上限 时,会碰到“Too many open files或者 Socket/File: Can t open so many files 等错误。配置arp cache大小net. ipv4. neigh. default. gc_threshl=1024存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是 128onet. ipv4. neigh, default. gc_thresh2=4096保存在A

2、RP高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过 这个数字5秒。缺省值是512Onet. ipv4. neigh, default. gc_thresh3=8192保存在ARP高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器 将马上运行。缺省值是1024o以上三个参数,当内核维护的arp表过于庞大时候,可以考虑优化net. netfilter. nf_conntrack_max=10485760允许的最大跟踪连接条目,是在内核内存中netfilter可以同时处理的“任务”(连接跟踪 条目)net. netfilter. nf_conntrack_tc

3、p_timeout_established=300net. netfilter. nf_conntrack_buckets=655360哈希表大小(只读)(64位系统、8G内存默认65536, 16G翻倍,如此类推)net. dev max backlog=10000每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最 大数目。fs. inotify. max_user_instances=524288默认值:128指定了每一个real user ID可创立的inotify instatnces的数量上限fs. inotify. max user_watches=5

4、24288默认值:8192指定了每个inotify instance相关联的watches的上限2、etcd性能优化l、Etcd对磁盘写入延迟非常敏感,因此对于负载较重的集群,etcd 一定要使用local SSD 或者高性能云盘。可以使用fi。测量磁盘实际顺序IOPS。fio -filename=/dev/sdal -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group reporting -name=file由于etcd必须将数据持久保存到磁

5、盘日志文件中,因此来自其他进程的磁盘活动可能 会导致增加写入时间,结果导致3tcd请求超时和临时leader丧失。因此可以给etcd进程 更高的磁盘优先级,使etcd服务可以稳定地与这些进程一起运行。ionice -c2 -n0 -p $ (pgrep etcd) | header3、默认etcd空间配额大小为2G,超过2G将不再写入数据。通过给etcd配置一quota- backend-bytes参数增大空间配额,最大支持8G。| 一quota-backend-bytes 8589934592 | header |如果etcd leader处理大量并发客户端请求,可能由于网络拥塞而延迟处理f

6、ollower对等请求。在follower节点上可能会产生如下的发送缓冲区错误的消息:dropped MsgProp to 247ae21ff9436b2d since streamMsg,s sending buffer is full dropped MsgAppResp to 247ae21ff9436b2d since streamMsg,s sending buffer is full 可以通过提高etcd对于对等网络流量优先级来解决这些错误。在Linux上,可以使用tc 对对等流量进行优先级排序:tc qdisc add dev ethO root handle 1: prio b

7、ands 3tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1 tc filter add dev Oxffff flowid 1:1ethO par

8、ent 1:ethO parent 1:ethO parent 1:ethO parent 1:protocolprotocolprotocolprotocolip prio 1 u32 match ip sport 2380ip prio 1 u32 match ip dport 2380ip prio 2 u32 match ip sport 2379ip prio 2 u32 matchip dport 2379为了在大规模集群下提高性能,可以将events存储在单独的ETCD实例中,可以配置 kube-apiserver 参数:-eted-servers= :etcd 1:2379,

9、:/etcd2:2379, :etcd3:2379一eted-servers-overrides=zz/events# :/etcd4:2379, : /etcd5:2379, :etcd6:23793、docker 优化1、配置docker daemon并行拉取镜像,以提高镜像拉取效率,在/etc/docker/daemon. json 中添加以下配置:,/max-concurrent-downloads,z: 10可以使用local SSD或者高性能云盘作为docker容器的持久数据目录,在 /etc/docker/daemon, json 中添加以下配置: “data-root: /ss

10、dmountdir”启动pod时都会拉取pause镜像,为了减小拉取pause镜像网络带宽,可以每个node 预加载pause镜像,在每个node节点上执行以下命令: docker load -i /tmp/preloaded_pause_image. tar 4、kubelet 优化1设置一serialize-image-pulls=false,该选项配置串行拉取镜像,默认值时true, 配置为false可以增加并发度。但是如果docker daemon版本小于1. 9,且使用aufs存储那么不能改动该选项。设置-image-pul 1-progress-deadline=30,配置镜像拉取

11、超时。默认值时1分,对 于大镜像拉取需要适量增大超时时间。kubelet单节点允许运行的最大Pod数:-max-pods=110 (默认是110,可以根据实 际需要设置)5、kube-apiserver 优化设置 一apiserver-count 和 一endpoint-reconciler-type, 可使得多个 kube- apiserver实例加入到Kubernetes Service的endpoints中,从而实现高可用。设置 一一max-requests-inflight 和 一一max-mutating-requests-inflight,默认是 200 和400o节点数量在100

12、0 - 3000之间时,推荐:-max-requests-inflight=l500-max-mutating-requestsinflight=500节点数量大于3000时,推荐:一max-requests-inflight=3000-max-mutating-requests-inflight=1000使用-target-ram-mb配置kube-apiserver的内存,按以下公式得到一个合理的值:-target-ram-mb=node_nums * 606、kube-control ler-manager 优化6. 1 kube-controller-manager可以通过leader

13、 election实现高可用,添加以下命令行 参数:一leader-elect=true一leader-elect-lease-duration=15s一一leaderelect-renew-deadline=10s一leader-elect-resource-1ock=endpoints-leader-elect-retry-period=2s2、限制与kube-apiserver通信的qps,添加以下命令行参数:一kube-api-qps=100-一kube-api-burst=1507、kube-scheduler 优化1、kube-scheduler可以通过leader electio

14、n实现高可用,添加以下命令行参数:一leader-elect=true一leader-elect-lease-duration=15s-leader-elect-renew-deadline=10s一leader-elect - resourceTock = endpoints一leader-elect-retry-period=2s2、限制与kube-apiserver通信的qps,添加以下命令行参数:一kube-api-qps=100一kube-api-burst=1508、pod优化为容器设置资源请求和限制,尤其是一些基础插件服务spec, containers. resources,

15、limits, cpu spec. containers. resources. limits. memory spec, containers. resources, requests.cpu spec, containers. resources, requests, memory spec, containers. resources, limits, ephemeral-storage spec, containers. resources, requests, ephemeral-storage在k8s中,会根据pod的limit和requests的配置将pod划分为不同的qos类别

16、: GuaranteedBurstableBestEffort当机器可用资源不够时,kubelet会根据qos级别划分迁移驱逐pod。被驱逐的优先级: BestEffort Burstable Guaranteedo对关键应用使用 nodeAffinity podAffinity 和 podAntiAffinity 等保护,使其调 度分散到不同的node _Eo比方kube-dns配置3尽量使用控制器来管理容器(如Deployments StatefulSet DaemonSet Job等)9、kubernetes集群数据备份与还原1 etcd数据备份(备份数据前先找到etcd集群当前的lea

17、der) TOC o 1-5 h z ETCDCTL API=3etcdctl-endpoints=127. 0. 0. 1:2379-cert=/etc/kubernetes/pki/etcd/server, crt-key=/etc/kubernetes/pki/etcd/server, key-cacert=/etc/kubernetes/pki/etcd/ca. crt endpoint -cluster status | grep -v false | awk -F / print $4然后登录到leader节点,备份snapshot db文件:rsync -avp /var/lib

18、/etcd/member/snap/db /tmp/etcd_db. bak还原 将备份的snaphost db文件上传到各个etcd节点,使用以下命令还原数据:ETCDCTL_API=3 etcdctl snapshot restore/tmp/etcd db. bak-endpoints=192. 168.0. 11:2379-name=192. 168. 0. 11一cert=/etc/kubernetes/pki/etcd/server, crt 一key=/etc/kubernetes/pki/etcd/server.key一一cacert=/etc/kubernetes/pki/e

19、tcd/ca. crt 一一initial-advertise-peer-urls= s:/1:2380 一initial-cluster-token=etcd-cluster-0 -initial-cluster=192.168.0.ll=. 0. 11:2380, 192.168. 0. 12= s:/192. 168. 0. 1 2:2380,3=. 0. 13:2380-data-dir=/var/lib/etcd/-一skip-hash-check=trueharbor如果使用harbor作为镜像仓库与chart仓库,可使用脚本将harbor中所有的镜像和chart 导入导出。备份脚

20、本#!/bin/bashharborUsername=,admin,harborPassword=,Harborl2345,harborRegistry=,registry, test, comharborBasicAuthToken=$ (echo -n z/$ harborUsername : $ harborPassword| base64) docker login -username $harborUsername -password $harborPassword) $harborRegistry)rm -f dist/images.listrm -f dist/charts. l

21、ist# list projectsprojs=curl-s -k HI Authorization: Basic $harborBasicAuthToken),z/z s :/$ harborRegistry,/,/api/projects?page=l&page_size=1000, jq -r .口 (.project_id) = (. name) for proj in $ projs*; doprojld=echo $proj|cut -d -f 1projName=echo $proj|cut -d =f 2# list repos in one projectrepos=curl

22、 -s -k -H “Authorization: Basic $ harborBasicAuthToken),z “ s:$harborRegistry /api/repositories?page=l&page_size=1000&project_id= $projld | jq -r | ( id) = ( name) for repo in $repos *; dorepold= echo $repo|cut -d =-f 1repoName=echo $repo|cut -d =-f 2# list tags in one repotags=curl -s -k -H Authori

23、zation: Basic $ harborBasicAuthToken,z “ s:$ harborRegistry /api/repositories/ $ repoName),z,/tags?detail=l, | jq -r,1. name,for tag in $ tags*; doecho $tag);pull imagedocker pull $harborRegistry/$repoName:$tagtag imagedocker tag $harborRegistry/$repoName:$tag) $repoName:$tag)save imagemkdir -p $(di

24、rname dist/$repoName)docker save -o dist/$repoName:$tag. tar $repoName:$tagrecord image to list fileecho $repoName:$tag dist/images, list done done# list charts in one projectcharts= curl -s -k -H Authorization: Basic $ harborBasicAuthToken /z s:/$ harborRegistry),z,/api/chartrepo/ $ projName /chart

25、s | jq -r 1 namefor chart in $charts*; do#echo $ chart)# list download urls in one chartdurls=curl -s -k -H Authorization: Basic $harborBasicAuthTokenz, “ s :$ harborRegistry /api/chartrepo/ $ projName),z,/charts/ $ chart | jq -r .urls01,#echo $durl*for durl in $ durls*; dottecho $durl;download char

26、tmkdir -p $(dirname dist/$projName/$durl)curl -s -k -H Authorization: Basic $ harborBasicAuthToken/z -o dist/$projName/$durl“ s :$ harborRegistry /chartrepo/$ projName/$ durl record chart to list fileecho $projName/$durl dist/charts. listdonedone done10.2、还原脚本#!/bin/bashharborUsername=,adminharborPa

27、ssword=,Harborl2345,harborRegistry=registry, test. com,harborBasicAuthToken=$ (echo -n /z$ harborUsername : $ harborPassword| base64)docker login -username $harborUsername -password $harborPassword) $harborRegistry)while IFS= read -r image | -n $image doprojName=$image%/*)echo $ projNamecreate harbo

28、r projectcurl -k -X POST -H Authorization: Basic $ harborBasicAuthToken),z “ s :$ harborRegistry /api/pro jects -H accept: application/jsonz, -H Content-Type: app 1 ication/jsonz, -d project name“: $projName, “metadata: public”: true load imagedocker load -i dist/$image). tartag imagedocker tag $ima

29、ge) $harborRegistry/$image)push imagedocker push $harborRegistry/$imagedone dist/images. listwhile IFS= read -r chart | -n $chart doprojName=$chart%/*)echo $projNamecreate harbor projectcurl -k -X POST -H Authorization: Basic $ harborBasicAuthToken),z “ s:$ harborRegistry /api/projects -H accept: application/jsonz, -H “Content-Type: application/json,/ -d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论