Sunday Blog

人生是一场刻意练习

Kubernetes EFK日志收集

Kubernetes Es Logging

上传镜像(可选) export tag=7.17.3 images=( docker.elastic.co/elasticsearch/elasticsearch:${tag} docker.elastic.co/kibana/kibana:${tag} docker.elastic.co/beats/filebeat:${tag} ) # 上传至harhar export https_proxy="192.168.10.250:7890" # 代理 for image in ${images[@]}; do skopeo copy docker://${image} docker://registry.sundayhk.com/elastic/${image#*/}; done 部署Elasticsearch helm及添加storageC

RocketMQ deleteSubscriptionGroup 不删除 consumer offset 解决

Rocketmq Delete Consumer Group

https://github.com/apache/rocketmq/issues/3660 使用下面命令,删除订阅组成功但在rocketmq-dashboard 还能看到订阅组信息,只不过会显示1970-01-01 08:00:00,

SSH 一次执行多个命令

Ssh Multiple Commands

分号 ssh User@Host 'source /etc/profile; date' 写EOF ssh User@Host /bin/bash << EOF date ls -la uptime EOF 使用脚本 echo 'date' > 1.sh ssh User@Host bash -s < 1.sh

Kubernetes Note

Kubernetes Note

微服务的容器服务都应该使用 StatefulSet 而不是 Deployment 使用 preStop 和 readinessProbe 保证服务平滑更新不中断 通常对于常规分布式微服务业务系统来说,StatefulSet 的顺序性保证

Kubernetes 常用命令

Kubernetes Command

# 缩容 kubectl scale -n kube-system deployment coredns --replicas=1 # 设置污点 kubectl taint node master node-role.kubernetes.io/master="":NoSchedule # 取消污点 kubectl taint node master1 node-role.kubernetes.io/master- deployment daemonset 回滚 kubectl rollout history daemonset -n kube-system fluentd-elasticsearch kubectl rollout undo --to-revision=1 daemonset -n kube-system fluentd-elasticsearch

Python多线程join( )使用

python Multithreading Join

Python多线程与多进程中join()方法的效果是相同的。 join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。 Daemon

Python中的描述器、反射

Python Descriptor

描述器 什么是描述器? 一个类中定义了如下一个或多个魔术方法,这个类的实例就是描述器: __get__,__set__,__delete__ 通常需

Python 装饰式和偏函数

Python Decorator and Partial

装饰器 要讲清楚装饰器,首先要知道一些前置概念。下文涉及到这些概念的地方,会展开讲述。 什么是装饰器? 装饰器是一种AOP(面向切面编程)的设计模

Python 装饰器

Python Decorator

无参装饰器 import datetime import time import functools def logger(fn): @functools.wraps(fn) #wrap解决文档、名称问题 def wrapper(*args,**kwargs): """+++Wrapper Function+++""" start=datetime.datetime.now() ret = fn(*args,**kwargs) #add delta=(datetime.datetime.now()-start).total_seconds() print(fn.__name__,delta) return ret return wrapper @logger # add=logger(add) === add=wrapper def add(x,y): """Add Function""" time.sleep(1) return x+y print(add(4,5)) print(add.__name__,add.__doc__) add 1.004984 9 add Add Function 带参装饰器

Python shutil模块

Python Shutil

文件拷贝:使用打开2个文件对象,源文件读取内容,写入目标文件中来完成拷贝过程。但是这样丢失stat数据信息、权限等) Python提供了一个方

正则表达式

Regex

基本语法 代码 说明 . 匹配除换行符外任意一个字符 [abc] 字符集合,匹配集合中包含的任意一个字符 [^abc] 字符集合,匹配非集合内的任意一个字符 [a-z] 字符集合范围,匹

Python Path 路径

Python Path

os.path from os import path # 拼接路径 p=path.join('/etc','sysconfig','network') # 路径是否存在 print(path.exists(p)) # 分割 (元组: dirname和basename) print(path.split(p)) # 路径和基名 print(path.dirname(p),path.basename(p)) # 当前路径 print(path.abspath(""),path.abspath('.')) # windows print(path.splitdrive('o:/tmp/test')) #windows 文件根目录 p1=path.abspath(__file__) #父文

Python列表解析式和lambda

List Comprehensions And Lambda

列表解析式 [ ] >>> print([i for i in range(10)]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print([i for i in range(10) if i%2]) [1, 3, 5, 7, 9] >>> print([i for i in range(10) if i%2 == 1]) [1, 3, 5, 7, 9] >>> print([i for i in range(1,10,2)]) [1, 3, 5, 7, 9] >>> print([i for i in range(20) if i%2==0

Python dict 字典

Python Dict

Dict即Dictionary,也称为mapping. Python中,字典由任意个元素构成的集合,每-个元素称为Item, 也称为Entry。

Python 阶乘

Factorial

0!=1 1!=1 2!=1*2 3!=1*2*3 4!=1*2*3*4 ... for def factorial(n): p=1 for i in range(1,n): p*=i return p print(factorial(5)) 120 for递归 def factorial(n,p=1): if n==1: return p p*=n return factorial(n-1,p) print(factorial(6)) 720 def factorial(n,p=1): return p if n<2 else factorial(n-1,p*n) print(factorial(5)) 公式法 def factorial(n): if n< 2: return n return n*factorial(n-1) print(factorial(5)) 120