Xinkun Blog

科学引导思想 技术改变生活

漫话docker的衰落与kubernetes的兴起

Talk about the decline of docker.

写在最前 伴随着kubernetes 1.20中对于docker的弃用,关于docker的灭亡与kubernetes的兴起的话题再度热了起来。讨论中关于docker灭亡的观点我不敢苟同。docker还远未到达灭亡的程度。相较而言,我觉得更恰当的说法应该是docker的衰落。本文我也就我个人的角度,聊聊我所经历的docker的衰落与kubernetes的兴起。 横空出世——docker的兴...

基于Kubernetes和OpenKruise的可变基础设施实践

Variable infrastructure practice based on Kubernetes and OpenKruise.

对于可变基础设施的思考 kubernetes中的可变与不可变基础设施 在云原生逐渐盛行的现在,不可变基础设施的理念已经逐渐深入人心。不可变基础设施最早是由Chad Fowler于2013年提出的,其核心思想为任何基础设施的实例一旦创建之后变成为只读状态,如需要修改和升级,则使用新的实例进行替换。这一理念的指导下,实现了运行实例的一致,因此在提升发布效率、弹性伸缩、升级回滚方面体现出了无与...

Kubernetes as Database: 使用kubesql查询kubernetes资源

Use kubesql to query the resources of kubernetes.

写在前面 kubectl虽然查询单个的kubernetes资源或者列表都已经比较方便,但是进行更为多个资源的联合查询(比如pod和node),以及查询结果的二次处理方面却是kubectl无法胜任的。所以一直以来,我都有想法将kubernetes作为数据库进行查询。在去年,我开发了第二个版本的kubesql。相关信息在https://xuxinkun.github.io/2019/03/11...

pod删除主要流程源码解析

Pod delete main process source code analysis.

本文以v1.12版本进行分析 当一个pod删除时,client端向apiserver发送请求,apiserver将pod的deletionTimestamp打上时间。kubelet watch到该事件,开始处理。 syncLoop kubelet对pod的处理主要都是在syncLoop中处理的。 func (kl *Kubelet) syncLoop(updates <...

如何进行kubernetes问题的排障

how to debug problems of kubernetes.

排障的前置条件 k8s的成熟度很高,伴随着整个项目的扩增,以及新功能和新流程的不断引入,也伴随这产生了一些问题。虽然自动化测试可以排除掉大部分,但是一些复杂流程以及极端情况却很难做到bug的完全覆盖。因此在实际的工作过程中,需要对运行的集群进行故障定位和解决。 当然,进行排障的前提是对于k8s的流程和概念进行掌握,对于源码有一定的掌握能力,才可以更好的进行。待排障的环境和版本和源代码的版...

详解k8s中的liveness和readiness的原理和区别

talk about liveness and readiness.

liveness与readiness的探针工作方式源码解析 liveness和readiness作为k8s的探针,可以对应用进行健康探测。 二者支持的探测方式相同。主要的探测方式支持http探测,执行命令探测,以及tcp探测。 探测均是由kubelet执行。 执行命令探测 func (pb *prober) runProbe(p *v1.Probe, pod *v1.Pod, stat...

使用kubeadm进行单master(single master)和高可用(HA)kubernetes集群部署

deploy k8s with kubeadm.

kubeadm部署k8s 使用kubeadm进行k8s的部署主要分为以下几个步骤: 环境预装: 主要安装docker、kubeadm等相关工具。 集群部署: 集群部署分为single master(单master,只有一个master节点)和高可用HA集群部署两种模式。主要部署k8s的相关组件。本文将分别做介绍。 网络部署: 部署网络环境。本文以flannel为例进行部署。...

ingress在物理机上的nodePort和hostNetwork两种部署方式解析及比较

deploy ingress to baremetal.

ingress controller在物理机上的两种部署方式 ingress controller(ingress-nginx)负责k8s中的7层负载均衡。其在物理机中有多种部署方式。本文中主要选择了nodePort和hostNetwork两种部署方式进行介绍。主要原因是这两种部署方式不需要借助于其他组件,直接使用的是k8s的基础组件和使用方式,较为容易理解和排障。 注:本文中的k...

docker/kubernetes国内源/镜像源解决方式

docker/kubernetes source in cn.

最近在使用kubeadm时,被各种连接不上搞到崩溃。费了很多力气,基本都解决了。这里统一整理了国内的一些镜像源,apt源,kubeadm源等,以便查阅。 国内镜像源 Azure China提供了目前用过的质量最好的镜像源,涵盖了docker.io,gcr.io,quay.io。无论是速度还是覆盖范围,体验都极佳。而且都支持匿名拉取,也就是不需要登录。这点特别友好。azk8s.cn支持的镜...

flannel vxlan工作基本原理及常见排障思路

Flannel vxlan troubleshooting process.

写在前面 最近用kubeadm鼓捣了几个cluster集群测试用,网络用的flannel。因为这些机器都不是纯净的环境(以前部署过其他的k8s或者有一些特别的设置),所以部署起来遇到了很多问题。看了下相关的文章,梳理了flannel的vxlan的工作原理,成功对这几个环境进行了排障。本文主要是相关流程的笔记记录。 容器间通信 本文以两个节点上的两个容器间通信为例,介绍网络报文的流转过程...