- 博客(69)
- 收藏
- 关注
原创 使用k3s搭建集群
因为某些原因,手里有3台云服务器,由于想学习k8s,但是手里的服务器有两台是1c2g的服务器,无法搭建k8s集群,所以在此使用k3s搭建集群进行学习。安装K3s集群服务器配置hostnameIP配置chensy-master阿里云1c/2gchensy-node1腾讯云1c/2gchensy-node2西部数码8c/12g在此之前,每台主机应该安装了docker修改主机名称hostnamectl set-hostname chensy-mas
2021-08-15 17:19:31
1125
原创 使用inlets进行内网穿透
inlets® 利用反向代理和 Websocket 隧道,将内部、或是开发中的服务通过「出口节点」暴露到公网。出口节点可以是几块钱一个月的 VPS,也可以是任何带有公网 IPv4 的电脑。 如果无需公开服务到公网,可以只建立服务隧道,使 inlets 成为 VPN 的替代品。github地址https://github.com/inlets/inlets安装01 下载官网给出了几种安装方式:你可以使用 curl 下载安装脚本,或是用 brew 安装,或者直接在 Releases 页面直接下载二
2021-04-02 10:13:14
799
原创 [Redis] 01.Linux安装Redis
1. 获取Redis资源前往Redis官网: https://github.com/redis/redis/releases选择需要的版本此处我选择6.2.1版本进行安装wget https://github.com/redis/redis/archive/6.2.1.tar.gz2. 解压安装tar -xzvf 6.2.1.tar.gzcd redis-6.2.1/makecd srcmake install PREFIX=/usr/local/redis3. 移动配置文件到安装目
2021-03-12 10:23:49
203
原创 [mysql] 8.order by的工作流程
开发的时候使用order by来排序查询一个表的前面指定行数。假如有一个表:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=In
2021-01-18 17:28:50
184
原创 [mysql] 7.普通索引与唯一索引的选择
普通索引: 唯一任务是加快对数据的访问速度,因此,应该只为那些最经常出现在查询条件(WHERE column=)或者排序条件(ORDERBY column)中的数据列创建索引唯一性索引: 如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引,Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某个记录的这个字段里出现过了两者区别以以下场景为例假如有一个表: 主键列为 ID ,表中有字段 k,并且在 k 上有索引
2021-01-18 15:52:50
181
原创 [mysql] 6.当前读与快照读在事务中的表现
本篇关键词关键词描述当前读读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录快照读读取的是记录数据的可见版本(可能是过期的数据),不用加锁在mysql行锁的作用下,一个事务更新一行数据,正好此时另一个事务也要更新该行,那么这个事务将会进行等待。而这个事务在等到直到获取行锁更新数据时,读取的数据又是什么呢?有一个表CREATE TABLE `t` (`id` int(11) NOT NULL, `k` int(11) DE
2021-01-18 15:49:53
963
原创 [mysql] 4.1 全局锁、表锁、行级锁
本篇关键词关键词描述两阶段锁协议行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放行锁针对数据表中行记录的锁死锁当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类1. 全局锁全局锁就是对整个数据库实例加锁, MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with
2021-01-13 16:29:14
247
1
原创 [mysql] 5.索引
MySQL 官方对索引(Index)的定义是存储引擎用于快速查找记录的一种数据结构。索引是物理数据页,数据库页大小(Page Size)决定了一个页可以存储多少个索引行,以及需要多少页来存储指定大小的索引。索引可以加快检索速度,但同时也降低索引列插入、删除、更新的速度,索引维护需要代价。Mysql中的索引类型普通索引唯一索引主键索引组合索引全文索引其具体含义可见: https://www.jianshu.com/p/7a0c215edb1d...
2021-01-09 16:43:08
114
原创 [mysql] 4.锁
1. Mysql锁的分类mysql一共有三种锁,页级锁、表级锁、行级锁。表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 会发生在:MyISAM、memory、InnoDB、BDB 等存储引擎中。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高。会发生在:InnoDB 存储引擎。页级锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。会发生在:BDB 存储引擎。2. InnoDB中的锁
2021-01-06 21:03:51
107
原创 [mysql] 3.事务
事务及其特性一个逻辑工作单元要成为事务,在关系型数据库管理系统中,必须满足 4 个特性,即所谓的 ACID:原子性、一致性、隔离性和持久性。一致性:事务开始之前和事务结束之后,数据库的完整性限制未被破坏。原子性:事务的所有操作,要么全部完成,要么全部不完成,不会结束在某个中间环节。持久性:事务完成之后,事务所做的修改进行持久化保存,不会丢失。隔离性:当多个事务并发访问数据库中的同一数据时,所现出来的相互关系。...
2021-01-04 21:39:01
124
1
原创 解决flask-sqlalchemy的mysql has gone away
在使用Flask-sqlalchemy进行部署运行一段时间后,程序出现mysql has gone away错误。一番查询,找到解决方法:链接: https://stackoverflow.com/questions/6471549/avoiding-mysql-server-has-gone-away-on-infrequently-used-python-flask-server出现原因Mysql的wait_timeout默认时间是8小时,即28800秒。flask-sqlalchemy使用s
2020-12-29 11:15:42
1901
原创 Pycharm结合Docker Remote API远程构建镜像并启动容器
结合Pycharm的Docker运行插件,实现在本地连接远程Docker,使用Dockerfile构建后在指定机器上运行,简化开发部署的操作。开启Docker的Remote API访问Docker默认没有开启remote api, 需要进行配置Docker常用端口端口作用2375未加密的docker socket,远程root无密码访问主机2376tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377群集模式套接字,适用于
2020-12-25 12:20:07
738
原创 [从零开始学Kubernetes] 12. 给后端程序加上自动伸缩
在文章《[从零开始学Kubernetes] 11.使用K8s部署一个后端程序》中使用了K8s部署了一个4个副本的后端程序,现在来给后端程序增加一个自动伸缩修改原yaml文件修改原yaml文件,限制单个deployment的cpu和内存均为256Mivi container_deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: container-deployment namespace: test labe
2020-12-23 10:41:54
202
原创 [从零开始学Kubernetes] 11.使用K8s部署一个后端程序
在学习了那么多k8s的知识之后,搭建一个后端系统进行复习需求: 搭建一个基于PV的单mysql的Pod和可访问的后端系统注:这里不搭建Mysql集群Mysql搭建1. Namespace创建使用命令kubectl create namespace test[root@kubernetes container]# kubectl create namespace testnamespace/test created2. 编写Mysql-PV/Mysql-PVC的Yaml文件使用命令vi
2020-12-21 20:05:11
460
原创 [从零开始学Kubernetes] 10.Kubernetes的DaemonSet
在使用Kubernetes的时候,有些场景,比如监控各个节点的状态,使用 Deployment 或者 StatefulSet 都无法满足我们的需求,因为这个时候我们可能会有以下这些需求。希望每个节点上都可以运行一个副本,且只运行一个副本。虽然通过调整 spec.replicas 的数值,可以使之等于节点数目,再配合一些调度策略(我们后面讲调度原理的时候会深入解释)可以实现这一点。但是如果节点数目发生了变化呢?希望在新节点上也快速拉起副本。比如集群扩容,这个时候会有一些新节点加入进来,如何立即感知
2020-12-20 13:36:45
181
原创 [从零开始学Kubernetes] 9.Kubernetes中的Service
Service是K8s中的服务发现机制,其匹配Pod的方式也是通过与 Deployment、StatefulSet 这些一致的标签选择器进行匹配。下面来看看一个Service的具体定义Service服务定义创建nginx_service.yamlapiVersion: v1kind: Servicemetadata: name: nginx-prod-svc-demo namespace: demo # service 是 namespace 级别的对象spec: select
2020-12-19 22:27:59
174
原创 [从零开始学Kubernetes] 8.Kubernetes存储类型以及持久化存储
在Kubernetes中,使用Volume提供容器的共享存储,但是与Docker设计不同的是,Volume的生命周期与Pod一致,即:Pod在Volume就在,Pod被删除,Volume根据其类型决定删不删数据。Volume Plugins插件分类主要用途卷插件数据是否会随Pod删除而删除临时存储主要用于存储一些临时文件,类似于在操作系统中创建的tempDirEmptyDir是本地存储用于将一些K8s中定义的配置通过Volume映射到容器中使用ConfigMap/
2020-12-17 14:39:19
289
原创 [从零开始学Kubernetes] 7.创建应用配置(ConfigMap、Secret)
在Kubernetes中,有ConfigMap和Secret两种对象来做配置管理。ConfigMap首先我们来讲一下 ConfigMap 这个对象,它主要用来保存一些非敏感数据,可以用作环境变量、命令行参数或者挂载到存储卷中。ConfigMap 通过键值对来存储信息,是个 namespace 级别的资源。在 kubectl 使用时,我们可以简写成 cm。例子创建study_cm_demo_mix.yamlapiVersion: v1kind: ConfigMapmetadata: na
2020-12-17 14:22:09
201
原创 [从零开始学Kubernetes] 6.创建有状态应用(StatefulSet)
创建有状态应用即将Pod设置固定的、确切的主机名。同时,对Pod进行扩容或缩容时按照一定的顺序进行,每个Pod的域名在变化中没有发生改变,仅仅是IP地址发生了变换。这一切都得靠StatefulSet选择器进行配置。Kubernetest Service简介部署有状态的应用的前置依赖对象: Service(服务)。在Kubernetes 中的 Service(服务) 提供了一个抽象层,它选择具备某些特征的 Pod(容器组)并为它们定义一个访问方式。Service(服务)使 Pod(容器组)之间的相互依赖解
2020-12-17 11:16:02
425
原创 [从零开始学Kubernetes] 5.Kubernetes的Deployment控制器
Deployment简介deployment 是用来管理无状态应用的,面向的集群的管理,而不是面向的是一个不可变的个体,举例:有一群鸭子,要吃掉一个,只需要再放一个新的鸭子就好了,不会影响什么,而有状态的应用,就同时养三条狗一样,而每个狗都是无法代替用新的事物代替的,因为有“感情”这个状态在里面。Deployment 为Pod 和 ReplicaSet 之上,提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。你只需要在 De
2020-12-17 10:03:53
125
转载 [从零开始学Kubernetes] 4.Kubectl操作命令
kubectl是用于运行Kubernetes集群命令的管理工具,所以记录一下Kubectl的操作命令命令表: http://docs.kubernetes.org.cn/683.html
2020-12-16 11:25:04
89
原创 [从零开始学Kubernetes] 3.Pod-Kubernetes最小调度单元
Pod是K8s中的最小调度单元。可以在一个Pod里部署多个容器。同个Pod中共享网络资源、存储资源以及命名空间等。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。从《从零开始学容器》中我们知道,一个容器类似于一个进程,那么容器就不能像使用Vm一样使用。所以,Pod对于容器的编排起着重要作用。Pod的特点网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址和网络
2020-12-16 11:14:26
796
转载 [从零开始学Kubernetes] 2. 安装Kubernetes单Master节点集群
网上安装K8s文档太多,一时分不清孰好孰坏。经测试,该文档可行链接: https://kuboard.cn/install/install-k8s.html
2020-12-15 10:50:13
134
原创 [从零开始学Kubernetes] 1.为什么还需要Kubernetes
在“《从零开始学容器》12.使用Docker Swarm编排容器”使用Docker Swarm编排了容器,并且实现了多副本容器的部署,那么为什么还要使用Kubernetes这种庞大的部署编排工具?Kubernetes的出现
2020-12-14 17:19:23
358
2
原创 [从零开始学容器] 12.使用Docker Swarm编排容器
上一章使用了Docker Compose编排单机多容器的Docker。但是当规模越来越大时,容器规模也会逐渐增大。所以,这章来使用Docker官方为了解决多容器管理的问题推出的Docker SwarmDocker Swarm与K8s的比较与选择参考链接Docker Swarm架构Swarm 的架构整体分为管理节点(Manager Nodes)和工作节点(Worker Nodes),整体架构如下图:管理节点: 管理节点负责接受用户的请求,用户的请求中包含用户定义的容器运行状态描述,然后 Swa
2020-12-14 13:56:54
396
1
原创 [从零开始学容器] 11.Docker Compose的简单使用
Docker Compose的前世今生Docker Compose 的前身是 Orchard 公司开发的 Fig,2014 年 Docker 收购了 Orchard 公司,然后将 Fig 重命名为 Docker Compose。现阶段 Docker Compose 是 Docker 官方的单机多容器管理系统,它本质是一个 Python 脚本,它通过解析用户编写的 yaml 文件,调用 Docker API 实现动态的创建和管理多个容器。Linux Docker Compose安装要在 Linux 平台
2020-12-11 16:39:06
150
原创 [从零开始学容器] 10.Docker的数据存储
容器通常存在时间较短,但是有一些数据是需要一直保存的,所以需要将容器内的数据进行保存。这里介绍容器的卷,相当于给容器插入磁盘。Docker 提供了卷(Volume)的功能,使用docker volume命令可以实现对卷的创建、查看和删除等操作Docker卷的操作命令说明volume create创建卷,如docker volume create myvolumevolume ls列出卷volume rm删除卷volume inspect查看卷详细信息
2020-12-11 14:51:38
151
原创 [从零开始学容器] 9.Docker的各个组件
Docker所有组件: docker、dockerd、docker-init 、docker-proxy、containerd、containerd-shim 、ctr、runc按工作职责划分Docker相关的组件:docker、dockerd、docker-init 和 docker-proxycontainerd 相关的组件:containerd、containerd-shim 和 ctr容器运行时相关的组件:runcDocker相关的组件名称作用dockerDoc
2020-12-11 14:09:46
670
原创 [从零开始学容器] 8.容器的资源隔离与资源限制
资源隔离Docker的资源隔离是基于Namespace的。在Linux中有8种Namespace,Docker仅使用了其中6种:Mount Namespace、PID Namespace、Net Namespace、IPC Namespace、UTS Namespace、User Namespace。各个Namespace的作用名称作用Mount Namespace隔离不同的进程或进程组看到的挂载点,即不同的进程看到不同的挂载目录, 在独立的 Mount Namespace 内创
2020-12-11 11:25:59
563
原创 [从零开始学容器] 7.容器的监控
生产环境中监控容器的运行状况十分重要,通过监控我们可以随时掌握容器的运行状态,做到线上隐患和问题早发现,早解决。虽然传统的物理机和虚拟机监控已经有了比较成熟的监控方案,但是容器的监控面临着更大的挑战,因为容器的行为和本质与传统的虚拟机是不一样的,总的来说,容器具有以下特性:容器是短期存活的,并且可以动态调度;容器的本质是进程,而不是一个完整操作系统;由于容器非常轻量,容器的创建和销毁也会比传统虚拟机更加频繁。Docker 容器的监控方案有很多,除了 Docker 自带的docker stats
2020-12-10 15:06:31
451
原创 [从零开始学容器] 6.编写Dockerfile
介绍了操作容器,下面介绍怎么以用本文件(Dockerfile)来构建容器。DockerfileDockerfile是什么Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile的好处易于版本化管理,Dockerfile 本身是一个文本文件,方便存放在代码仓库做版本管理,可以很方便地找到各个版本之间的变更历史;过程可追溯,Dockerfile 的每一行指令代表一个镜像层,根据 Dockerfile 的内容即可很明确地查看镜像的完整构建
2020-12-10 14:25:31
288
原创 [从零开始学容器] 5.容器基本操作
容器是什么容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。容器生命周期根据容器可能处于的状态,分为5种:created: 初建状态running: 运行状态stopped: 停止状态paused: 暂停状态deleted: 删除状态容器的操作创建并启动容器创建容器, 使用命令docker create,创建容器, 如docker create busybox启动容器,启动容器有两种方式:
2020-12-03 17:20:08
232
原创 [从零开始学容器] 4.Docker的基础核心概念与镜像配置
Docker核心概念:镜像、容器、仓库Docker核心概念镜像镜像是一个只读的文件和文件夹组合。它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。所以你想启动一个容器,那首先必须要有一个镜像。镜像是 Docker 容器启动的先决条件使用镜像的两种方式:基于基础镜像构建从镜像仓库上下载容器容器是 Docker 的另一个核心概念。通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。
2020-12-03 16:33:49
107
原创 [从零开始学容器] 3.Docker在Centos下的安装
Docker是什么Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker能做什么Docker 是一个用于开发,发布和运行应用程序的开放平台。通俗地讲,Docker 类似于集装箱。在一艘大船上,各种货物要想被整齐摆放并且相互不受到影响,我们就需要把各种货物进行集装箱标准化。有了集装箱,我们就不需要专门运输水果或者化学用品
2020-11-30 13:37:45
217
1
原创 [从零开始学容器] 2.给Go程序增加Swaager文档
在上面文章中我们实现了一个学生信息的简单系统,但是这个系统的rest接口没有文档,而且调试需要使用其它工具进行实现,这对于我们操作来说,有很大的不方便,那么是否有更好的方法来完成此事呢?那就是swagger什么是swaggerSwagger是一个简单但功能强大的API表达工具。它具有地球上最大的API工具生态系统,数以千计的开发人员,使用几乎所有的现代编程语言,都在支持和使用Swagger。使用Swagger生成API,我们可以得到交互式文档,自动生成代码的SDK以及API的发现特性等。安装go-sw
2020-11-27 16:30:45
178
原创 [从零开始学容器] 1.实现一个Go程序
在本次的系列文章中主要以记录整个部署流程为主,所以选择以简单的业务逻辑进行实现,以免被复杂的业务逻辑干扰主要目的。业务场景在一个学生管理系统中,学生信息以学号、姓名、成绩作为储存,可以新增、通过学号查询技术选型名称地址备注GINhttps://github.com/gin-gonic/ginWeb框架Gormhttps://github.com/jinzhu/gormORM框架Swaghttps://github.com/swaggo/gin-swagge
2020-11-27 16:28:36
269
转载 [mysql]2.Mysql的内存和物理结构
参考链接https://cloud.tencent.com/developer/article/1496453
2020-11-22 21:22:43
129
原创 [mysql]1.Mysql存储引擎及其特性
什么是存储引擎数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。Mysql5.6支持的存储引擎MySQL 支持多种类型的数据库引擎,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供各自不同的适应性和灵活性。MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储
2020-11-22 21:12:52
314
1
原创 [从RPC到Go-Micro 捌]Go-Micro解耦利器--事件驱动机制
之前的文章中我们已经学习了使用go-micro创建微服务,并实现了服务的调用。我们具体的实现是实例化了client对象,并调用了对应服务的相关方法。这种方式可以实现系统功能,但有比较大的缺点。我们通过举例来说明:在某个系统中存在用户服务(user service)、产品服务(product service)和消息服务(message service)。如果用户服务中要调用消息服务中的功能方法,则具体的实现方式可用下图所示方法表示:按照正常的实现是在user service模块的程序中实例化messag
2020-11-10 23:50:05
600
1
原创 [从RPC到Go-Micro 柒]Go-Micro的简单使用
在前面使用gRPC一步一步搭建使用流程,但是以上这些具体的方案都是为了解决微服务实践过程中具体的某个问题而提出的,实现微服务架构的项目开发。在具体的项目开发过程中,开发者聚焦的是业务逻辑的开发和功能的实现,大量的环境配置,调试搭建等基础性工作会耗费相当一部分的精力,因此有必要将微服务架构中所涉及到的,相关的解决方案做集中管理和维护。这就是我们要学习的Micro。Go-Micro介绍Micro是一个简化分布式开发的微服务生态系统,该系统为开发分布式应用程序提供了高效,便捷的模块构建。主要目的是简化分布式
2020-11-09 20:13:48
1407
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人