I am a self-taught programmer with a background in operations and maintenance for 5 years, specializing in Kubernetes operations and development since 2019.
Language Stack: Golang, Proficiency: Intermediate
Kubernetes: Extremely familiar, actively involved in community contributions.
Algorithms & Data Structures: Basic
Personality: A typical programmer of the ISTJ type, not fond of socializing, disciplined, continuously learning to surpass personal limitations.
Hobbies: Used to enjoy rollerblading, now into hiking and trekking.
I am deeply influenced by Chen Hao, including his work style and personal conduct. After listening to his podcast “Listen to the Wind with the Left Ear” in 2020, he became my mentor, career goal, and spiritual leader. I am an independent thinker, not easily swayed (some may call it stubbornness), constantly pushing myself out of my comfort zone, challenging tasks I’m reluctant to do, and breaking through personal barriers.
The purpose of writing a blog is to promote myself. I never thought about making money from it, which is quite difficult. It’s not just about having high traffic; I hope to become a leading figure in my field, like CoolShell. I also created a public account to synchronize my blog content. However, since I often modify blog articles, and it’s cumbersome to update the public account, they may not always be identical. Additionally, the public account isn’t suitable for in-depth articles and won’t be updated frequently.
I started blogging back in college, recording life moments and sharing thoughts on QQ Zone. Later, I explored how to make money online by writing software sharing articles on Baidu Blog. However, the earnings were minimal, and due to censorship, I gave up. In 2012 (after graduation), I started using WordPress to build a blog, initially using domains like 001.net76.net and 3038.tk to share software. Later, due to limitations in free hosting, I registered the domain midbai.com (meaning “nowhere to set up a stall”) and bought hosting to share software. However, since operating the website didn’t generate any revenue, I discontinued it after moving to Shanghai in 2014.
Later, inspired by Chen Hao’s CoolShell website, I restarted the blog at the end of 2020. Here, I write about technology, ideas, practice the Feynman learning method, and also promote myself.
During university, I was eager to enter the internet industry. After graduating in 2011, my first job was as a salesperson at a group-buying website. Not suited for the role, I quit in less than a month. Under pressure, I worked as a high school physics teacher for a year, but I disliked it. I’ve always been against China’s exam-oriented education system, seeing generations of students repeating my past. I couldn’t change their fate, which made me feel powerless, coupled with very low wages.
After resigning, I was lost. Analyzing my skills, I realized I was familiar with computers and networks. So, I took up a job as an IT network manager. However, this job didn’t leverage my technical skills; it mainly dealt with complex interpersonal relationships (avoiding being used as a tool by others). I lasted only 9 months.
Afterward, I took a gap year at home to delve into real computer technology. Combining my existing knowledge, I focused on learning Linux-related skills and also obtained a driver’s license.
By July 2014, I felt proficient in Linux-related knowledge and moved to Shanghai to seek employment. After about two weeks, I found my first operations job, marking my entry into the internet industry. This job allowed me to apply my previous knowledge into practice. However, the more I practiced, the more I realized how much I didn’t know. So, I studied all the software technologies used in the company, including starting to research Docker. As my knowledge broadened, I felt that the job couldn’t keep up with my growth, and I hit a bottleneck. Therefore, I left the company in May 2016.
After leaving my first company in Shanghai, I joined a startup - Quanmin Live. Here, I experienced “the speed of the internet” and “the power of capital.” I experienced rapid growth from 10 to 100, having the opportunity to manage the entire company’s operations, from the operating system to upper-level monitoring systems, nginx, redis, PHP, deploy systems, and architecture design. This growth experience was due to encountering many talented individuals, industry dividends, and a bit of luck.
After reaching a bottleneck in my previous company and witnessing the decline of the live streaming industry, I embarked on my third operations job, joining Bilibili (B站). When I joined Bilibili, it wasn’t long after Bilibili IPO, there was a wave of personnel from Baidu involved in internal power struggles. In my second week, my immediate supervisor was forced out of the operations department. Upon joining, I found myself assigned to business operations, which involved more project management, report writing, troubleshooting, and customer service than technical research and implementation. Despite being busy every day, I didn’t experience much growth.
A week before Chinese New Year, Bilibili initiated its first “violent” downsizing post-IPO (personally, I believe it was related to subsequent code leaks). Fortunately, I was on the list for this downsizing. I was notified of my termination after the company’s annual meeting, without needing to hand over work, and left directly.
I spent only nine months at Bilibili, making it my most unsuccessful job experience. However, during this period, I gained valuable insights into the rapid trial and error and iteration processes at large companies, along with various intrigues and conflicts of interests. Of course, I also encountered many talented individuals and felt passionate about contributing to something It loved. I learned how platformization works, was exposed to large-scale Kubernetes deployments in production, and began researching Kubernetes in-depth. Bilibili I must say, had the best corporate culture I’ve experienced so far, with perks like bringing pets to work, cross-dressing bosses, cosplay, Hanfu (traditional Chinese clothing), various clubs, and grand festive events.
After leaving Bilibili, I joined TouchPal, where I was responsible for implementing Kubernetes-related work, migrating old Docker deployment patterns to Kubernetes. During this time, I immersed myself in Kubernetes from morning to night, began learning Go language, and started doing some development work. Due to a lack of relevant technical experience, lack of resource support (fighting alone), and various details controlled by the CTO (guiding us on how to proceed in weekly meetings), the project didn’t go smoothly. After a year of working on this project, the department was merged, and the new leadership halted the project. So, I chose to resign. During this phase, I began to think about platform design from a product perspective, transitioned to architecture design for surrounding systems, mastered Kubernetes deeply, and shifted towards development. Migrating from old architecture to new architecture requires careful compatibility work. However, transitioning from a weak infrastructure situation with no related ecosystem (application center, CICD, etc.) to Kubernetes deployment is like people from a feudal society living in modern times—it’s almost impossible to adapt. Therefore, during the implementation process, I designed the architecture for integrating Kubernetes with existing systems while also developing complementary systems (logging, monitoring alarms, traffic gateways) to reduce the cost of application migration and transformation for business units.
After leaving TouchPal, it was the beginning of the COVID-19 pandemic, and companies were closing down and laying off employees. there was an atmosphere of anxiety on V2EX (a Chinese technology forum). As my development skills were at an early stage, and lack of experience in solving algorithmic problems, finding a Kubernetes-related development job was quite difficult. Moreover, choosing Kubernetes development meant I could only go to companies with self-built data centers; smaller companies would require a mix of roles. After interviewing with several companies without success, I decided to take some time off to study Kubernetes source code. At this time, my father was diagnosed with liver cancer and needed surgery. I was feeling lost and uncertain but still had aspirations and faith (similar to the gap period in 2013-2014).
In the fourth month after resigning, I decided to lower my expectations. I aimed for companies with self-built Kubernetes systems, looking for Kubernetes-related work first, while working on improving my development skills before seeking dedicated development positions. After interviewing with two companies, I joined Weimob. It was rare for a company to have a dedicated Kubernetes operations position, although it used public cloud services.
During my first year and a half at Weimob, I focused purely on Kubernetes operations work, including Kubernetes cluster deployment (maintaining deployment scripts, such as supporting self-built Kubernetes on AWS), migrating monitoring architecture from Thanos to VictoriaMetrics, daily cluster maintenance (adding/removing nodes, troubleshooting issues), and implementing VPA. Later, I started developing Kubernetes ecosystem-related programs, such as backend services, CNI plugins, VPA operators, and Descheduler. Generally, my time allocation was 50% operations, 20% development, and 30% planning and technical research. Development work was mostly done independently (designing, developing, testing, and deploying all by myself).
From 2020 until my time at Weimob, I consistently studied Kubernetes source code. I achieved about 90% completion in understanding the kubelet part, studied most of the common controllers in the controller-manager part, and delved into client-go and other underlying libraries. I only explored a small part of the scheduler and apiserver code. The Kubernetes-related projects I studied included cilium (parts related to ENI code: operator, agent, cni), kube-state-metrics, AWS-cni, Terway (partial code), containerd (cri part), karmada, knative, koordinator, kube-route, VPA, crane, cni, and controller-runtime.
Since I didn’t have many opportunities to participate in development at work, and there were many demands and issues in the open-source community that I could contribute to, I started participating in open-source communities. Contributing to open-source projects allowed me to learn how features are designed (and how compromises are made), study excellent code written by others, understand how open-source and commercial aspects are combined, and enhance my development skills. So, I joined communities for discussions and contributions. The projects I contributed to were related to my work, such as karmada, VPA, and cilium.
Email: xiaoqingnb (at) gmail.com
X (Twitter): https://twitter.com/xiaoqing224486
WeChat Official Account: freedonia