<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xf491698144的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xf491698144</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xf491698144]]></copyright><item><title><![CDATA[kubecon·香港 京东云跨集群大规模应用管理实践 keynote分享]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/141365700</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/141365700</guid><author>xf491698144</author><pubDate>Tue, 20 Aug 2024 18:45:30 +0800</pubDate><description><![CDATA[在JDCloud中，联邦Serverless服务基于联邦管理模型和Serverless应用模型，为联邦应用容器部署、弹性伸缩和故障迁移能力提供JDOS应用容器控制服务。它管理多个具有超过 10,000 个节点的集群。多个子集群统一管理，提高整体资源利用率。降低平台上多集群管理、调度、分发的复杂度。最终用户可以像使用原生 Kubernetes API 一样使用我们的平台。2、高效的跨集群弹性伸缩解决方案。1. 多集群管理与分发实践。3、制作和分享中遇到的问题。]]></description><category></category></item><item><title><![CDATA[02 Uber Go 语言编码规范 - 指导原则 - interface 合理性验证]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/109389577</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/109389577</guid><author>xf491698144</author><pubDate>Fri, 30 Oct 2020 17:30:44 +0800</pubDate><description><![CDATA[在开发interface时，要对interface的合理性进行验证，在编译时验证接口的符合性。这包括：

将实现特定接口的导出类型作为接口API的一部分进行检查
实现同一接口的（导出和非导出）类型属于实现类型的集合
任何违反接口的合理性检查的场景，都会终止编译，并通知给用户

补充：以上3条是编译器对接口的检查机制，大体意思是错误的使用接口会被编译器报错。所以可以利用这个机制让部门问题提前暴露。
源代码
// 如果Handler没有实现http.Handler,会在运行时报错
type Handler st]]></description><category></category></item><item><title><![CDATA[02 Uber Go 语言编码规范 - 指导原则 - 指向 interface 的指针]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/109359504</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/109359504</guid><author>xf491698144</author><pubDate>Thu, 29 Oct 2020 15:09:59 +0800</pubDate><description><![CDATA[首先，在规范中，我们建议和倡导，保存时运行goimports和gofmt，如果

]]></description><category></category></item><item><title><![CDATA[01 Uber Go 语言编码规范 - 介绍]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/109352768</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/109352768</guid><author>xf491698144</author><pubDate>Thu, 29 Oct 2020 14:38:22 +0800</pubDate><description><![CDATA[Uber Go 语言编码规范学习分享
01-开篇介绍
02-指导原则1
03-指导原则2
04-性能
05-规范1
06-规范2
07-编程模式
08-图说设计模式
09-写在最后

]]></description><category></category></item><item><title><![CDATA[原生scheduler-framwork调度插件详细]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108649025</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108649025</guid><author>xf491698144</author><pubDate>Thu, 17 Sep 2020 17:51:08 +0800</pubDate><description><![CDATA[图

插件详细说明




]]></description><category></category></item><item><title><![CDATA[使用git reset进行多commit合并]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108624050</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108624050</guid><author>xf491698144</author><pubDate>Wed, 16 Sep 2020 16:06:56 +0800</pubDate><description><![CDATA[在开发分支下，往往会有多次提交，可能是feature，也可能是bugfix，如果git管理员基于commit进行打tag，这就比较麻烦，所以在打tag之前，最好把相似或者针对同一个feature/bugfix的多次提交进行合并。
工具 git reset
使用git reset
开始合并
首先通过git log找到当前分支的你想要合并的
commit 991b88a8be945952c5b83b9e290f65d05c9d0bdd
Author: R1 &lt;123456@abc.com&gt;
Date]]></description><category></category></item><item><title><![CDATA[Kubernetes v1.19 正式发布]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108316427</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108316427</guid><author>xf491698144</author><pubDate>Mon, 31 Aug 2020 10:29:52 +0800</pubDate><description><![CDATA[Kubernetes v1.19 正式发布
本周 Kubernetes v1.19 正式发布，这是今年发布的第二个版本，也是耗时最长的一个版本。
在此版本中有 34 个增强功能，其中 10 个GA，15 个 beta 以及 9 个 alpha。并且从 v1.19 开始，Kubernetes 每个版本的支持周期延长至 1 年。（感谢[ Long Term Support (LTS) working group ]（https://github.com/kubernetes/community/tree/mas]]></description><category></category></item><item><title><![CDATA[Kubernetes Controller Manager 代码梳理]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108100668</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108100668</guid><author>xf491698144</author><pubDate>Wed, 19 Aug 2020 16:27:11 +0800</pubDate><description><![CDATA[ControllerManager同样作为集群的一个大脑，负责集群内的Node，资源控制器，副本数管理，NameSpace，ServiceAccount、资源配额等管理，维护集群的状态。ControllerManager通过APIServer来获取整个集群的状态，确保所有node都处于预期的工作状态。ControllerManager一般和APIServer、Kube-Scheduler部署在同一台机器上。也可以单独部署。
ControllerManager一般有两个部分组成，kube-controller]]></description><category></category></item><item><title><![CDATA[kube-scheduler 调度中的流氓兔 - preempt]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108010380</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108010380</guid><author>xf491698144</author><pubDate>Fri, 14 Aug 2020 17:49:07 +0800</pubDate><description><![CDATA[preempt 作用
这兔子在pod调度失败后，在没有禁用抢占调度的情况下，开始了“流氓式”的调度。
它的作用是抢占低优先级的pod，如果成功了，那么就更新pod spec，返回nodename。
func (sched *Scheduler) preempt(ctx context.Context, prof *profile.Profile, state *framework.CycleState, preemptor *v1.Pod, scheduleErr error) (string, error]]></description><category></category></item><item><title><![CDATA[kube-scheduler组件代码走读]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/108005405</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/108005405</guid><author>xf491698144</author><pubDate>Fri, 14 Aug 2020 16:29:30 +0800</pubDate><description><![CDATA[基于v1.18.5版本
组件作用
kube-scheduler组件负责将pod调度到合适的节点上，在调度过程中，整体分为优选和预选两个阶段。其在集群中存在的作用，相当于集群另外一个大脑。
组件源码入口
package main

import (
	"math/rand"
	"os"
	"time"

	"github.com/spf13/pflag"

	cliflag "k8s.io/component-base/cli/flag"
	"k8s.io/component-base/logs"
	_ "k]]></description><category></category></item><item><title><![CDATA[kubelet 创建容器源码过程]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/107982883</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/107982883</guid><author>xf491698144</author><pubDate>Thu, 13 Aug 2020 17:04:32 +0800</pubDate><description><![CDATA[在创建容器，会执行kubernetes\pkg\kubelet\kuberuntime\kuberuntime_manager.go中的SyncPod方法，该方法的整体做的事情是：

计算需要创建或者删除的pod个数；
如果sandbox容器发生改变则杀掉重来；
删掉不需要在pod中维持或者保留的containers；
创建一个sandbox容器；
创建临时容器；
创建初始化容器；
创建正常的容器；
更新容器资源。

首先看computePodActions
	// Step 1: Compute sand]]></description><category></category></item><item><title><![CDATA[kubelet启动过程代码走读]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/107963873</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/107963873</guid><author>xf491698144</author><pubDate>Wed, 12 Aug 2020 20:11:02 +0800</pubDate><description><![CDATA[kubelet启动过程分析
基于1.18.5
入口
入口文件kubernetes\cmd\kubelet\app\server.go中的startKubelet是完成初始化之后，开始对pod进行管理的入口，
从方法看，startKubelet不断调用k.Run方法，不断的同步信息。
func startKubelet(k kubelet.Bootstrap, podCfg *config.PodConfig, kubeCfg *kubeletconfiginternal.KubeletConfigurati]]></description><category></category></item><item><title><![CDATA[kubernetes scheduler genericScheduler findNodesThatPassFilters思路整理]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/107858718</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/107858718</guid><author>xf491698144</author><pubDate>Fri, 07 Aug 2020 14:38:24 +0800</pubDate><description><![CDATA[代码作用
查找能够满足filter过滤插件的节点，返回结果有可能是0,1，N
// findNodesThatPassFilters finds the nodes that fit the filter plugins.
func (g *genericScheduler) findNodesThatPassFilters(ctx context.Context, prof *profile.Profile, state *framework.CycleState, pod *v1.Pod, status]]></description><category></category></item><item><title><![CDATA[The subversion command line tools are no longer provided by Xcode.]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/106570859</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/106570859</guid><author>xf491698144</author><pubDate>Fri, 05 Jun 2020 15:04:54 +0800</pubDate><description><![CDATA[今天使用svn，发现cli直接提示错误，“The subversion command line tools are no longer provided by Xcode.”
wxf@mbp_15 ~ % svn
svn: error: The subversion command line tools are no longer provided by Xcode.

版本：macos 10.15.5 catalina
解决办法：
wxf@mbp_15 ~ % sudo rm -rf /Library/]]></description><category></category></item><item><title><![CDATA[kubernetes 生产可用部署方案架构图]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/106548917</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/106548917</guid><author>xf491698144</author><pubDate>Thu, 04 Jun 2020 15:59:56 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[12-Factor]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/106407285</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/106407285</guid><author>xf491698144</author><pubDate>Thu, 28 May 2020 17:11:52 +0800</pubDate><description><![CDATA[一份基准代码（Codebase），多份部署（deploy）
12-Factor应用(译者注：应该是说一个使用本文概念来设计的应用，下同)通常会使用版本控制系统加以管理，如Git, Mercurial, Subversion。一份用来跟踪代码所有修订版本的数据库被称作 代码库（code repository, code repo, repo）。
在类似 SVN 这样的集中式版本控制系统中，基准代码 就是指控制系统中的这一份代码库；而在 Git 那样的分布式版本控制系统中，基准代码 则是指最上游的那份代码库。
]]></description><category></category></item><item><title><![CDATA[Scheduler-Framework中的Permit使用和注意事项]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/106388011</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/106388011</guid><author>xf491698144</author><pubDate>Wed, 27 May 2020 18:29:21 +0800</pubDate><description><![CDATA[解释
Scheduler-Framework的介绍现在也比较多了，这篇文章假设您已经了解Scheduler-Framework的框架和每个扩展点的作用。
如果想全面了解，可以参阅：
《浅谈 Kubernetes Scheduling-Framework 插件的实现》
《自定义 Kubernetes 调度器》
《kube-scheduler》
接下来，我们就重点说说Permit
Permit
Permit用户阻止或者延迟与Node绑定，属于Binding Cycle阶段，就是说，此时Permit已经经过了预选]]></description><category></category></item><item><title><![CDATA[踩坑client-go for kubernetes乐观锁]]></title><link>https://blog.youkuaiyun.com/xf491698144/article/details/106218379</link><guid>https://blog.youkuaiyun.com/xf491698144/article/details/106218379</guid><author>xf491698144</author><pubDate>Tue, 19 May 2020 17:03:52 +0800</pubDate><description><![CDATA[直接上一段代码
func (po *PreOccupy) SetPodAnnotation(pod *v1.Pod) error {
   clientSet := po.Handle.ClientSet()
 
   if _, ok := pod.Annotations[OccupyExpireTime]; ok {
      pod.Annotations[OccupyExpireTime] = ""
   }
   if _, ok := pod.Annotations[OccupyKilled]]]></description><category></category></item></channel></rss>