huangleijay
研发工程师,在二手交易、云平台、云搜索和长视频领域工作多年,略有所悟。
展开
-
记一次线上服务迁移方案调研
前言对于任何一个模块或服务或框架来说都需要具备可升级性。升级背后的诉求可能是多种: 版本的升级,寻求更安全的代码或者享用更强大的功能。 当前服务已经不能承担目前的用户量,急需要横向扩容升级。 其他外界因素引发的升级需求,如机房迁移等。 正文本文要讲的Kafka架构的升级,原因是上述讲的第二种。在kafka横向扩容中,首先调研了kafka本身架构具备的横向扩容能力。即将新broker加入到新的集群即可,新broke...原创 2020-07-26 18:37:02 · 314 阅读 · 0 评论 -
kafka集群机器数目计算
前言:如何在业务上敲定kafka的机器数目!需要遵循的前提是,单数原则,就是zookeeper和broker的节点数目最好是单数!分区分配给消费者有三个策略,默认是第一个。RangeAssignor策略:假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1个分区,后面的(消费者数量-m)个消费者每个分配n个分区。@hxx 针对于单个topic分区的分配,如果一个consumer同时订阅了多个topic,那么对于多个topic而言,某个consumer可能分配原创 2020-07-15 20:21:50 · 1748 阅读 · 0 评论 -
kubernetes 自定义调度器
todo:1: 修改proiority 打分逻辑,加上load的权重2: 编译新的调度器,打包推上线3: 为某些deployment 指定使用新的调度器正文2:编译新的调度器,打包上线参考 https://k8smeetup.github.io/docs/tasks/administer-cluster/configure-multiple-schedulers/3:指定调度器通过提供调度器名称作为spec.schedulerName参考同上连接...原创 2020-07-14 20:14:33 · 1022 阅读 · 0 评论 -
kubernetes 自定义调度器-02
背景加上machine_load 的打分权重,需要调研其他维度的分值区间,将load在其中的的地位加重!正文balanced_resource_allocation计算资源(request cpu和mem)的均衡情况,分值大小为0-10分,10分为最佳均衡image_locality镜像是否在本地存在,是根据镜像大小之和来计算,越大分值越高,分值区间是0-10interpod_affinitypod间亲和力和反亲和力打分,需要考虑是pref...原创 2020-07-14 20:13:39 · 605 阅读 · 0 评论 -
k8s node 和pod匹配的几种方式
nodeSelector强制匹配,是podSpec的一个字段,键值对匹配,先为node打上标签,再为node指定标签,如proxy。Affinity and anti-affinitynodeAffinitynodeAffinity操作方式也和nodeSelect相同,优势是:语法更具表现力(不仅仅支持“与(AND)”完全匹配)可以指明规则是“soft/preference”而不是强制要求,所以如果不满足调度条件,pods依然可以被调度。可以将规则限制在运行在一个节点上的pods原创 2020-07-13 20:03:55 · 1036 阅读 · 0 评论 -
从零搭建kubernetes集群之etcd搭建中的一些坑总结
etcdctl --endpoints "http://10.16.**.**:2377" member listexport ETCDCTL_API=3#etcdctl --endpoints "http://10.16.**.**:2377" --prefix --keys-only=true get /etcdctl --endpoints "http://10.16.**.**:2377" get /registry/configmaps/wcs-online/indexproxy.原创 2020-07-13 20:03:08 · 570 阅读 · 0 评论 -
在实际项目中如何组织docker容器和进程的关系
前言1: 在日常启动中,一个容器含有多个进程。那么哪个才是与容器生命周期相关的进程呢?2: 在容器的dockerfile文件中,CMD可以指定容器需要执行的命令(或者entrypoint),其实这就是docker容器的住进程3: 其实docker容器建议使用单进程,但是我们经常使用多进程,并且采取了讲多个命令写到pod的一个脚本中。然后在Dockerfile中,将start-kubernetes.sh指定为Docker容器默认执行的命令即可:CMD ["start-kubernetes.原创 2020-07-13 19:59:47 · 852 阅读 · 0 评论 -
docker 容器身份设置详解
前言遇到好几个问题1: docker push 到仓库后,docker run 进去看到的文件的权限,是源目录的文件权限相似还是与执行push命令的权限相似? 目前看不是与源目录的权限相同2: docker运行的账户怎么指定?3: kubernetes中docker运行的账户怎么指定?正文1: 对应上面第一点在镜像源目录下,对所有的源文件修改了账户和分组,push 后,使用docker run依然看到的是root权限。 整个打镜像的过程都是使用root操作镜像的!..原创 2020-07-13 19:57:57 · 420 阅读 · 0 评论 -
kubernetes dns详解
背景:解释 kube-proxy 和kube-dns 的区别@hxx 一句话总结访问任何一个服务都需要知道ip+port,这是无疑的,那么访问service也当然需要,kube-dns是为了解决通过域名来访问service!而,从pod 访问 service(也可以说是到service后面的pod),是需要kube-proxy来实现的,kube-proxy实现的方式有两个:userspace 和iptables!可以理解为 kube-dns 只是其中的一个域名服务,和edoc一样,只要部原创 2020-06-27 15:32:07 · 1238 阅读 · 0 评论 -
kubernetes资源实现解密
背景:k8s调度的基本单元是pod,但是对资源的限制是在容器粒度上的k8s对资源的限制设置,最终原理是赋值到docker使用linux 的cgroup 的cpuset来实现k8s--->docker--->linuxcgroupk8s的设置参数主要有:Limits:cpu: 16memory: 20GiRequests:cpu: 10mmemory: 10Midocker的参数主要有:v1.13以后–cpus 指定容器所需的cpu核数...原创 2020-06-27 14:49:54 · 184 阅读 · 0 评论 -
CPU使用过低,load过高
1:按照网上说的,这种情况很有可能下面的情况等待磁盘I/O完成的进程过多,导致进程队列长度过大,但是cpu运行的进程却很少,这样就体现到负载过大了,cpu使用率低。使用“iostat -txk 1”或者“sar -d 1”(每个一秒采样)来查看:io阻塞会让出cpu,如果大多数的进程都在阻塞,那么会造成太多的上下文切换,这种切换消耗了cpu的时间,但是没有真正的执行任务!根据load的官方解释:System load averages is the average numbe..原创 2020-06-21 15:53:35 · 1962 阅读 · 0 评论 -
kubernetes资源设置-2
前言本笔记详解,kubernetes调度器在调度时的策略a:预选的策略b:优选的策略,会考虑哪些维度,各个维度的权重如何优选和预选考虑的机器负载指标(cpu+mem),不是线上实时的指标,而是分配出去的资源上下限! @hxx 这就要求我们分配的量是否和线上真实load是否成正相关关系!正文摘自 http://dockone.io/article/28851:预选策略a: NoDiskConflict , pod所需的卷是否和节点已存在的卷冲突。如果节点已经挂载了某个卷,.原创 2020-06-21 15:51:36 · 145 阅读 · 0 评论 -
heapster+influxdb+grafana
Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。在较新的版本中,K8S已经将cAdvisor功能集成到kubelet组件中。每个Node节点可以直接进行web访问。Heapster是一个收集者,Heapster可以收集Node节点上的cAdvisor数据,将每个Node上的cAdvisor的数据进行汇总,还可以按.原创 2020-06-21 15:50:57 · 185 阅读 · 0 评论 -
CPU使用过低,load过高-2
1: 一个个pod剔除,直到机器load为0(空机器)关注“上下文切换” 指标记录移除了哪些pod 产生了哪些变化验证free少的机器,load高?结论:a:进程数越多,即使CPU空闲率比较高,但是load还是有可能比较高,因为进程切换占用CPU时间b:io wait 也会造成load虚高,需要排查 iostat -xz 1 看%util是否过高分析结果:a:机器没有流量,pod比较多(20+searcher pod),负载在2左右,比较高机器没有流量,无po..原创 2020-06-21 15:49:51 · 322 阅读 · 0 评论 -
pod重启和生命周期
前言1:如何构造pod原地重启,即pod ip不发生改变2: 怎么构造pod init容器多次执行3: 当pod 非init容器全部删除,是否会导致pod所有容器全部执行?摘自:https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/正文0: pod定义与单个应用容器一样,pod被认为是相对短暂的(而不是持久的)实体。正如在pod的生命周期中所讨论的,创建pod,分配唯一ID(UID)..原创 2020-06-21 15:46:31 · 960 阅读 · 0 评论 -
docker容器和虚拟机
前言1: 只知道虚拟机会对硬件进行虚拟化,容器使用的硬件资源还是宿主机的正文1: 对 Docker 项目来说,它最核心的原理实际上就是为待创建的用户进程: 启用 Linux Namespace 配置; 设置指定的 Cgroups 参数; 切换进程的根目录(Change Root)。2: 实际上,同一台机器上的所有容器,都共享宿主机操作系统的内核。这就意味着,如果你的应用程序需要配置内核参数、加载额外的内核模块,以及跟内核进行直接的交互,你就需要注意了:这些操作和依赖的对...原创 2020-06-21 15:40:13 · 201 阅读 · 0 评论 -
kubernetes ipvs下svc访问
前言追踪svc访问服务的轨迹新的kubernetes版本的kube-proxy使用了ipvs(非iptables)kube-proxy的IPVS模式用的上NAT模式,因为DR,TUN模式都不支持端口映射。https://www.bladewan.com/2018/12/10/kubernetes_service_mode/正文1: ip a 查看kube-ipvsservice 会分配一个clusterIP,endpoint是它的域名。kube-pr...原创 2020-06-21 15:29:00 · 731 阅读 · 0 评论 -
kubernetes网络总结和实战
前言理清kubernetes网络1: 容器到主机互访2:本机容器到容器互访3:跨主机容器互访其他知识:1: 网关,路由2: iptables3: 网络七层4:数据头正文1: 容器到主机互访a:使用Veth Pair,一端是容器内的veth0网卡,一端插在网桥docker0上!b:到达docker0后,就相当于到达宿主机,根据宿主机的路由规则进行下一步!容器内的请求要到主机,使用veth pair,即从veth0的流入的数据包一定会到达doc..原创 2020-06-21 15:21:33 · 392 阅读 · 0 评论 -
kubernetes 探针设置
在builder中加上了存活探针:image: wcs.online.registry.58corp.com:8000/wcs-online/wcsk8sctl:v1.0imagePullPolicy: Alwaysports:- containerPort: 3218name: debugprotocol: TCPlivenessProbe:tcpSocket:port: 20021initialDelaySeconds: 5periodSeconds: 1原创 2020-06-21 15:17:45 · 817 阅读 · 0 评论 -
kubernetes的一些技术要点(可作为年OKR)
1:云搜二期使用k8s提升了哪些点?环境打包(使用仓库镜像版本,完美解决)自动化部署,重置分片,重建(一期未能有效的实现重建,重置分片功能)资源极大优化:包括机器利用率(减少了50%+的机器),剔除01版本,配额(限制应用最大最低使用资源),资源隔离(可以对商业应用建立集群,保证高优先级)2:对于上面的点,云搜二期是如何将搜索云化的?@hxx可以按这个来扯云搜集群二期a:首先将各模块容器化(查询+数据流程各个模块都容器化了)b:init...原创 2020-06-21 15:12:51 · 232 阅读 · 0 评论 -
kubernetes资源管理
周末和友人聊天,友人问及“搜索是计算密集型”,如果使用docker技术,如何资源管理? 本文来解释一下如何使用kubernetes来进行资源分配(主要包括cpu和mem) 可能很多人还不了解资源设置的意义在哪,为什么要进行资源设置? 假设有A容器和B容器分配在同一台物理机上,两个容器是会互相影响抢占同一份资源的,现在经过上面简单配置后,A...原创 2018-11-18 19:31:39 · 487 阅读 · 0 评论 -
一分钟系列:kubernetes port详解
本文要讲kubernetes的port非常多,本文进行总结,主要解决以下五个问题:containerPort是什么? 在哪里设置?targetPort 是什么?在哪里设置?port是什么?在哪里设置?nodePort是什么?在哪里设置?hostPort是什么?在哪里设置?第一节梳理kubernetes微服务请求过程service通过label selector ...原创 2018-10-13 17:01:47 · 4899 阅读 · 0 评论