零基础学习kubernetes(四): 利用闲置主机搭建并暴露本地k8s集群
前三章的学习,笔者经历了从使用ECS的k8s集群到本地的Minikube,说白了,还是穷,买不起高配置的ECS,而当资源(cpu/memory)不足时,要想充分发挥k8s的强大功能可以说是难上加难。
恰巧笔者有一台尘封已久的笔记本,很早之前折腾过一阵archlinux系统,如果我们能用它在内网搭建一个k8s集群,然后通过某种方式暴露在公网上供使用,是不是就很nice了呢?
如果你也有类似的烦恼,想利用闲置的主机搭建一个经济实惠的k8s集群,那么希望本篇文章能带给你一些帮助。下面我们就一步步完成这个伟(diao)大(si)的理想吧!
内网穿透,”免费“的ECS对于没有公网IP的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题。通常解决方案就是用内网穿透工具将内网的服务穿透到公网中,便于远程管理和在外部访问。
FRP (Fast Reverse Proxy),一个使用Go语言开发的高性能反向代理工具,可以通过简单的配置实现内网穿透。FRP支持TCP、UDP、HTTP、HTTPS等协议类型,并且支持Web服务根据域名进行路由转发。
frpsfrp的服务端,即我们的ECS服务器 ...
Protobuf——更高、更快、更强
Protobuf(全称Protocol Buffers)用于序列化数据结构,描述数据组织结构,支持大部分目前流行的语言。相较于XML,Protobuf使用更简单,清晰,序列化后的数据占用空间小3~10倍,解析速度快20~100倍。
PB3语法定义message基本格式syntax = "proto3";package = test_message;message MessageName { [FieldRule] FieldType FieldName = FieldNumber; //Comment}
第一行指定使用的是proto3语法。不指定则默认使用proto2的语法。
package用于防止使用不同的proto文件时,消息或者服务冲突。
FieldType可以使用标准类型,也可以使用自定义的字段类型,包括枚举和其他消息类型
Scalar Value Types
.proto Type
Notes
Python Type
C++Type
double
float
double
float
float
flo ...
Pipenv——它是Python包管理的大救星
Pipenv是Python的一个打包工具,它使用pip、virtualenv和旧式的requirements.txt解决了与典型工作流相关的一些常见问题。
除了解决一些常见问题之外,它还将开发过程合并并简化为单个命令行工具。
本指南将介绍Pipenv解决了哪些问题,以及如何管理与Pipenv的Python依赖关系。此外,它还将介绍如何从以前的requirements.txt转为使用Pipenv管理包。
Pipenv为何而生要理解Pipenv的好处,了解Python中打包和依赖管理的当前方法是很重要的。
让我们从处理第三方包的典型情况开始。然后,我们将构建部署完整Python应用程序的方法。
使用requirements.txt进行依赖管理假设你正在处理一个使用flask等第三方包的Python项目。您需要指定该需求,以便其他开发人员和自动化系统能够运行您的应用程序。
你决定在requirements.txt中包含flask的依赖
flask
很好,一切都在本地运行良好,在对应用程序进行了一段时间的黑客攻击之后,您决定将其转移到生产环境中。可怕的事情开始了。。。
上面的requir ...
深入理解MySQL——MDL
在MySQL使用过程中,不免有对表进行更改的DDL操作(alter/drop table)。有的时候我们会发现,一条简单的对表增加字段的操作,会执行很长时间,甚至导致整个数据库挂掉。这是为什么呢?本篇文章就来揭开其中奥秘。
引子试想有如下2个session
session1
session2
BEGIN
SELECT * FROM XXX
DROP TABLE XXX
SELECT * FROM XXX
如果DROP TABLE成功执行了,那会话1的第二个select会出错,这明显不是我们想要的结果。所以为了避免此类问题,MySQL5.5版本加入了MDL(Metadata Lock),当对一个表做CRUD操作的时候,加MDL读锁;当要对表做结构变更操作的时候,加MDL写锁。
读锁之间不互斥,因此可以有多个线程同时对一张表增删改查。
读写锁之间、写锁之间互斥,用来保证变更结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。
采坑实战虽然MDL锁是MySQL Server层默认加的,但是却不能忽略这个 ...
零基础学习kubernetes(三): 资源对象
在学习使用k8s的过程中,我们不免看到许许多多的名词,包括deploy、svc、rs等等,它们通常代表着k8s中不同的资源对象。本文会介绍这些资源,同时会给出部署的yml文件,供实战部署,加深对这些名词的理解。
AutoscalingHorizontal Pod Autoscaling (HPA) 可以根据 CPU 使用率或应用自定义 metrics 自动扩展 Pod 数量(支持 replication controller、deployment 和 replica set )。
控制管理器每隔 30s(可以通过 –horizontal-pod-autoscaler-sync-period 修改)查询 metrics 的资源使用情况
支持三种 metrics 类型
预定义 metrics(比如 Pod 的 CPU)以利用率的方式计算
自定义的 Pod metrics,以原始值(raw value)的方式计算
自定义的 object metrics
支持两种 metrics 查询方式:Heapster 和自定义的 REST API
支持多 metrics
ConfigMapC ...
零基础学习kubernetes(二): 在ECS上部署集群
kubernetes官网提供了不同场景下的集群搭建解决方案,包括本地/托管方案等等。如果你的集群是基于单节点搭建,可以选择Minikube/Kubeadm-dind等.
尽管这些现成的解决方案可以帮助你很快的在本地搭建一个k8s集群。但是为了更深入了解k8s集群的组成、原理,本篇文章笔者会从头开始创建自定义集群。阅读完本篇文章,你将会学到:
集群master节点和node节点包含的主要组件
各个组件的用途
如何引导启动集群
准备笔者的环境
1 ECS(1vCPU+2GRAM, OS:CentOS 7)
基础环境配置yum源默认的yum源在安装软件时往往会非常慢甚至超时,所以这里我们使用阿里云的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum makecache
安装docker因为CentOS7自带的docker版本可能过低,所以需要重新安装docker
卸载原有docker
sudo yum remove docker docker ...
零基础学习kubernetes(一): 基础知识
Kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。
本文介绍了如何使用minikube,在本机搭建一个k8s集群,并在其上部署应用程序,理解k8s基本的概念和操作。
使用minikube创建一个集群kubernetes集群Kubernetes协调一个高度可用的计算机集群,这些计算机集群作为一个单元连接到一起工作。
Kubernetes集群由两种类型的资源组成:
Master协调集群
Nodes是运行应用程序的wokers
主服务器负责管理集群。主协调集群中的所有活动,例如调度应用程序、维护应用程序所需的状态、扩展应用程序和推出新更新。
Node是作为Kubernetes集群中的工作机器的VM或物理计算机。每个节点都有一个Kubelet,它是管理节点和与Kubernetes主机通信的代理。节点还应该有处理容器操作的工具,比如Docker或rkt。处理生产流量的Kubernetes集群至少应该有三个节点。
当在Kubernetes上部署应用程序时,主程序调度容器在集群的节点上运行。节点使用Kuber ...
Hexo+TravisCI: 专心写博客吧
相信大家都有自己的博客,也都体会过那几天折腾博客的成就感。利用Github Pages + Hexo可以很容易的搭建一个属于自己的个性化博客主页。同时,你只需要关心自己文章的内容,以及基本的markdown排版即可,Hexo可以解析md生成对应的html,进而展示在你的博客主页。
发布博客的步骤不算繁琐,但是重复性较高,而且需要安装相关环境(npm、hexo-cli…),当我们需要在不同的电脑上发布博客的时候,是不是会觉得很麻烦呢?很多小伙伴只想关心如何写文章的内容,希望写完之后,只需要git push一下就可以在主页上看到新发布的文章。
本文介绍了如何通过Travis CI简化发布流程,让大家可以专心的写自己的博客!
Let’s go~
偷懒是创造力的源泉
事前准备Github
上传博客源码到github仓库。笔者这里是直接把博客源码推到Github Pages项目的blog分支了,这样做的好处是可以集中管理一个项目。同时把*.github.io项目的默认分支设置成blog,这样可以在项目主页上显示README。
生成access token。为了TravisCI可以读写我们的项 ...
源计划——重启博客
博客的新家折腾了一个周末,终于把原来博客的老窝翻新了一遍。心里暗自安慰自己,以前好久不写博文就是因为原来的博客样式太丑了,恩,一定是因为这个。
博客翻新的过程就不在这里赘述了,总的来说就是google几篇hexo教程,选一个自己喜欢的themes。然后找几个做的比较好的博客,F12看一下源码,照着改一改就好了。
既然有了新家,就应该改头换面,重新。。。奋发图强!所以,我决定即日起,把平常学习、实践的一些总结,记录在博客上,一方面由于我的记性比较差,记录下来可以供自己以后温故知新,另一方面可以给有相同需求/疑问的coder们一点点参考。
希望能通过博客,结实更多的技术大拿。也希望自己可以通过博客给自己的技术多充充电!
设计模式Python实现
最近找到了一篇容易理解的关于设计模式的文章,比较深刻地讲解了设计模式 史上最全设计模式导学目录(完整版)。 为了加深自己对设计模式的理解,同时熟悉Python面向对象编程的技巧,遂写下此篇文章,记录每种设计模式对应的一个练习题,并附上Python代码实现。
简单工厂模式-Simple Factory Pattern问题背景XX软件公司欲基于Python语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等。XX软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库,而且可以较为方便地对图表库进行扩展,以便能够在将来增加一些新类型的图表。
改进前class Chart(object): def __init__(self, type): self._type = type if type.lower() == "histogram": print("初始化柱状图") elif type.lower() == " ...