<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Learning on Shaowen Chen's Website</title><link>https://www.chenshaowen.com/en/tags/learning/</link><description>Recent content in Learning on Shaowen Chen's Website</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&amp;copy;2016 - {year}, All Rights Reserved.</copyright><lastBuildDate>Sun, 01 Mar 2026 00:00:00 +0000</lastBuildDate><sy:updatePeriod>weekly</sy:updatePeriod><atom:link href="https://www.chenshaowen.com/en/tags/learning/atom.xml" rel="self" type="application/rss+xml"/><item><title>Extending OpenClaw with Skills and MCP</title><link>https://www.chenshaowen.com/en/blog/using-skills-and-mcp-to-extend-openclaw.html</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 01 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-skills-and-mcp-to-extend-openclaw.html</guid><description>1. What Skills Are 1 2 3 openclaw skills list Skills (7/51 ready) OpenClaw ships with a number of built-in skills, which you can view with openclaw skills list. The concrete implementations of these Skills can be found at https://github.com/openclaw/openclaw/tree/main/skills. A Skills file mainly describes the Skill&amp;rsquo;s metadata, when it</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>AI Agent</category><category>Skills</category><category>MCP</category><category>OpenClaw</category><category>Operations</category><category>Learning</category></item><item><title>OpenClaw Installation and Configuration</title><link>https://www.chenshaowen.com/en/blog/installation-and-configuration-of-openclaw.html</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 26 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/installation-and-configuration-of-openclaw.html</guid><description>1. Preparing the Node Environment Install nvm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash Set the nvm environment variables You need to edit Bash&amp;rsquo;s config file and add the following:
1 2 3 export NVM_DIR=&amp;#34;$HOME/.nvm&amp;#34; [ -s &amp;#34;$NVM_DIR/nvm.sh&amp;#34; ] &amp;amp;&amp;amp; \. &amp;#34;$NVM_DIR/nvm.sh&amp;#34; [ -s &amp;#34;$NVM_DIR/bash_completion&amp;#34; ] &amp;amp;&amp;amp; \. &amp;#34;$NVM_DIR/bash_completion&amp;#34; Install Node 1 nvm install 22 default 2.</description><dc:creator>微信公众号</dc:creator><category>OpenClaw</category><category>AI</category><category>Agent</category><category>LLM</category><category>Tools</category><category>R&amp;D</category><category>Learning</category></item><item><title>MinIO Multi-Node, Multi-Disk Deployment and Operations</title><link>https://www.chenshaowen.com/en/blog/minio-multi-node-multi-disk-deployment-and-maintenance.html</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 07 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/minio-multi-node-multi-disk-deployment-and-maintenance.html</guid><description>1. Environment Preparation 1.1 Preparing Data Disks Inspect the data disks 1 lsblk -d -o NAME,SIZE,TYPE | grep nvme 1 2 3 4 nvme0n1 745.2G disk nvme1n1 745.2G disk nvme2n1 745.2G disk nvme3n1 745.2G disk Prepare the storage directories 1 2 3 for i in {0..3}; do mkdir -p /mnt/data${i} done Format the data disks 1 2 3 for i in {0.</description><dc:creator>微信公众号</dc:creator><category>MinIO</category><category>Storage</category><category>Distributed Systems</category><category>Operations</category><category>Learning</category><category>Object Storage</category><category>S3</category><category>Deployment</category><category>High Availability</category></item><item><title>Kubernetes Base Environment Requirements</title><link>https://www.chenshaowen.com/en/blog/kubernetes-base-environment-requirements.html</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-base-environment-requirements.html</guid><description>1. Base Packages Kubernetes version ≥ 1.18 socat Required conntrack Required ebtables Optional, but recommended ipset Optional, but recommended ipvsadm Optional, but recommended 1 apt-get -y install socat conntrack ebtables ipset ipvsadm 2. Port Requirements 2.1 Base Node Services Service Protocol Action Start Port End Port Comment ssh TCP allow 22 22 Node remote management docker TCP allow 2375 2376 Docker remote communication etcd TCP allow 2379 2380 etcd cluster communication 2.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Cluster</category><category>Configuration</category><category>Security</category><category>Operations</category><category>Learning</category><category>Installation</category><category>Dependencies</category><category>Best Practices</category></item><item><title>How to Upgrade the cgroup Version of a Kubernetes Node</title><link>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-node-cgroup-version.html</link><pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 02 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-node-cgroup-version.html</guid><description>1. Interface Path Differences Between cgroup v1 and v2 v1 1 2 3 4 /sys/fs/cgroup/cpu/cpu.cfs_quota_us /sys/fs/cgroup/cpu/cpuacct.usage /sys/fs/cgroup/memory/memory.limit_in_bytes /sys/fs/cgroup/memory/memory.usage_in_bytes v2 1 2 3 4 /sys/fs/cgroup/cpu.max /sys/fs/cgroup/cpu.stat /sys/fs/cgroup/memory.max /sys/fs/cgroup/memory.current cgroup v2 is the upgraded version of v1, with advantages such as more unified resource hierarchy management and precise resource isolation. But it also means that when writing code, the paths for reading the relevant interface files are different, so compatibility handling is required.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Upgrade</category><category>Operations</category><category>cgroup</category><category>Learning</category><category>Nodes</category><category>Resource Isolation</category><category>Troubleshooting</category><category>Kubelet</category></item><item><title>Using Gemini CLI on a Server</title><link>https://www.chenshaowen.com/en/blog/using-gemini-cli-on-server.html</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-gemini-cli-on-server.html</guid><description>1. Get the Project ID and API Key Visit https://aistudio.google.com/apikey Get the project ID and API key, and set them as environment variables 1 2 echo &amp;#34;export GOOGLE_CLOUD_PROJECT=&amp;#34; &amp;gt;&amp;gt; ~/.bashrc echo &amp;#34;export GEMINI_API_KEY=&amp;#34; &amp;gt;&amp;gt; ~/.bashrc 1 source ~/.bashrc 2. Prepare the Node.js Environment Install nvm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh |</description><dc:creator>微信公众号</dc:creator><category>Gemini</category><category>CLI</category><category>AI</category><category>LLM</category><category>Learning</category><category>Tools</category><category>Operations</category><category>Programming Assistant</category></item><item><title>NFS Over RDMA</title><link>https://www.chenshaowen.com/en/blog/nfs-over-rdma.html</link><pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 06 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nfs-over-rdma.html</guid><description>1. Prerequisites The storage and the nodes that use it form an RDMA network
The RDMA devices are configured with IP addresses
If you are using Mellanox NICs, add the -with-nfsrdma parameter when installing the driver
1 ./mlnxofedinstall --with-nfsrdma 2. Starting the Server Install dependencies 1 apt install nfs-kernel-server rdma-core -y Load the kernel module 1 modprobe svcrdma Add the port to portlist 1 echo &amp;#39;rdma 20049&amp;#39; | tee /proc/fs/nfsd/portlist Export directory 1 mkdir /data1/nfs 1 2 3 vim /etc/exports /data1/nfs *(rw,sync,no_root_squash,no_all_squash) Start the NFS service 1 systemctl start nfs-server.</description><dc:creator>微信公众号</dc:creator><category>NFS</category><category>RDMA</category><category>High Performance Storage</category><category>Storage</category><category>Network</category><category>Operations</category><category>Learning</category></item><item><title>Using Calico to Limit Pod Bandwidth</title><link>https://www.chenshaowen.com/en/blog/using-calico-to-limit-pod-bandwidth.html</link><pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 12 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-calico-to-limit-pod-bandwidth.html</guid><description>1. Testing the Full Bandwidth Start the iperf3 server on the target host 1 2 3 4 5 iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Test from the client host 1 iperf3 -c x.x.x.x -p 5201 -t 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Connecting to host x.</description><dc:creator>微信公众号</dc:creator><category>Calico</category><category>Pod</category><category>Bandwidth</category><category>Limiting</category><category>Kubernetes</category><category>Network</category><category>Operations</category><category>Learning</category><category>CNI</category><category>Traffic Control</category></item><item><title>Learning the Structure of Large Models Using Qwen as an Example</title><link>https://www.chenshaowen.com/en/blog/structure-of-large-models-with-qwen.html</link><pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/structure-of-large-models-with-qwen.html</guid><description>1. Introduction to the Qwen Model In April 2023, Alibaba released the beta version of Qwen. In December 2023, Alibaba open-sourced the first version of Qwen. In September 2024, Alibaba released Qwen2.5. In January 2025, Alibaba released Qwen 2.5-Max. Qwen 2.5 is the latest series of the Qwen large language</description><dc:creator>微信公众号</dc:creator><category>Qwen</category><category>LLM</category><category>AI</category><category>Learning</category><category>Architecture</category><category>Transformer</category><category>Open Source</category><category>R&amp;D</category></item><item><title>Building Multi-Arch Images with Nerdctl</title><link>https://www.chenshaowen.com/en/blog/use-nerdctl-to-build-multi-architecture-images.html</link><pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 17 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-nerdctl-to-build-multi-architecture-images.html</guid><description>1. Installing Nerdctl Install Opscli 1 curl -sfL https://raw.githubusercontent.com/shaowenchen/ops/main/getcli.sh |VERSION=latest sh - Install Nerdctl 1 opscli task -f install-nerdctl --arch amd64 2. BuildKit Download Buildkit 1 wget https://github.com/moby/buildkit/releases/download/v0.19.0-rc2/buildkit-v0.19.0-rc2.linux-amd64.tar.gz Install Buildkit 1 2 tar xvf buildkit-*.tar.gz mv bin/* /usr/local/bin/ Configure Buildkitd 1 mkdir -p /etc/buildkit /data/buildkit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat &amp;gt; /etc/buildkit/buildkitd.</description><dc:creator>微信公众号</dc:creator><category>Multi-Arch</category><category>Images</category><category>CI</category><category>Nerdctl</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>CICD</category><category>containerd</category><category>Build</category></item><item><title>AI Application Development Tech Stack</title><link>https://www.chenshaowen.com/en/blog/ai-application-development-tech-stack.html</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-application-development-tech-stack.html</guid><description>Embedding Models Embedding models map high-dimensional data into a lower-dimensional space, which makes the data easier to process and analyze.
Text Models Here is a leaderboard, https://huggingface.co/spaces/mteb/leaderboard
The leaderboard above gives each model&amp;rsquo;s score, parameter count, memory usage, vector dimension, maximum tokens, and other information. Below are some commonly used open-source models:</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>Application Development</category><category>Tech Stack</category><category>LLM</category><category>R&amp;D</category><category>Learning</category><category>RAG</category><category>Embedding</category><category>Best Practices</category></item><item><title>Deploying Jumpserver as a Bastion Host on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-deploy-jumpserver-on-kubernetes.html</link><pubDate>Thu, 09 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 09 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-deploy-jumpserver-on-kubernetes.html</guid><description>1. Deploying Jumpserver You need a StorageClass ready in advance to store Jumpserver&amp;rsquo;s data. Besides the database mentioned below, each component — jms-core, jms-web, jms-koko, jms-lion, jms-chen — also needs a PV for storage. 1.1 Deploying MySQL Refer to https://github.com/shaowenchen/ops-hub/blob/main/database/mysql8.yaml to deploy MySQL. You need to adjust the StorageClass field</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Jumpserver</category><category>Security</category><category>Operations</category><category>Bastion Host</category><category>Deployment</category><category>Learning</category></item><item><title>Processing Data on Kubernetes with Iceberg and Spark</title><link>https://www.chenshaowen.com/en/blog/use-iceberg-and-spark-on-kubernetes.html</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 12 Sep 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-iceberg-and-spark-on-kubernetes.html</guid><description>1. Data Processing Architecture It is mainly divided into four layers: Processing capability layer: Spark on Kubernetes provides streaming data processing capability Data management layer: Iceberg provides dataset access operations such as ACID and tables Storage layer: Hive MetaStore manages Iceberg table metadata, PostgreSQL serves as the storage backend for</description><dc:creator>微信公众号</dc:creator><category>Spark</category><category>Iceberg</category><category>Kubernetes</category><category>Big Data</category><category>Data Lake</category><category>Operations</category><category>Data Processing</category><category>Learning</category></item><item><title>Large Model Inference with Triton Server and TensorRT-LLM in a Container</title><link>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</link><pubDate>Sat, 03 Feb 2024 08:05:48 +0000</pubDate><atom:modified>Sat, 03 Feb 2024 08:05:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</guid><description>1. Compiling Models with TensorRT-LLM 1.1 Introduction to TensorRT-LLM When using TensorRT, you usually need to convert the model to ONNX format, then convert the ONNX to TensorRT format, and finally run inference in TensorRT or Triton Server. But this conversion process is not simple, and you often run into</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>Triton</category><category>TensorRT</category><category>LLM</category><category>Inference</category><category>GPU</category><category>Operations</category><category>Containers</category><category>Learning</category></item><item><title>Integrating GPT Services into WeChat and Official Accounts</title><link>https://www.chenshaowen.com/en/blog/how-to-access-gpt-service-on-wechat.html</link><pubDate>Tue, 26 Dec 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 26 Dec 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-access-gpt-service-on-wechat.html</guid><description>Paid integration service available at 200 RMB/year; technical support is also available at 200 RMB per session, capped at 1 hour. Follow the official account to get contact details. 1. Information You Need to Provide Go to https://mp.weixin.qq.com/ and open 【Settings and</description><dc:creator>微信公众号</dc:creator><category>LLM</category><category>GPT</category><category>Official Account</category><category>WeChat</category><category>AI</category><category>R&amp;D</category><category>Learning</category><category>Integration</category><category>OpenAI</category><category>Practice</category></item><item><title>A Guide to Designing and Implementing LLM Applications</title><link>https://www.chenshaowen.com/en/blog/large-model-application-design-and-implementation-guide.html</link><pubDate>Sat, 23 Dec 2023 11:22:55 +0000</pubDate><atom:modified>Sat, 23 Dec 2023 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/large-model-application-design-and-implementation-guide.html</guid><description>1. Problems with Using LLMs Directly Unstable output One characteristic of generative AI is the diversity of its output. Ask an LLM the same question several times and you may get different answers. This uncertainty in output is a pleasant surprise for users in conversation and creative scenarios. But in</description><dc:creator>微信公众号</dc:creator><category>LLM</category><category>AI</category><category>Best Practices</category><category>R&amp;D</category><category>Architecture</category><category>Learning</category><category>RAG</category><category>Agent</category></item><item><title>Chaos Engineering and Putting It into Practice</title><link>https://www.chenshaowen.com/en/blog/chaos-engineering-and-practice.html</link><pubDate>Sat, 16 Dec 2023 11:15:11 +0000</pubDate><atom:modified>Sat, 16 Dec 2023 11:15:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/chaos-engineering-and-practice.html</guid><description>Two months ago, I gave a talk to a business team about chaos engineering in practice. This post mainly organizes the content of that talk.
Click to view the presentation
1. The Origin of Chaos 1.1 The Birth of the Discipline of Chaos Before discussing chaos, let us first think about the relationship between chaos, chaos engineering, and our production services.</description><dc:creator>微信公众号</dc:creator><category>Chaos</category><category>Practice</category><category>Process</category><category>Conventions</category><category>Chaos Engineering</category><category>Operations</category><category>Reliability</category><category>Learning</category><category>Fault Drills</category></item><item><title>Source Code Analysis of Kubernetes Pod IP Management</title><link>https://www.chenshaowen.com/en/blog/source-analysis-kubernetes-management-of-pod-ip.html</link><pubDate>Thu, 02 Nov 2023 19:45:31 +0000</pubDate><atom:modified>Thu, 02 Nov 2023 19:45:31 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/source-analysis-kubernetes-management-of-pod-ip.html</guid><description>1. Subnet Management by kube-controller-manager kube-controller-manager has many controllers; the one related to Pod IP is NodeIpamController. The NodeIpamController mainly manages the podcidr of nodes: when a new node joins the cluster, it allocates a subnet to that node; when a node is deleted, it reclaims the subnet. The subnets</description><dc:creator>微信公众号</dc:creator><category>Source Code Analysis</category><category>Kubernetes</category><category>Pod</category><category>IP</category><category>Network</category><category>Learning</category><category>Operations</category></item><item><title>AI Fundamentals</title><link>https://www.chenshaowen.com/en/blog/ai-basic-knowledge.html</link><pubDate>Fri, 18 Aug 2023 11:22:55 +0000</pubDate><atom:modified>Fri, 18 Aug 2023 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-basic-knowledge.html</guid><description>1. Keywords Machine Learning (ML)
The technology of automatically acquiring knowledge from data.
Neural Network (NN)
A model that imitates the structure and learning mechanism of biological neural networks; one of the branches of machine learning.
The structure of a neural network consists of an input layer, hidden layers, and an output layer.</description><dc:creator>微信公众号</dc:creator><category>AI</category><category>LLM</category><category>Machine Learning</category><category>Knowledge Points</category><category>Learning</category></item><item><title>Calling Functions Through Dialogue with OpenAI and Langchain</title><link>https://www.chenshaowen.com/en/blog/call-functions-through-dialogue-using-openai-and-langchain.html</link><pubDate>Wed, 16 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 16 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/call-functions-through-dialogue-using-openai-and-langchain.html</guid><description>1. LLMs and Langchain Many people may never get the chance to train, or even fine-tune, a large model, but using large models is the wave of the future. So how should we embrace this change? The answer is Langchain. A large model provides a broad, general-purpose foundation. So far</description><dc:creator>微信公众号</dc:creator><category>OpenAI</category><category>Langchain</category><category>AI</category><category>LLM</category><category>R&amp;D</category><category>Learning</category><category>Function Calling</category><category>Application Development</category><category>Best Practices</category></item><item><title>Zero-Cost Service Availability Monitoring with Upptime</title><link>https://www.chenshaowen.com/en/blog/monitor-service-accessibility-with-upptime-for-free.html</link><pubDate>Sat, 12 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 12 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/monitor-service-accessibility-with-upptime-for-free.html</guid><description>1. What Needs Dial Testing GPT was all the rage this year, and I deployed and developed several applications and mini programs to learn from. Of course, following the principle of helping vendors test their features, right now only the GPT 3.5 API costs a little every day — the</description><dc:creator>微信公众号</dc:creator><category>GitHub</category><category>Actions</category><category>Monitoring</category><category>Dial Testing</category><category>Operations</category><category>Learning</category><category>Availability</category><category>Free</category><category>CICD</category><category>Best Practices</category></item><item><title>How to Set HPA for Kubernetes Applications and the Related Parameters</title><link>https://www.chenshaowen.com/en/blog/how-to-set-hpa-for-kubernetes-app.html</link><pubDate>Thu, 08 Jun 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 08 Jun 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-hpa-for-kubernetes-app.html</guid><description>1. Business Background Once an enterprise reaches a certain scale, relying entirely on public cloud infrastructure makes IT costs very high.
The cost of purchasing physical machines can be amortized over the next 3 to 5 years, and afterwards the machines are not scrapped; instead they continue to serve beyond their planned lifespan.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>HPA</category><category>Pod</category><category>Elastic Scaling</category><category>Operations</category><category>Hybrid Cloud</category><category>Learning</category></item><item><title>Autoscaling Kubernetes Applications with KEDA</title><link>https://www.chenshaowen.com/en/blog/autoscale-kubernetes-applications-with-keda.html</link><pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 18 May 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/autoscale-kubernetes-applications-with-keda.html</guid><description>1. HPA VS KEDA HPA also provides:
Elasticity based on custom metrics Scale to Zero Compared with KEDA, these are no longer disadvantages.
The real difference is that HPA can only scale using monitoring data, whereas KEDA can scale using many more data sources — queue messages, databases, Redis, and so on, including monitoring data as well.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>KEDA</category><category>Autoscaling</category><category>Elastic Scaling</category><category>Operations</category><category>Learning</category><category>HPA</category><category>Event-Driven</category></item><item><title>Tekton Optimization: A Custom Cluster Scheduler</title><link>https://www.chenshaowen.com/en/blog/custom-cluster-scheduler-to-optimize-tekton.html</link><pubDate>Wed, 26 Apr 2023 10:00:00 +0000</pubDate><atom:modified>Wed, 26 Apr 2023 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/custom-cluster-scheduler-to-optimize-tekton.html</guid><description>1. A Constrained Build Environment Cannot Meet Build Requirements Tekton is a CICD engine based on a Kubernetes cluster, and it is more cloud-native than Jenkins. In plain terms, that means it is easier to develop plugins for, easier to scale, easier to observe, and more fun.
Because code can only be stored on the company intranet, the build cluster can only be deployed on the office intranet.</description><dc:creator>微信公众号</dc:creator><category>Optimization</category><category>Tekton</category><category>CICD</category><category>DevOps</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Scheduling</category><category>Build</category><category>Multi-Cluster</category></item><item><title>Developing an Istio WasmPlugin with TinyGo</title><link>https://www.chenshaowen.com/en/blog/developing-istio-wasm-plugin-by-tinygo.html</link><pubDate>Wed, 22 Feb 2023 01:00:00 +0000</pubDate><atom:modified>Wed, 22 Feb 2023 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/developing-istio-wasm-plugin-by-tinygo.html</guid><description>wasme only supports up to Istio 1.9, while I am using Istio 1.14, so this post goes straight to tinygo for verification and learning.
1. Installing tinygo Requirements Go v1.18+
Install tinygo 1 2 brew tap tinygo-org/tools brew install tinygo Check the version 1 2 3 tinygo version tinygo version 0.</description><dc:creator>微信公众号</dc:creator><category>tinygo</category><category>Istio</category><category>Wasm</category><category>Cloud Native</category><category>Service Mesh</category><category>R&amp;D</category><category>Go</category><category>Learning</category><category>Extension</category></item><item><title>How to Repair a Kubernetes Master Node After Reinstalling the OS</title><link>https://www.chenshaowen.com/en/blog/how-to-repair-k8s-master-after-reinstalling-os.html</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 17 Jan 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-repair-k8s-master-after-reinstalling-os.html</guid><description>Recently I ran into this twice: a host had to be reinstalled because of a failure. In one case only a single Etcd node was left, and the whole cluster stayed down for half an hour before it recovered. This post mainly records the process of initializing a fresh Ubuntu</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Repair</category><category>Operations</category><category>Etcd</category><category>Troubleshooting</category><category>Cluster</category><category>Kubekey</category><category>Learning</category></item><item><title>Kubernetes Cluster Troubleshooting</title><link>https://www.chenshaowen.com/en/blog/kubernetes-cluster-troubleshooting.html</link><pubDate>Tue, 01 Nov 2022 01:00:00 +0000</pubDate><atom:modified>Tue, 01 Nov 2022 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-cluster-troubleshooting.html</guid><description>FailedCreatePodSandBox Error Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:402: getting the final child's pid from pipe caused: EOF: unknown Resolution Clear the cache 1 echo 3 &amp;gt; /proc/sys/vm/drop_caches Cause Too much memory fragmentation calico-node Keeps Restarting increase max user Error runtime: failed to</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Cluster</category><category>Troubleshooting</category><category>Operations</category><category>Learning</category><category>Fault Diagnosis</category><category>Pod</category><category>Best Practices</category><category>Problem Localization</category></item><item><title>How to Repair a Kubernetes Cluster After Changing IPs</title><link>https://www.chenshaowen.com/en/blog/how-to-repair-the-kubernetes-cluster-after-changing-ip.html</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 25 Oct 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-repair-the-kubernetes-cluster-after-changing-ip.html</guid><description>A record of repairing a cluster failure caused by an IP change. There are two clusters: one single-node (allinone) cluster, and one four-node cluster (3 masters, 1 node). 1. Update the Etcd Certificates [On every Etcd node] Back up the Etcd certificates 1 cp -R /etc/ssl/etcd/ssl /etc/ssl/etcd/ssl-bak View the domains</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Operations</category><category>Repair</category><category>Troubleshooting</category><category>Learning</category><category>Etcd</category><category>Certificates</category><category>Cluster</category><category>Network</category></item><item><title>A Deep Dive into Kubernetes Network Packet Forwarding</title><link>https://www.chenshaowen.com/en/blog/kubernetes-network-packets.html</link><pubDate>Sat, 17 Sep 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 17 Sep 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-network-packets.html</guid><description>This article is translated from https://learnk8s.io/kubernetes-network-packets, not word for word, with some of my own understanding worked in.
By reading this article, you can learn how packets are forwarded inside and outside Kubernetes, starting from the original web request all the way to the container hosting the application.
Kubernetes Network Requirements Before diving into the details of how packets flow through a Kubernetes cluster, let&amp;rsquo;s first clarify Kubernetes&amp;rsquo; requirements for networking.</description><dc:creator>微信公众号</dc:creator><category>Translation</category><category>Kubernetes</category><category>Network</category><category>Operations</category><category>Learning</category><category>iptables</category><category>CNI</category></item><item><title>Traffic Restriction Using Linux TC</title><link>https://www.chenshaowen.com/en/blog/traffic-restriction-using-linux-tc.html</link><pubDate>Sat, 20 Aug 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 20 Aug 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/traffic-restriction-using-linux-tc.html</guid><description>1. Traffic Control Principles Under Linux By queuing packets, we can control how data packets are sent. This kind of control is called data shaping (shape the data), and it includes the following operations on data:
Adding latency Dropping packets Reordering Duplicating, corrupting Rate control Under the qdisc-class-filter structure, controlling traffic requires three steps:</description><dc:creator>微信公众号</dc:creator><category>Linux</category><category>TC</category><category>Traffic Control</category><category>Operations</category><category>Network</category><category>Learning</category><category>Rate Limiting</category><category>Troubleshooting</category></item><item><title>An Image Management and Distribution Scheme Based on Harbor and Registry</title><link>https://www.chenshaowen.com/en/blog/a-image-management-and-distribution-case-based-on-harbor-and-registry.html</link><pubDate>Sat, 16 Jul 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 16 Jul 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-image-management-and-distribution-case-based-on-harbor-and-registry.html</guid><description>1. The Challenge of a Cross-Region Harbor If all you need is to store image data in a simple way, Registry is an excellent choice as an image repository. Registry not only supports multiple storage backends, but can also be configured with HTTPS certificates and access credentials. Worth noting: Harbor</description><dc:creator>微信公众号</dc:creator><category>Harbor</category><category>Registry</category><category>Images</category><category>Distribution</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Multi-Region</category><category>Acceleration</category><category>CICD</category></item><item><title>How to Run a Pod on a Specified Node</title><link>https://www.chenshaowen.com/en/blog/how-to-set-up-pod-to-run-to-a-specified-node.html</link><pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Mon, 27 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-up-pod-to-run-to-a-specified-node.html</guid><description>1. Specify a Node via nodeSelector When Creating a Workload Add a label to the node 1 kubectl label node node2 project=A Create the workload with the specified nodeSelector 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cat &amp;lt;&amp;lt;EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-nodeselector spec: replicas: 1 selector: matchLabels: app: nginx-nodeselector template: metadata: labels: app: nginx-nodeselector spec: nodeSelector: project: A containers: - name: nginx image: nginx EOF Check the workload 1 2 3 4 kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-nodeselector-7bb75b7687-7r5xk 1/1 Running 0 19s 10.</description><dc:creator>微信公众号</dc:creator><category>Pod</category><category>Kubernetes</category><category>Scheduling</category><category>Operations</category><category>nodeSelector</category><category>Learning</category></item><item><title>Using Blackbox Exporter to Test Network Connectivity</title><link>https://www.chenshaowen.com/en/blog/using-blackbox-exporter-to-test-network.html</link><pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 25 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-blackbox-exporter-to-test-network.html</guid><description>If you need to monitor the network status between two hosts, or between a host and an external service, then the Blackbox Exporter mentioned in this article is worth a try.
1. Installing Blackbox 1.1 Deploying on a Host Download the binary package 1 2 3 4 5 wget https://github.</description><dc:creator>微信公众号</dc:creator><category>Prometheus</category><category>Monitoring</category><category>Probing</category><category>Operations</category><category>Learning</category><category>Network</category><category>Blackbox Exporter</category><category>Availability</category></item><item><title>How to collect labels and annotations of Kubernetes objects</title><link>https://www.chenshaowen.com/en/blog/how-to-collect-labels-and-annotations-of-kubernetes-objects.html</link><pubDate>Thu, 02 Jun 2022 01:00:00 +0000</pubDate><atom:modified>Thu, 02 Jun 2022 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-collect-labels-and-annotations-of-kubernetes-objects.html</guid><description>1. Why kube-status-metrics is needed Kubernetes monitoring mainly focuses on two kinds of metrics:
Basic performance metrics CPU, memory, disk, network, and so on. These can be collected by deploying node-exporter as a DaemonSet and having Prometheus scrape the relevant metrics.
Resource object metrics The replica count of a Deployment, the running state of a Pod, and so on.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Monitoring</category><category>Metrics</category><category>Collection</category><category>Prometheus</category><category>Operations</category><category>Learning</category><category>Observability</category><category>kube-status-metrics</category></item><item><title>A Global Image Distribution Network</title><link>https://www.chenshaowen.com/en/blog/a-global-images-distribution-network.html</link><pubDate>Sun, 27 Mar 2022 14:00:00 +0000</pubDate><atom:modified>Sun, 27 Mar 2022 14:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-global-images-distribution-network.html</guid><description>1. Global Network Planning Many global, multi-region infrastructures do not put much thought into network planning at the outset. Once the business grows complex enough, they are forced into network adjustments and optimization. Yet any major network change has a huge impact on the business. In the end you are stuck in a dilemma, able to do nothing but invest more people, carry the baggage of history, and walk along the edge of a cliff again and again.</description><dc:creator>微信公众号</dc:creator><category>Images</category><category>Harbor</category><category>Network</category><category>Kubernetes</category><category>Operations</category><category>Distribution</category><category>Multi-Region</category><category>Learning</category></item><item><title>Interviewer Training - Identifying the Right People</title><link>https://www.chenshaowen.com/en/blog/interviewer-training-about-how-to-choose-right-people.html</link><pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 18 Jan 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/interviewer-training-about-how-to-choose-right-people.html</guid><description>1. Interview Process Establish hiring criteria Align on hiring criteria Resume analysis Opening small talk Competency assessment Values assessment Verifying authenticity Motivation assessment Attracting strong candidates Closing the interview Filling out the interview evaluation form Assisting with onboarding follow-up 2. Before the Interview 2.1 Establish Hiring Criteria why Evaluate candidates with a unified assessment standard</description><dc:creator>微信公众号</dc:creator><category>Interview</category><category>Training</category><category>Management</category><category>Teams</category><category>Recruiting</category><category>Talent</category><category>Learning</category><category>Human Resources</category></item><item><title>Common Commands for Cleaning Up Kubernetes Cluster Resources</title><link>https://www.chenshaowen.com/en/blog/common-commands-for-cleaning-up-kubernetes-cluster-resources.html</link><pubDate>Wed, 08 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 08 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-commands-for-cleaning-up-kubernetes-cluster-resources.html</guid><description>Clusters that run for a long time often face various kinds of resource exhaustion. On top of that, when disk space runs low, Kubelet will proactively clean up images on its own, adding another source of uncertainty. This article provides some command snippets for cleanup work.
1. Cleaning Up Basic Kubernetes Objects Clean up Pods in Evicted state 1 sudo kubectl get pods --all-namespaces -o wide | grep Evicted | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up Pods in Error state 1 sudo kubectl get pods --all-namespaces -o wide | grep Error | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up Pods in Completed state 1 sudo kubectl get pods --all-namespaces -o wide | grep Completed | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up unused PVs 1 sudo kubectl describe -A pvc | grep -E &amp;#34;^Name:.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Practice</category><category>Cleanup</category><category>Operations</category><category>Learning</category><category>kubectl</category><category>Troubleshooting</category><category>Resource Management</category></item><item><title>Multi-Cluster Applications Under Kubevela</title><link>https://www.chenshaowen.com/en/blog/multi-cluster-applications-under-kubevela.html</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 17 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/multi-cluster-applications-under-kubevela.html</guid><description>Kubevela is currently at version 1.1. We usually consider 1.x releases to be relatively stable and safe to try in production. Through continuous tracking and learning, I have also come to appreciate some of the things Kubevela does well. This is a summary document.
1. What Problem Kubevela Solves Aimed at platform developers Several roles need to be distinguished: development, operations, and operations development.</description><dc:creator>微信公众号</dc:creator><category>Kubevela</category><category>Kubernetes</category><category>Application</category><category>Operations</category><category>Multi-Cluster</category><category>OAM</category><category>Learning</category><category>Cloud Native</category></item><item><title>Gateway Service on Kubernetes: APISIX</title><link>https://www.chenshaowen.com/en/blog/a-gateway-under-kubernetes-named-apisix.html</link><pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-gateway-under-kubernetes-named-apisix.html</guid><description>1. Comparing a Few Common Gateways Nginx, a reverse proxy with a modular design, written in C OpenResty, a web development platform built around Nginx that can parse and execute Lua scripts Kong, an application on top of OpenResty, an API gateway with API management and request proxying, using PostgreSQL for storage APISIX, which replaces Kong&amp;rsquo;s PostgreSQL with Etcd and is built on Nginx&amp;rsquo;s core libraries APISIX&amp;rsquo;s advantage lies in the API management and extensibility it provides, so the gateway no longer merely forwards traffic to services but can be configured and customized.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>APISIX</category><category>Microservices</category><category>Gateway</category><category>Operations</category><category>Proxy</category><category>Learning</category><category>Cloud Native</category></item><item><title>A CICD Platform Based on Tekton</title><link>https://www.chenshaowen.com/en/blog/a-cicd-system-based-on-tekton.html</link><pubDate>Wed, 25 Aug 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Aug 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-cicd-system-based-on-tekton.html</guid><description>1. Background 1.1 Problems with the Current Use of Jenkins The orchestration engine is unstable Jenkins is an orchestration engine written in Java, and it stops the world (STW) during a full GC. Under large-scale builds, STW can prevent Jenkins from handling new requests.
Heavy builds stall Jenkins stores data in disk files; every pipeline and every build occupies a file directory, producing a huge number of files.</description><dc:creator>微信公众号</dc:creator><category>CICD</category><category>DevOps</category><category>Tekton</category><category>Kubernetes</category><category>Operations</category><category>Pipeline</category><category>Learning</category></item><item><title>Tekton Pipelines Across Multiple Clusters</title><link>https://www.chenshaowen.com/en/blog/using-kubefed-to-distribute-tekton-resource-cross-cluster.html</link><pubDate>Sat, 26 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 26 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-kubefed-to-distribute-tekton-resource-cross-cluster.html</guid><description>1. The Advantages of Multi-Cluster Tekton Builds Thanks to Kubernetes, Tekton already has good elasticity and can support large-scale builds. At the same time, developing Tasks mainly uses Yaml and Shell, which widens the range of scenarios Tekton can adapt to.
The figure above is a sketch of Tekton across multiple clusters.</description><dc:creator>微信公众号</dc:creator><category>Tekton</category><category>KubeFed</category><category>Kubernetes</category><category>Multi-Cluster</category><category>CICD</category><category>Operations</category><category>Learning</category><category>Pipeline</category><category>Build</category><category>Distributed Systems</category></item><item><title>How to Configure NetworkPolicy for NodePort in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-configure-networkpolicy-for-nodeport.html</link><pubDate>Wed, 23 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 23 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-configure-networkpolicy-for-nodeport.html</guid><description>1. Background As shown above, the business team needs to isolate the services in a namespace, forbidding access from workloads in the bar namespace while allowing users to reach the service through a Load Balancer (LB) via NodePort. It is easy to write a network policy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apiVersion: networking.</description><dc:creator>微信公众号</dc:creator><category>NetworkPolicy</category><category>Network</category><category>Kubernetes</category><category>Operations</category><category>Security</category><category>Learning</category><category>NodePort</category><category>Network Isolation</category></item><item><title>Distributing Files and Running Scripts on VM Nodes in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-distribute-files-and-scripts-to-vm-under-kubernetes.html</link><pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-distribute-files-and-scripts-to-vm-under-kubernetes.html</guid><description>1. What This Article Mainly Discusses Never build a high tower on shifting sand. Business growth and the evolution of business forms both need solid, powerful IT systems to support them. Business content is transparent to the market, but IT systems cannot be built to perfection overnight. In the future, competition between companies will mainly come from competition between their IT systems, and the ability to respond quickly to business requirements will be the key to winning.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Docker</category><category>PaaS</category><category>Operations</category><category>Configuration Management</category><category>Virtual Machines</category><category>Learning</category><category>Cloud Native</category></item><item><title>How to Build the istio Project on CentOS 8</title><link>https://www.chenshaowen.com/en/blog/how-to-build-istio-under-centos.html</link><pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 08 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-istio-under-centos.html</guid><description>This article mainly describes how to build the https://github.com/istio/istio project on CentOS 8.2 using local tools. Another approach is to use the BUILD_WITH_CONTAINER parameter to build inside a container, which depends only on make and docker.
1. Install and Upgrade Ruby &amp;gt;= 2.6 Install Ruby 1 yum install -y ruby Check the Ruby version 1 2 3 ruby -v ruby 2.</description><dc:creator>微信公众号</dc:creator><category>CentOS</category><category>Istio</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Service Mesh</category><category>Compilation</category><category>Open Source</category></item><item><title>Installing and Configuring Homebrew on CentOS 7</title><link>https://www.chenshaowen.com/en/blog/install-homebrew-in-centos-7.html</link><pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Sun, 28 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-homebrew-in-centos-7.html</guid><description>When installing packages on CentOS you usually have to hunt down all sorts of repositories; with Homebrew that hassle goes away. This article uses CentOS 7.6 — other system versions may differ.
1. Create a Non-root User Homebrew refuses to run as root, so a new user has to be created.</description><dc:creator>微信公众号</dc:creator><category>CentOS</category><category>Environment</category><category>Homebrew</category><category>Operations</category><category>Package Management</category><category>Learning</category></item><item><title>DevOps Toolchain: Argo CD</title><link>https://www.chenshaowen.com/en/blog/argocd-of-devops-tool-chain.html</link><pubDate>Thu, 04 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/argocd-of-devops-tool-chain.html</guid><description>1. What Problem Argo CD Solves 1.1 Starting from GitOps GitOps originated from a blog post published by Weaveworks in 2017: GitOps - Operations by Pull Request. In it, Alexis introduced a deployment approach that treats Git as the single source of truth.
In GitOps practice, we need to define software infrastructure in a Git repository for management.</description><dc:creator>微信公众号</dc:creator><category>DevOps</category><category>ArgoCD</category><category>Kubernetes</category><category>CICD</category><category>GitOps</category><category>Operations</category><category>Learning</category><category>Deployment</category><category>Best Practices</category></item><item><title>How to Use Docker in Docker</title><link>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</link><pubDate>Sat, 21 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 21 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</guid><description>1. Typical Use Cases In CI, there is usually a CI Engine responsible for parsing the pipeline and controlling the whole build process, while the actual build is delegated to an Agent. Jenkins and GitLab both work this way.
As shown below, there are many kinds of Agents that connect to the CI Engine.</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Kubernetes</category><category>Containers</category><category>CI</category><category>CICD</category><category>Operations</category><category>Learning</category><category>DinD</category><category>Build</category><category>Jenkins</category></item><item><title>Let's Learn Go -- (6) Interface</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-6.html</link><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-6.html</guid><description>1. Interface-Oriented Programming 1.1 Characteristics Interface-oriented programming emphasizes interaction between modules through interfaces. First, the caller specifies a set of method signatures; then, the callee implements that set of methods.
What sets interface programming apart from other programming styles is that it focuses on methods, not attributes. In many programming scenarios, methods are defined around attributes.</description><dc:creator>微信公众号</dc:creator><category>Go</category><category>Let's Learn Go</category><category>Interface</category><category>Learning</category></item><item><title>Let's Learn Go -- (5) Goroutine and Channel</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-5.html</link><pubDate>Thu, 03 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 03 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-5.html</guid><description>1. The Concurrency Model in Go 1.1 The Communication Model: CSP CSP stands for Communicating Sequential Process, a model for concurrent communication. A Process can use many Channels, and a Channel does not care who is using it — it is only responsible for sending and receiving data.
In the Go community there is a very famous maxim: do not communicate by sharing memory; instead, share memory by communicating.</description><dc:creator>微信公众号</dc:creator><category>Go</category><category>Concurrency</category><category>Parallelism</category><category>Goroutine</category><category>Channel</category><category>Learning</category><category>Let's Learn Go</category></item><item><title>Etcd and Etcdctl in Practice</title><link>https://www.chenshaowen.com/en/blog/the-use-of-etcd-and-etcdctl.html</link><pubDate>Tue, 11 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 11 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-use-of-etcd-and-etcdctl.html</guid><description>1. Basic Introduction to Etcd Etcd is a distributed Key/Value storage system. Through distributed locks, leader election, and write barriers it achieves distributed coordination, offering highly available, persistent data storage and retrieval services. How it works Every Etcd node stores a complete copy of the data, and at any moment</description><dc:creator>微信公众号</dc:creator><category>Etcd</category><category>Etcdctl</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Distributed Storage</category><category>Configuration</category><category>Cluster</category></item><item><title>Jenkins Plugin Development</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-the-plugin-of-jenkins.html</link><pubDate>Sat, 20 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 20 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-the-plugin-of-jenkins.html</guid><description>Using Jenkins always means dealing with all kinds of plugins. To practice DevOps better, we should also be capable of developing plugins ourselves, so the whole process can converge inside Jenkins.
1. Jenkins Plugins 1.1 The Plugin Ecosystem Jenkins&amp;rsquo; predecessor Hudson started in 2004, and 16 years on it is still a mainstream CI/CD engine.</description><dc:creator>微信公众号</dc:creator><category>Jenkins</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category><category>Plugin</category><category>Java</category><category>Learning</category></item><item><title>Affinity in the Kubernetes Scheduler</title><link>https://www.chenshaowen.com/en/blog/affinity-of-kubernetes-scheduler.html</link><pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 30 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/affinity-of-kubernetes-scheduler.html</guid><description>1. The Scheduler in Kubernetes kube-scheduler is the component in Kubernetes that decides which Node a Pending Pod runs on; it is called the scheduler. Kubernetes ships with a large number of built-in scheduling policies and also provides some advanced scheduling policies (nodeAffinity, podAffinity, and so on) for users, which</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Scheduling</category><category>Affinity</category><category>Learning</category><category>Operations</category></item><item><title>Backing Up a Kubernetes Cluster with Velero</title><link>https://www.chenshaowen.com/en/blog/backup-kubernetes-cluster-using-velero.html</link><pubDate>Wed, 25 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/backup-kubernetes-cluster-using-velero.html</guid><description>1. Introduction to Velero Velero is an open-source Kubernetes cluster backup and migration tool from the heptio team (acquired by VMWare).
Velero stores cluster resources in object storage. It supports AWS, Azure, and GCP object storage by default, is compatible with the S3 protocol, and can be extended to other platforms such as Aliyun OSS through plugins.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Velero</category><category>Backup</category><category>Operations</category><category>Learning</category><category>Disaster Recovery</category><category>Migration</category><category>Cluster</category></item><item><title>Basic Operations for Deployments in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/basic-operation-of-deployment-in-kubernetes.html</link><pubDate>Fri, 27 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 27 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-operation-of-deployment-in-kubernetes.html</guid><description>A Deployment controls the number and state of Pods by creating ReplicaSets. This post mainly introduces some common Deployment operations.
1. Deployment yaml Format Passing the --dry-run flag means the command is not actually executed, only YAML output is generated:
1 kubectl create deployment nginx --image=nginx --dry-run -o yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx name: nginx resources: {} status: {} 2.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Deployment</category><category>Deployment</category><category>Learning</category><category>Operations</category></item><item><title>How to Develop an Operator Using KubeBuilder</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-a-operator-using-kubebuilder.html</link><pubDate>Wed, 25 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-a-operator-using-kubebuilder.html</guid><description>With the Operator approach, Kubernetes functionality can be extended in a friendly way. Operator = CRD + Controller. First you generate the CRD from a yaml definition, then the Controller continuously watches the data in etcd and performs the corresponding actions. There is a lot of tedious and repetitive work involved in developing an Operator.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Go</category><category>Operator</category><category>R&amp;D</category><category>Operations</category><category>CRD</category><category>Learning</category></item><item><title>Using emptyDir, hostPath, and localVolume in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/using-emptydir-hostpath-localvolume-in-kubernetes.html</link><pubDate>Sat, 24 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-emptydir-hostpath-localvolume-in-kubernetes.html</guid><description>Earlier, in Kubernetes Volumes, we got some understanding of Volumes. This post focuses on practice, learning how to use the three local storage options: emptydir, hostpath, and localvolume.
1. Basic Properties of a PV 1.1 PV Lifecycle PV states:
Available: available, not yet bound by any PVC Bound: already bound to a PVC Released: the PVC was deleted, but the resource has not yet been reclaimed Failed: automatic reclamation failed 1.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Volume</category><category>Storage</category><category>Operations</category><category>PVC</category><category>Learning</category></item><item><title>Installing a Kubernetes Cluster with Kubeadm</title><link>https://www.chenshaowen.com/en/blog/using-kubeadm-to-install-the-kubernetes-cluster.html</link><pubDate>Thu, 15 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 15 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-kubeadm-to-install-the-kubernetes-cluster.html</guid><description>1. Cluster Planning Prepare three hosts: one Master and two Nodes. Operating system: CentOS 7 Specs: 2 Core 4 GB Docker version: 18.06.3 Kubernetes version: 1.15.3 If you are using a purchased cloud host, open the following ports: 1 2 3 4 5 6 7 8 9 10 11 12</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Kubeadm</category><category>Installation</category><category>Operations</category><category>Cluster</category><category>Learning</category></item><item><title>Kubernetes Complex Stateful Application Management Framework -- Operator</title><link>https://www.chenshaowen.com/en/blog/complex-application-management-framework-operator-for-kubernetes.html</link><pubDate>Thu, 25 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 25 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/complex-application-management-framework-operator-for-kubernetes.html</guid><description>1. Origins Originally, two CoreOS employees, in order to make deploying etcd clusters easier, bound corresponding logical operations to the create, delete, and update events of the etcdCluster object, using Kubernetes to automate etcd cluster management.
A few months later, at a KubeCon conference, they shared this approach, which they called Operator, and it received a strong response from the community.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Helm</category><category>Practice</category><category>Operator</category><category>Operations</category><category>Stateful Applications</category><category>Learning</category></item><item><title>Kubernetes' Package Manager -- Helm</title><link>https://www.chenshaowen.com/en/blog/package-manager-helm-of-kubernetes.html</link><pubDate>Wed, 24 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/package-manager-helm-of-kubernetes.html</guid><description>1. Why Helm Is Needed One important design philosophy in Kubernetes is declarative operation. Users change the system by setting the system&amp;rsquo;s expected state. For example, the current replica count is 2 and it needs to be adjusted to 3. The declarative way is to modify the replica count in</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Helm</category><category>Practice</category><category>Operations</category><category>Package Management</category><category>Learning</category><category>Chart</category><category>Deployment</category></item><item><title>Let's Learn Go -- (3) Go Modules</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-3.html</link><pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-3.html</guid><description>1. Go&amp;rsquo;s Package Management Mechanisms 1.1 GOPATH GOPATH pulls code with the go get command and places it in the GOPATH directory. The problems with GOPATH are: It cannot manage package versions It uses a global repository, so it cannot isolate projects effectively 1.2 Vendor Starting with version 1.5, Go</description><dc:creator>微信公众号</dc:creator><category>Go</category><category>GoModules</category><category>Let's Learn Go</category><category>Learning</category><category>R&amp;D</category><category>Package Management</category></item><item><title>A Practical Guide to kubectl</title><link>https://www.chenshaowen.com/en/blog/practice-guide-to-kubectl.html</link><pubDate>Fri, 19 Jul 2019 01:00:00 +0000</pubDate><atom:modified>Fri, 19 Jul 2019 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/practice-guide-to-kubectl.html</guid><description>1. What Is kubectl kubectl is the command-line tool for Kubernetes. It interacts with the cluster through the API server.
2. Configuring kubectl kubectl can be configured through ~/.kube/config to connect to one or more clusters.
For details on how to configure it, see: Configure Access to Multiple Clusters. If you need to configure a remote cluster, see: Building a Remote Kubernetes Development Environment.</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>kubectl</category><category>Practice</category><category>Learning</category><category>Operations</category></item><item><title>Advanced Pytest: Mock</title><link>https://www.chenshaowen.com/en/blog/mock-of-pytest.html</link><pubDate>Sun, 27 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Sun, 27 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/mock-of-pytest.html</guid><description>1. Why We Need Mock When writing unit tests, the function under test is sometimes not a self-contained executable unit. It depends on external resources, such as the return value of another function or a value in a row of a database. To shield the test from interference from external</description><dc:creator>微信公众号</dc:creator><category>Testing</category><category>Python</category><category>Pytest</category><category>Learning</category></item><item><title>PaaS Deployment with Buildpack</title><link>https://www.chenshaowen.com/en/blog/buildpack-for-paas-deployment.html</link><pubDate>Thu, 24 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/buildpack-for-paas-deployment.html</guid><description>I have been learning Go recently, and the internal PaaS platform we commonly use happens to support Go as well as related Web frameworks. A PaaS system that supports multiple languages cannot do without the buildpack mechanism. Although PaaS platforms keep being upgraded, the buildpack mechanism has always been retained.</description><dc:creator>微信公众号</dc:creator><category>PaaS</category><category>Buildpack</category><category>Operations</category><category>R&amp;D</category><category>Deployment</category><category>Learning</category><category>Cloud Native</category><category>Multi-language</category></item><item><title>Getting Started with Pytest</title><link>https://www.chenshaowen.com/en/blog/101-of-pytest.html</link><pubDate>Sat, 29 Dec 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 29 Dec 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-of-pytest.html</guid><description>The Pytest framework is simple to use, rich in plugins, and powerful, and it is widely used for Python automated testing. This article introduces some basic concepts and usage of Pytest. 1. How It Runs Step one, Pytest reads its configuration from the command line or a file. Step two,</description><dc:creator>微信公众号</dc:creator><category>Testing</category><category>Python</category><category>Pytest</category><category>R&amp;D</category><category>Learning</category><category>Automated Testing</category><category>Unit Testing</category><category>Best Practices</category></item><item><title>Development Tools and Productivity Tips</title><link>https://www.chenshaowen.com/en/blog/development-tools-and-productivity-tips.html</link><pubDate>Fri, 02 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 02 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/development-tools-and-productivity-tips.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, collecting common development tools and productivity-related techniques. 1. The Babel Transpiler ES6 provides many new features, but not every browser supports them perfectly, while ES5 support is far better. Babel is an ES6 transpiler that converts ES6 code into ES5 code. This means you</description><dc:creator>微信公众号</dc:creator><category>Tools</category><category>R&amp;D</category><category>Productivity</category><category>VSCode</category><category>Learning</category></item><item><title>Python and Django Development Practices</title><link>https://www.chenshaowen.com/en/blog/python-and-django-development-practices.html</link><pubDate>Fri, 19 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 19 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python-and-django-development-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, collecting common problems and solutions in Python and Django development. 1. Sorting Python Iterables Iterable objects fall into 3 main categories: All sequence types, such as list, str, and tuple Some non-sequence types, such as dict and file Objects that contain an __iter__() or</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Django</category><category>R&amp;D</category><category>Learning</category><category>Backend</category></item><item><title>Enabling Kubernetes Monitoring and Stress Testing</title><link>https://www.chenshaowen.com/en/blog/open-k8s-monitoring-and-stress-testing..html</link><pubDate>Mon, 24 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 24 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/open-k8s-monitoring-and-stress-testing..html</guid><description>1. Kubectl Basic Commands 1.1 Creating Objects 1 2 3 4 5 6 7 8 # Create resources; a remote URL also works kubectl create -f ./my.yaml # Create resources from multiple files kubectl create -f ./my1.yaml -f ./my2.yaml # Create resources using all manifest files in a directory kubectl create -f .</description><dc:creator>微信公众号</dc:creator><category>Kubernetes</category><category>Testing</category><category>Monitoring</category><category>Operations</category><category>Learning</category><category>kubectl</category><category>Stress Testing</category><category>Observability</category></item><item><title>Learning Kubernetes with MiniKube on Windows 7</title><link>https://www.chenshaowen.com/en/blog/how-to-use-minikube-under-windows7.html</link><pubDate>Sun, 23 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 23 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-minikube-under-windows7.html</guid><description>1. Basic Concepts 1.1 Kubernetes Kubernetes (K8s for short), the successor to Google&amp;rsquo;s Borg, is an open-source system for automatically deploying, scaling, and managing containerized applications.
The features it provides:
Automated deployment of containers Automated scaling up and down Automated application/service upgrades Grouping containers to serve traffic externally, with load balancing support Health checks for services, with automatic restarts 1.</description><dc:creator>微信公众号</dc:creator><category>Docker</category><category>Kubernetes</category><category>Windows</category><category>MiniKube</category><category>Learning</category><category>Operations</category></item><item><title>Installing the Python3 and Go Kernels in Jupyter</title><link>https://www.chenshaowen.com/en/blog/install-python3-and-go-kernel-in-jupyter.html</link><pubDate>Sun, 09 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-python3-and-go-kernel-in-jupyter.html</guid><description>Earlier we mentioned that Jupyter Notebook is an interactive notebook that supports running more than 40 programming languages and is very well suited to teaching. Recently, while learning the Go language, I thought of Jupyter. This article mainly describes how to install the Python3 and Go kernels inside Jupyter. 1.</description><dc:creator>微信公众号</dc:creator><category>Jupyter</category><category>Go</category><category>Python3</category><category>Learning</category><category>R&amp;D</category></item><item><title>Robot Framework Basics</title><link>https://www.chenshaowen.com/en/blog/basic-of-robot-framework.html</link><pubDate>Tue, 24 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 24 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-of-robot-framework.html</guid><description>This post mainly introduces some basic concepts of Robot Framework and how to write a test case. 1. Basic Elements 1.1 Keywords Robot Framework keywords are similar to functions. They are divided into system keywords and user-defined keywords. System keywords, imported by loading a Library User keywords, imported by loading</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Testing</category><category>RobotFramework</category><category>DevOps</category><category>Learning</category><category>Automated Testing</category><category>R&amp;D</category><category>CICD</category></item><item><title>How to Safely Access request from Anywhere in Django</title><link>https://www.chenshaowen.com/en/blog/how-to-secure-get-request-in-django.html</link><pubDate>Tue, 26 Jun 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 26 Jun 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-secure-get-request-in-django.html</guid><description>In Django, request holds all the information for a single request. Backend processing logic frequently needs information from request. For example, the DRF framework may want to be able to obtain request at any time, or pass some parameters globally. There are third-party Django apps with tools that can satisfy</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Python</category><category>R&amp;D</category><category>Tips</category><category>Learning</category><category>DRF</category><category>Thread Safety</category></item><item><title>Python2 Source Code Study: Dictionary and List Implementation</title><link>https://www.chenshaowen.com/en/blog/dictionary-and-list-structure-in-python2.html</link><pubDate>Mon, 12 Mar 2018 11:22:55 +0000</pubDate><atom:modified>Mon, 12 Mar 2018 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/dictionary-and-list-structure-in-python2.html</guid><description>1. Why Dictionary Lookups Are Faster Than List Lookups First, take a look at the following piece of code. 1 2 3 4 5 6 7 8 9 10 11 12 13 from time import time t = time() data = [chr(i) for i in range(97, 123)] # data =</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Source Code</category><category>Learning</category><category>R&amp;D</category></item><item><title>Python2 Source Code Study: pyc</title><link>https://www.chenshaowen.com/en/blog/python2-source-of-pyc.html</link><pubDate>Fri, 09 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 09 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python2-source-of-pyc.html</guid><description>This article uses the Python 2.7.8 source code as an example.
1. Common File Formats in Python py file A Python source code file, which can be modified with a text editor.
pyc file The bytecode file generated after Python source code is compiled.
pyw file When a pyc file is executed, a console window appears; when a pyw file is executed, it does not.</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Source Code</category><category>Compilation</category><category>Learning</category><category>R&amp;D</category></item><item><title>PPT Making Guide: Course Notes on the Presentation Part</title><link>https://www.chenshaowen.com/en/blog/notes-on-making-strategy-of-the-presentation.html</link><pubDate>Tue, 06 Mar 2018 20:55:29 +0000</pubDate><atom:modified>Tue, 06 Mar 2018 20:55:29 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/notes-on-making-strategy-of-the-presentation.html</guid><description>1. Overview Course prerequisite: the logical structure and content of the PowerPoint have already been worked out and written. The course enhances the expressiveness of PowerPoint mainly through the following six parts: Color Text Shapes Charts Slide Master Animation 2. Color 2.1 Understanding Color Hue Chromatic colors, such as purple,</description><dc:creator>微信公众号</dc:creator><category>PPT</category><category>Tools</category><category>Learning</category><category>Sharing</category></item><item><title>How to Build a PyPI Server with devpi</title><link>https://www.chenshaowen.com/en/blog/how-to-build-a-pypi-server-using-devpi.html</link><pubDate>Sun, 04 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 04 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-a-pypi-server-using-devpi.html</guid><description>When you install Python packages with pip, it looks up the corresponding package on the https://pypi.python.org/simple/ index by default, then downloads and installs it. But in an intranet environment, or when you need to publish some private packages to designated users, you have to build your own PyPI Server. This post mainly records the process of building a PyPI Server index with the devpi tool, along with some commonly used commands.</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>devpi</category><category>Tools</category><category>Operations</category><category>Learning</category><category>PyPI</category><category>Private Index</category><category>Package Management</category><category>Intranet</category></item><item><title>Django Development Conventions (Part 1)</title><link>https://www.chenshaowen.com/en/blog/development-specification-1-of-django.html</link><pubDate>Sat, 27 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 27 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/development-specification-1-of-django.html</guid><description>This article mainly lays out a few things to watch out for during Django development. A consistent coding style and sound design principles help a project&amp;rsquo;s development and maintenance, and are worth developers studying and discussing continuously. 1. Encoding Declaration When the Python interpreter executes code, it needs to be</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Python</category><category>Conventions</category><category>R&amp;D</category><category>Learning</category><category>Best Practices</category><category>Code Style</category><category>Architecture</category></item><item><title>My Toolbox</title><link>https://www.chenshaowen.com/en/blog/toolbox.html</link><pubDate>Tue, 16 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 16 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/toolbox.html</guid><description>1. Documentation Pandoc Pandoc is a text conversion tool written in Haskell. It is fast and supports a wide range of formats, converting Markdown, LaTeX, and others into HTML, Docs, PDF, and more. All it takes is a simple command: 1 pandoc mypaper.md -o mypaper.docx Graphviz An open-source toolkit developed</description><dc:creator>微信公众号</dc:creator><category>Tools</category><category>Efficiency</category><category>R&amp;D</category><category>Learning</category><category>Sharing</category></item><item><title>Processes, Threads, and Coroutines in Python</title><link>https://www.chenshaowen.com/en/blog/process-and-thread-in-python.html</link><pubDate>Sat, 06 Jan 2018 11:22:55 +0000</pubDate><atom:modified>Sat, 06 Jan 2018 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/process-and-thread-in-python.html</guid><description>1. Processes A process is an instance of a running program, and it is the most basic unit by which the kernel allocates resources. A process has its own independent heap and stack, its own address space, and its own resource handles. Processes are scheduled by the OS, the scheduling</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Concurrency</category><category>Processes</category><category>Threads</category><category>Coroutines</category><category>R&amp;D</category><category>Learning</category></item><item><title>Interactive Notebook - Jupyter</title><link>https://www.chenshaowen.com/en/blog/interactive-notebook-jupyter.html</link><pubDate>Mon, 25 Dec 2017 17:22:45 +0000</pubDate><atom:modified>Mon, 25 Dec 2017 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/interactive-notebook-jupyter.html</guid><description>1. Introduction Jupyter Notebook (formerly IPython notebook) is an interactive notebook that supports running more than 40 programming languages. Jupyter Notebook is in fact a web application that lets you create and share program documents, with support for live code, mathematical equations, visualizations, and Markdown. Its uses include data cleaning</description><dc:creator>微信公众号</dc:creator><category>Tools</category><category>Python</category><category>Notes</category><category>Jupyter</category><category>Learning</category><category>R&amp;D</category><category>Data Analysis</category><category>Machine Learning</category><category>Visualization</category></item><item><title>Error Code Design and Unified Exception Handling in Django</title><link>https://www.chenshaowen.com/en/blog/error-code-design-and-unified-processing-in-django.html</link><pubDate>Mon, 30 Oct 2017 21:50:33 +0000</pubDate><atom:modified>Mon, 30 Oct 2017 21:50:33 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/error-code-design-and-unified-processing-in-django.html</guid><description>I currently use Django for SaaS development, and I develop and maintain several SaaS applications at the same time. Many SaaS applications have agreed-upon error codes, some used to handle login state, others to mark business logic status. For a feature that is so strongly shared across projects, it is</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Python</category><category>Error Codes</category><category>Middleware</category><category>R&amp;D</category><category>Learning</category><category>API</category><category>Best Practices</category></item><item><title>How to Learn a New Programming Language: Taking Python as an Example</title><link>https://www.chenshaowen.com/en/blog/how-to-learn-a-new-programming-language-taking-python-as-an-example.html</link><pubDate>Fri, 13 Oct 2017 23:00:06 +0000</pubDate><atom:modified>Fri, 13 Oct 2017 23:00:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-learn-a-new-programming-language-taking-python-as-an-example.html</guid><description>1. Understand the Background of the New Language ABC was a teaching language designed specifically for non-professional programmers, but because it was closed, it did not succeed. During Christmas 1989, Guido van Rossum developed a new script interpreter and named it Python, as a kind of successor to the ABC</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Learning</category><category>Programming</category><category>R&amp;D</category></item><item><title>Programmer's Editor - Atom</title><link>https://www.chenshaowen.com/en/blog/programming-editor-atom.html</link><pubDate>Fri, 04 Aug 2017 23:46:56 +0000</pubDate><atom:modified>Fri, 04 Aug 2017 23:46:56 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/programming-editor-atom.html</guid><description>1. Introduction to Atom Atom is a code editor that supports the three major desktop platforms Windows, Mac, and Linux, is completely free, and is open source on GitHub. Go now 1.1 Pros and Cons Main advantages A strong development and maintenance team, an open source project, fast Bug fixes,</description><dc:creator>微信公众号</dc:creator><category>Tools</category><category>Development</category><category>R&amp;D</category><category>Editor</category><category>Learning</category></item><item><title>Using Custom Fonts on a Page</title><link>https://www.chenshaowen.com/en/blog/page-uses-a-custom-font.html</link><pubDate>Tue, 01 Aug 2017 19:30:47 +0000</pubDate><atom:modified>Tue, 01 Aug 2017 19:30:47 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/page-uses-a-custom-font.html</guid><description>1. Font-family The fonts you can use on a web page are limited to the handful of fonts already installed on the PC the browser is running on. Windows operating system, Chinese fonts: SimHei (Hei) SimSun (Song) NSimSun (New Song) FangSong (FangSong) KaiTi (Kai) FangSongGB2312 (FangSong GB2312) KaiTiGB2312 (Kai GB2312)</description><dc:creator>微信公众号</dc:creator><category>Frontend</category><category>CSS</category><category>R&amp;D</category><category>Fonts</category><category>Learning</category></item><item><title>Docker Basics</title><link>https://www.chenshaowen.com/en/blog/basis-of-docker.html</link><pubDate>Fri, 28 Jul 2017 15:30:00 +0000</pubDate><atom:modified>Fri, 28 Jul 2017 15:30:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basis-of-docker.html</guid><description>1. What Docker Is Docker was born in early 2013 as a side project inside dotCloud (the former name of Docker Inc.). Its source code is hosted on GitHub, it is written in Go, and it follows the Apache 2.0 open-source license.
The goal of the Docker project is to provide a lightweight operating system virtualization solution.</description><dc:creator>微信公众号</dc:creator><category>PaaS</category><category>DevOps</category><category>Docker</category><category>Containers</category><category>Learning</category></item><item><title>Automated Testing Tool - Selenium</title><link>https://www.chenshaowen.com/en/blog/automated-testing-tool-about-selenium.html</link><pubDate>Sat, 22 Jul 2017 15:19:42 +0000</pubDate><atom:modified>Sat, 22 Jul 2017 15:19:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/automated-testing-tool-about-selenium.html</guid><description>1. Introduction to Selenium Selenium is an integration testing tool from Thoughtworks. At its core, Selenium Core is based on
JSUnit, written entirely in JavaScript, and can run in any browser that supports JavaScript.
1.1 Main Features and Characteristics Open source and free. Multi-browser support: Firefox, Chrome, IE, Opera — usable for compatibility testing.</description><dc:creator>微信公众号</dc:creator><category>Tools</category><category>Testing</category><category>Automation</category><category>R&amp;D</category><category>Selenium</category><category>Learning</category></item><item><title>Django Signals</title><link>https://www.chenshaowen.com/en/blog/signal-of-django.html</link><pubDate>Thu, 13 Jul 2017 13:06:10 +0000</pubDate><atom:modified>Thu, 13 Jul 2017 13:06:10 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/signal-of-django.html</guid><description>1. Basic Concepts Django ships with a signal dispatcher built in. Signals help decouple program modules. When an event occurs elsewhere in the application, a designated function is notified. Signals let certain senders notify a group of receivers that some action has taken place. 2. Using Signals 2.1 Declaring a</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Backend</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Decoupling</category><category>Events</category></item><item><title>ECMAScript 6 Primer</title><link>https://www.chenshaowen.com/en/blog/book/the-101-of-ecma-script.html</link><pubDate>Tue, 27 Jun 2017 20:05:01 +0000</pubDate><atom:modified>Tue, 27 Jun 2017 20:05:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-101-of-ecma-script.html</guid><description>Author: Ruan Yifeng
Publisher: Publishing House of Electronics Industry
Publication year: 2014-8-1
ISBN: 9787121238369
E-book</description><dc:creator>微信公众号</dc:creator><category>Books</category><category>JavaScript</category><category>Frontend</category><category>Learning</category></item><item><title>Django Snippets</title><link>https://www.chenshaowen.com/en/blog/snippets-of-django.html</link><pubDate>Thu, 22 Jun 2017 23:52:06 +0000</pubDate><atom:modified>Thu, 22 Jun 2017 23:52:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/snippets-of-django.html</guid><description>1. Auto-Register All Models in Admin admin.py
1 2 3 4 5 6 7 8 9 10 # -*- coding: utf-8 -*- import inspect from django.contrib import admin from . import models for name, obj in inspect.getmembers(models): try: if inspect.isclass(obj): admin.site.register(getattr(models, name)) except Exception as e: pass 2. Get All View Names Get all view names of the project</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Tips</category></item><item><title>Dive Into Python</title><link>https://www.chenshaowen.com/en/blog/book/dive-into-python.html</link><pubDate>Fri, 24 Feb 2017 13:11:11 +0000</pubDate><atom:modified>Fri, 24 Feb 2017 13:11:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/dive-into-python.html</guid><description>Author: Mark Pilgrim
Publisher: Apress
Published: 2004-07-19
ISBN: 9781590593561</description><dc:creator>微信公众号</dc:creator><category>Books</category><category>Python</category><category>Learning</category><category>Programming</category><category>Reading</category></item><item><title>Drawing Fractals with Python: Koch Curves, Julia Sets, and Mandelbrot Sets</title><link>https://www.chenshaowen.com/en/blog/drawing-2d-fractal-graph-using-python.html</link><pubDate>Wed, 25 Jan 2017 23:28:00 +0000</pubDate><atom:modified>Wed, 25 Jan 2017 23:28:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/drawing-2d-fractal-graph-using-python.html</guid><description>1. Koch Curve The Swedish mathematician Helge von Koch proposed the Koch curve in his 1904 paper &amp;ldquo;On a continuous curve without tangents, constructible from elementary geometry.&amp;rdquo; It is described as follows: Specify the length of a line segment \(l\) (this can be thought of as iteration 0) Divide this</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Math</category><category>R&amp;D</category><category>Fractal</category><category>Learning</category><category>Visualization</category><category>Drawing</category></item><item><title>Permission Control in Django</title><link>https://www.chenshaowen.com/en/blog/django-permissions-control.html</link><pubDate>Sun, 22 Jan 2017 09:23:45 +0000</pubDate><atom:modified>Sun, 22 Jan 2017 09:23:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-permissions-control.html</guid><description>1. Django Built-in Permission Management 1.1 Permission Categories Permission Used to define User A&amp;rsquo;s permission on Task. User If User A has permission on Model B, then User A has the corresponding permission on all instances in Model B. The user_permission field of the User object is used to manage</description><dc:creator>微信公众号</dc:creator><category>Django</category><category>Development</category><category>Permissions</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Security</category><category>RBAC</category><category>Authentication</category></item><item><title>Learning and Using BWAPP</title><link>https://www.chenshaowen.com/en/blog/study-of-bwapp.html</link><pubDate>Sun, 25 Dec 2016 15:38:42 +0000</pubDate><atom:modified>Sun, 25 Dec 2016 15:38:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/study-of-bwapp.html</guid><description>1. Introduction to BWAPP buggy web Application, abbreviated BWAPP, is an open-source web application that packs in all kinds of common and recent vulnerabilities, with the goal of helping security enthusiasts, developers, and students find and prevent web vulnerabilities. It contains more than 100 vulnerabilities, covering every major known web vulnerability, including the OWASP Top 10 security risks, and most importantly it already includes the OpenSSL and ShellShock vulnerabilities.</description><dc:creator>微信公众号</dc:creator><category>Security</category><category>Network</category><category>Learning</category><category>BWAPP</category></item><item><title>Getting Started with Character Encoding in Python</title><link>https://www.chenshaowen.com/en/blog/python-coding.html</link><pubDate>Tue, 08 Nov 2016 20:21:42 +0000</pubDate><atom:modified>Tue, 08 Nov 2016 20:21:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python-coding.html</guid><description>Background: I had just finished a Django data-query web project. The data came from internal API queries, and every query had to call several APIs to fetch the data and render it on the front-end page. Since the relevant data does not change often, I designed a cache to improve</description><dc:creator>微信公众号</dc:creator><category>Python</category><category>Encoding</category><category>R&amp;D</category><category>Learning</category></item><item><title>Frontend Automated Build Tool gulpjs</title><link>https://www.chenshaowen.com/en/blog/front-auto-build-tools-gulp.html</link><pubDate>Tue, 28 Jun 2016 21:59:04 +0000</pubDate><atom:modified>Tue, 28 Jun 2016 21:59:04 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/front-auto-build-tools-gulp.html</guid><description>1. Frontend Automated Build Tools When dealing with frontend scenarios, you write CSS with Less, HTML with Jade, modularize with Browserify, and add MD5 hashes to resources for non-overwriting deployments. If all this work were done purely by hand, the efficiency would be extremely low. A frontend automated build tool</description><dc:creator>微信公众号</dc:creator><category>Frontend</category><category>gulp</category><category>Tools</category><category>R&amp;D</category><category>Build</category><category>Learning</category><category>Automation</category></item></channel></rss>