Kubernetes 实战 | Kubernetes 中应用服务暴露的原理
本篇博文主要研究的是 iptables 下的 K8s 服务暴露原理,下面的每一种暴露方式是层层递进的,位于下面的暴露方式依赖上面的方式。只要是集群节点都可以使用任意一种方式来访问服务(只要存在) iptablesNAT 表入口: 1234567891011-A PREROUTING -m comment --comment "kubernetes service portals" -j KUBE-SERVICES-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER-A OUTPUT -m comment --comm...
Kubernetes 实战 | 自建 Kubernetes Load Balancer
写在前面对于负载均衡,我们有很多种办法。 负载均衡实际上包含了两个方面:健康探测以及流量分担。如果我们不能健康探测而将流量错误地分到宕机上,会导致流量黑洞。 首先最豪华的解决方案就是硬件负载均衡器,但是一般我们买不起。 其次是路由器 NAT Pool 地址池转换,不过这种不靠谱,因为这种就是简单地将流量分发到服务器上,万一服务器掉线了需要人工去改地址池,也就是缺少健康探测的功能。 我们也可以通过 ipvs 找一台服务器来进行负载均衡,这也是 K8s 集群内部的负载均衡办法,但是这样还是给转发的那台机器带来不必要的负担。 最后一种办法是在路由器上配置等价路由,由路由器进行负载均衡,这样其实...
Kubernetes 实战 | kubeadm 部署原理简介
通常来说,运行 Kubernetes 集群,需要 kubelet、kube-apiserver、etcd、kube-scheduler 以及 kube-controller-manager 等组件。对于手工部署集群而言,我们需要生成证书,生成配置文件等,然后在不同机器上安装二进制文件,并设置 systemd 服务。 为了方便部署,K8s 官方开发了 kubeadm 工具来辅助我们的安装过程,运行原理如下: kubeadm 首先在 Master 节点上生成 API PKI 和 etcd PKI 所需的证书,然后配置必要的 Static Pod,Master 节点启动后,会将必要的配置信息...
我在中大修 Matrix
啥是 MatrixMatrix 是中山大学数据科学与计算机学院维护的一套用于编程教学的课程系统,具备布置作业、举办考试、线上评测等齐全的功能。 手工部署时代在最原始的时代,我们写好一个 Web 应用之后,将代码拷贝到服务器上,然后将服务进程跑起来,访问一下端口是不是正常工作,就算部署好了。然而,每次发布新版本,我们都要重新上传代码,重新运行进程,还要手动装环境,那么,有没有办法摆脱这种原始的手工方式呢?在经历了各种失败和挫折之后,我们终于搭建起了自己的私有云服务,并将业务全部迁移到云上,实现了云上 Matrix。 应用集装箱:Docker如果你上过操作系统、数据库、区块链等等等等需要实...
使用 VSCode + qemu 搭建 Linux 内核调试环境
编译调试版 Linux 内核首先下载源代码: 1wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.3.7.tar.gz 具体下载哪个版本可以自己选择。 然后解压缩源代码,这里假设解压到了 ~/linux-5.3.7。 然后安装编译依赖: Ubuntu1sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev CentOS12sudo yum group install "Development To...
Spam filtering with Naïve Bayes
The ProblemSuppose we are receving lots of E-mails every day and a number of them are spam emails, we want to classify whether the E-mail is a spam or not. To help solve the problem, we have already prepared some E-mails with labels telling us whether one is spam or not. The AlgorithmFirstly, we ...
游戏推荐 | 70 亿人类
两年前我在博客上推荐了 《人力资源机器》 这款游戏,时隔一年半,原班人马在 2018 年再度发布力作《70 亿人类》(7 Billion Humans)。虽然名字看上去大不一样,但画风还是核心玩法都还是一样的味道,只不过这次编程面临着更大的挑战:你不再是为一个人编程,而是为一群人编程! 游戏介绍 在游戏中,玩家只有一个人,和游戏的交互方式就是在右边的程序框里用一些极其简单的指令编写程序,比如从地上捡起一个数据块、向一个方向移动一步等等。而游戏的目标则每关都不同,比如把所有的格子都放满数据块、或者把小于 50 的数据块都销毁掉。如果所有程序都执行完毕,游戏会检查数据块的摆放是否符合关卡要...
使用 C 语言编写 ANN 实现 XOR 异或函数
介绍用纯 C 语言实现一个简单的 BP 网络,并使用 XOR 数据测试。 完整代码可参考:https://github.com/howardlau1999/learning-machine-learning/blob/master/mlp_work.c 辅助函数123double random_(double low, double high) { return (((high - low) * (double)rand() / RAND_MAX) + low); }double sigmoid(double x) { return 1 / (1 + exp...
Kubernetes 实战 | 配置日志系统
尽管 Kubernetes Dashboard 允许我们直接进入 Pod 容器中查看日志,但是在实际的系统中,Pod 容器可能经历创建、销毁等过程,一个服务也可能由多个 Pod 负载均衡提供。因此,我们最好配置一套完整的日志收集、分析、搜索、查看系统,方便我们对系统进行监控。 而常用的集群日志系统就是 EFK,即 Elastic Search、Filebeat、Kibana。 EFK 简介Elastic Search 是一款分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例;Filebeat 则是一种 Beats(其他的还有 Metric Beats 等),用...
Kubernetes 实战 | 图解 Kubernetes 资源
Kubernetes 是容器编排工具,负责在多台机器组成的集群上调度容器。用户只需要使用Kubernetes 资源来声明希望集群达到的状态,Kubernetes 就会调度集群资源,自动满足所声明的状态。 使用 Kubernetes,用户不用再操心容器具体的部署过程,而是使用声明式的方法来进行应用部署,大大简化了运维工作,使得程序员可以更专注于业务的的开发。 可以看出,使用 Kubernetes,我们更关心的是集群中的各种资源的管理,下面就是 Kubernetes 中常见的资源。 更值得注意的是,Kubernetes 是通过**控制器(Controller)**来调谐资源的,一个控制器只...