摘要: Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用。 针对kubernetes集群,高可用性还包含以下两个层面的考虑: etcd存储的高可用 master节点的高可用 在开始之前,先贴一下架构 阅读全文
posted @ 2017-11-25 22:44 KeithTt 阅读(13923) 评论(0) 推荐(2) 编辑
摘要: 同步公网 yum 源,上游 yum 源必须要支持 rsync 协议,否则不能使用 rsync 进行同步。 CentOS源:rsync://rsync.mirrors.ustc.edu.cn/centos/ EPEL源:rsync://rsync.mirrors.ustc.edu.cn/epel/ 同 阅读全文
posted @ 2017-09-24 17:50 KeithTt 阅读(7106) 评论(0) 推荐(0) 编辑
摘要: nginx默认的日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" " 阅读全文
posted @ 2017-05-17 12:49 KeithTt 阅读(9155) 评论(0) 推荐(2) 编辑
摘要: 将序列转换为计数字典{元素: 频度},然后根据频度排序。 1、使用 dict.fromkeys() 构造计数字典 from random import randint # 创建一个随机列表 L = [randint(0, 20) for _ in range(30)] print(L) # 创建一个 阅读全文
posted @ 2021-08-23 01:35 KeithTt 阅读(87) 评论(0) 推荐(0) 编辑
摘要: from kubernetes import client, config, watch from elasticsearch import Elasticsearch import arrow import sys import requests import json dingding_webh 阅读全文
posted @ 2021-04-28 16:55 KeithTt 阅读(304) 评论(0) 推荐(0) 编辑
摘要: PM2 is a daemon process manager that will help you manage and keep your application online. 1、安装 node 环境 cd /usr/local/ wget https://nodejs.org/dist/v 阅读全文
posted @ 2020-09-21 17:15 KeithTt 阅读(190) 评论(0) 推荐(0) 编辑
摘要: CoreDNS 的架构 解析流程 这里用到的是 CoreDNS 的 hosts plugin 插件。该插件仅支持 A, AAAA, 和 PTR 记录。 kubectl edit configmap coredns -n kube-system apiVersion: v1 kind: ConfigM 阅读全文
posted @ 2020-06-28 18:46 KeithTt 阅读(10996) 评论(0) 推荐(0) 编辑
摘要: 准备工作: 1、Kubernetes版本: 1.15.x ≤ K8s version ≤ 1.17.x 2、Helm版本: 2.10.0 ≤ Helm Version < 3.0.0(不支持 helm 2.16.0 #6894) 3、集群已有默认的StorageClass 如何安装 helm2,上一 阅读全文
posted @ 2020-06-27 02:03 KeithTt 阅读(1527) 评论(0) 推荐(0) 编辑
摘要: 1、安装 dnsmasq yum install -y dnsmasq 2、修改配置 $ grep -v '^#' /etc/dnsmasq.conf |grep -v '^$' resolv-file=/etc/resolv.dnsmasq.conf strict-order server=114 阅读全文
posted @ 2020-06-24 21:35 KeithTt 阅读(1098) 评论(0) 推荐(0) 编辑
摘要: helm2 的架构跟 helm3 的架构不同。 在 helm2 架构中,helm 是客户端,tiller 是服务端部署在 k8s 集群内部。 1、使用二进制包安装 helm 客户端 wget https://get.helm.sh/helm-v2.16.9-linux-amd64.tar.gz ta 阅读全文
posted @ 2020-06-21 01:12 KeithTt 阅读(1481) 评论(0) 推荐(0) 编辑
摘要: 场景:前端业务使用了微服务架构,需要在一个主项目中编译打包所有子项目。 1、创建一个流水线任务 2、填写项目描述 3、编写 pipeline 脚本 pipeline { agent any stages { stage("build console all") { steps { script { 阅读全文
posted @ 2020-06-20 02:21 KeithTt 阅读(6717) 评论(1) 推荐(0) 编辑
摘要: 整个 CICD 流程大致如下: 这里 jenkins/gitlab/harbor 都是现成的哈,主要记录一下集成过程和其中遇到的问题。 1、创建一个流水线任务 2、填写项目描述 3、编写 pipeline 脚本和其中调用的 shell 脚本 pipeline { agent any environm 阅读全文
posted @ 2020-06-16 23:30 KeithTt 阅读(1603) 评论(0) 推荐(0) 编辑
摘要: 这里使用的是外部 mysql 数据库,所以没有使用官方提供的 mysql 和存储方案。 1、clone 项目 git clone https://github.com/nacos-group/nacos-k8s.git 2、修改 yaml 文件,这里要注意 NACOS_SERVERS 的格式 vim 阅读全文
posted @ 2020-06-12 15:54 KeithTt 阅读(3927) 评论(2) 推荐(1) 编辑
摘要: 并发: 一段时间内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在一个cpu上运行 并行: 任意时刻有多个程序同时运行在多个cpu上 同步、异步,与阻塞、非阻塞不相关 函数或方法被调用的时候,调用者是否得到最终结果 同步: 直接得到最终结果的,就是同步调用。同步就是一直要执行到返回最终结 阅读全文
posted @ 2020-05-28 15:34 KeithTt 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 1、设置 Node 环境 2、创建一个自由风格的项目 3、添加项目描述 4、添加 git 地址 5、设置构建环境 6、通过 shell 打包代码 7、发布到服务器上 脚本如下: 参考: https://blog.csdn.net/liub37/article/details/83272398 htt 阅读全文
posted @ 2020-05-09 11:07 KeithTt 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 集群架构: 三个节点 172.27.132.22 172.27.132.24 172.27.132.37 nacos version: 1.2.1 OS version: centos7.5 vip:172.27.133.200 1、下载安装 jdk $ yum install -y jdk-8u2 阅读全文
posted @ 2020-04-29 00:30 KeithTt 阅读(2323) 评论(0) 推荐(0) 编辑
摘要: HTTP协议是无状态协议,为了解决这个问题产生了cookie和session技术。 传统的session cookie机制 无session方案 命令行操作 编码 TOKEN由三部分拼接而成 HEADER: ALGORITHM & TOKEN TYPE PAYLOAD: DATA VERIFY SI 阅读全文
posted @ 2020-04-28 17:42 KeithTt 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 最近遇到一个问题,keepalived 在 OpenStack 环境下一直脑裂无法选举。在不支持组播的场景下,可以使用单播模式。 主节点: 备节点: 参考: https://www.jianshu.com/p/7c709c3be4a9 https://blog.csdn.net/weixin_343 阅读全文
posted @ 2020-04-23 09:50 KeithTt 阅读(3507) 评论(0) 推荐(0) 编辑
摘要: 主节点配置: 从节点配置: 参考: https://www.keepalived.org/pdf/UserGuide.pdf https://github.com/acassen/keepalived 阅读全文
posted @ 2020-04-22 11:51 KeithTt 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 翻转一棵二叉树。 输入: 输出: 代码如下: 参考: https://leetcode cn.com/problems/invert binary tree/ 阅读全文
posted @ 2020-04-22 11:28 KeithTt 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1、安装 Node 环境 a、官网下载 tar 包 b、解压设置环境变量 PATH=/usr/local/node/bin:$PATH 2、安装 sinopia npm install -g sinopia 3、初次手动启动服务生成配置文件 $ sinopia Sinopia doesn't nee 阅读全文
posted @ 2020-04-13 19:56 KeithTt 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 现象如下: 设置如下: 阅读全文
posted @ 2020-04-13 19:45 KeithTt 阅读(2306) 评论(0) 推荐(0) 编辑
摘要: 这个设置用于自动将404响应跳转到首页入口文件 index.html。 webpack 配置如下: 部署到服务器上时 nginx 的配置如下: 参考: https://webpack.js.org/configuration/dev server/ devserverhistoryapifallba 阅读全文
posted @ 2020-04-13 19:27 KeithTt 阅读(3074) 评论(0) 推荐(0) 编辑
摘要: 这里主要记录 task 创建过程,jdk和插件安装等准备工作就不说了。 1、创建一个 maven 任务 2、添加项目描述 3、添加 git 仓库地址和分支 4、添加 pom 文件路径 和 maven 构建参数 5、发布代码 脚本太长截不全,具体如下: 阅读全文
posted @ 2020-03-27 22:21 KeithTt 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 1、安装 rsync 和 inotify yum install -y rsync inotify-tools 2、编写监控脚本 #!/usr/bin/env bash app_name=cms src=/dev/${app_name}/ # 需要同步的源路径 des=/dev/${app_name 阅读全文
posted @ 2020-03-27 21:23 KeithTt 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 架构图 节点规划 120.52.146.213 Control Machine 120.52.146.214 PD1_TiDB1 120.52.146.215 PD2_TiDB2 120.52.146.216 PD3 120.52.146.217 TiKV1 120.52.146.218 TiKV2 阅读全文
posted @ 2019-10-22 10:32 KeithTt 阅读(868) 评论(0) 推荐(0) 编辑
摘要: 1、同步资源 # rsync -vrt rsync://repo.zabbix.com/mirror/zabbix/3.4/rhel/7/x86_64/ /home/mirrors/zabbix/3.4/rhel/7/x86_64/ 2、配置apache发布镜像目录,当然也可以用nginx或者其他w 阅读全文
posted @ 2019-03-17 16:50 KeithTt 阅读(1486) 评论(0) 推荐(0) 编辑
摘要: redis不是一个纯文本kv存储,实际上,它是一个数据结构服务,支持不同类型的value。 包含以下类型: 关于key: key是二进制安全的,可以使用任意二进制序列作为key,包括纯字符串甚至是一个JPEG文件。 最大允许大小为512MB。 Strings 字符串类型是最简单的数据类型,是Memc 阅读全文
posted @ 2019-01-12 13:39 KeithTt 阅读(457) 评论(0) 推荐(0) 编辑
摘要: 这里仅针对docker本身,不涉及任何编排工具compose或者k8s等。 按照惯例,官文撸起来。 重要的部分是一些选项,用来限制资源大小。 Memory 多数选项值都是正整数,单位是b, k, m, g,分别表示 bytes, kilobytes, megabytes, 和 gigabytes。 阅读全文
posted @ 2019-01-06 23:35 KeithTt 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 记性不好,回顾一下。按照惯例,直接看官文。 docker的网络子系统是插件化的,需要使用驱动。默认支持以下几种驱动: bridge:桥接,默认的网络驱动,如果不指定驱动,将默认使用桥接。通常用在同一个docker主机中的多个容器间通信。 host:去掉容器和宿主机之间的网络隔离,直接使用宿主机的网络 阅读全文
posted @ 2019-01-06 19:26 KeithTt 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 首先,staticmethod和classmethod装饰器是通过非数据描述符实现的。用法简单,这里就不细说了。 这里主要分析一下staticmethod和classmethod是如何通过描述符实现的。 如果看过了上篇property,相比之下,这个就简单了不少。 这里用到了偏函数、装饰器以及面向对 阅读全文
posted @ 2019-01-05 12:41 KeithTt 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 首先,property装饰器是通过数据描述符实现的。用法很简单,大家应该都知道,这里就不细说了。 这里主要分析一下property是如何通过描述符实现的。 访问 赋值 这里涉及到装饰器,需要对装饰器和面向对象有足够的了解才能弄明白当中的变量传递,希望你不会被挡住。 参考: https://docs. 阅读全文
posted @ 2019-01-05 07:04 KeithTt 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 初学py的时候大家都说描述符是高级内容难度较大,仔细撸过文档之后感觉还好,不过用起来确实不那么直观。 按照惯例,先来看一下官文API文档: 总的来说,描述符是一个带有绑定行为的对象属性,访问这个对象属性的时候会被 描述符协议 中的方法覆盖,可以理解为一种hook机制。 描述符协议包括三个魔术方法: 阅读全文
posted @ 2019-01-05 05:44 KeithTt 阅读(803) 评论(0) 推荐(0) 编辑
摘要: 作为一个py3土著,并不是很关心这个问题,但是总有人隔三差五问这个问题,还是捋了一下。 这里列出几个主要区别: 1、最常见的人尽皆知的print()函数 在py2中,print是一个语句,不带括号,也可以带括号。 在py3中,print是一个函数,必须带括号调用。 2、除法 3、unicode 在p 阅读全文
posted @ 2019-01-04 07:33 KeithTt 阅读(921) 评论(0) 推荐(0) 编辑
摘要: 除了常见的os.system和os.popen方法,官方强烈推荐使用subprocess来调用系统命令。 这个库用起来其实很简单,按照惯例先贴一下官文关键点: The subprocess module allows you to spawn new processes, connect to th 阅读全文
posted @ 2018-12-27 15:07 KeithTt 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 一、打包Django应用 1.创建setup.py文件 2.保存项目中使用的库 3.打包源码 二、在部署server上安装依赖包 三、修改Django配置文件 四、测试运行 第一种部署方式,直接以http方式启动 1.安装uwsgi 2.运行app 3.测试访问 http://ip:8001/pos 阅读全文
posted @ 2018-12-27 03:19 KeithTt 阅读(1648) 评论(0) 推荐(0) 编辑
摘要: Selenium把元素定位接口封装得更简单易用了,支持Xpath、CSS选择器、以及标签名、标签属性和标签文本查找。 参考: https://selenium python.readthedocs.io/locating elements.html https://selenium python.r 阅读全文
posted @ 2018-12-26 07:49 KeithTt 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 1、数据是使用scrapy redis爬取的,存放在redis里面,爬取的是最近大热电影《海王》 2、使用了jieba中文分词解析库 3、使用了停用词stopwords,过滤掉一些无意义的词 4、使用matplotlib+wordcloud绘图展示 绘图结果: 参考: https://github. 阅读全文
posted @ 2018-12-26 06:41 KeithTt 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 使用Xpath和BeautifulSoup来解析网页可以说真的很简便。 解析结果: 阅读全文
posted @ 2018-12-26 06:18 KeithTt 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 三路快排 也是用来解决序列中存在大量重复元素的问题,比双路快排更高效 将序列分为三个部分,小于pivot、等于pivot、大于pivot 等于pivot的部分不递归,这样在存在大量重复元素时,将大大缩小递归的数据规模 阅读全文
posted @ 2018-12-26 02:41 KeithTt 阅读(814) 评论(0) 推荐(0) 编辑
摘要: 序列元素重复,是序列已经排好序的一种特殊情况,如果一个序列中的元素全部相同,也将出现最差情况。 如果序列中存在大量重复元素,在普通快排中,相等的元素会被全部放到分区点的一边,这样会大大增加快排的时间复杂度,双路快排就是用来解决这个问题的。 能够将序列均衡分开的分区点才是好的分区点。均匀分开意味着保持 阅读全文
posted @ 2018-12-26 01:07 KeithTt 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 当序列已经排好序时,将出现最差情况,时间复杂度降为O(n²) 随机快排用于解决序列近乎有序时算法复杂度退化为O(n²)的问题 from random import shuffle, randrange def quick_sort(lst, left, right): 当只有一个元素的时候退出递归 阅读全文
posted @ 2018-12-26 01:04 KeithTt 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 快速排序 又称分区交换排序(partition exchange sort) 平均时间复杂度为O(nlogn) from random import shuffle def quick_sort(lst, left, right): 当只有一个元素的时候退出递归 if left 阅读全文
posted @ 2018-12-26 01:00 KeithTt 阅读(165) 评论(0) 推荐(0) 编辑