精简 Docker 镜像
精简 Docker 镜像
精简镜像的好处
减少构建时间。
减少磁盘使用量。
减少下载时间,加快容器启动速度,在需要快速扩容的场景下显得尤为重要。
降低带宽压力。在大规模扩容的场景下,大量镜像并发拉取,镜像仓库或任意节点达到带宽瓶颈都会影响扩容速度,精简的镜像会降低带宽压力,从而降低达到带宽瓶颈的概率和时长。
提高安全性,减少攻击面积。无用的依赖少,从而大大减少被攻击目标。
使用精简的基础镜像alpineAlpine一个基于 musl libc 和 busybox、面向安全的轻量级 Linux 发行版,压缩体积只有 3M 左右,很多流行的镜像都有基于 alpine 的制作的基础镜像。
scratchscratch 是一个空镜像,如果你的应用是一个包含所有依赖的二进制(不依赖动态链接库),可以使用 scratch 作为基础镜像,这样镜像的体积几乎就等于你 COPY 进去的二进制的体积。
示例:
FROM scratchCOPY app /appCMD ["/app"]
busybox如果你希望镜像里可以包含一些常用的 Linux 工具,busybox 镜像是个不 ...
overlayfs tmpfs 讲解--容器
文件系统Linux 的文件系统遵循 HFS 设计,有如下实现:
Ext (Extended Filesystem), Ext2, Ext3, Ext4JFS (Journaling Filesystem)ReiserFSXFS (Extent Filesystem)Btrfs (B Tree Filesystem)Swap
mountunix 有树状的文件系统,根节点是 /,每个节点可能来自不同的 devices。mount 将 device 上的某文件系统放在树的某节点上。
标准格式是 mount -t type device dir,会把类型为type的device挂载到dir目录上,之前dir目录的内容还在而只是被隐藏了。
如果 mount /dir 则会在 /etc/fstab 中找挂载点
也可以 mount –target /mountpoint
mount [-l] [-t type] 会列出已挂载的设备
通过更改 /etc/fstab 文件可以挂载,内容如下:
Device: usual ...
hexo-deployer-aws-s3
hexo-deployer-aws-s3
安装插件# 进入到 hexo 主目录,执行如下命令npm install hexo-deployer-aws-s3 --save-dev
配置 _config.yml# 配置 hexo 项目中的 _config.yml 文件deploy: type: aws-s3 # The name of this plugin region: us-east-1 # The region where your bucket is located bucket: my-bucket # The name of your bucket prefix: blog-resources # The s3 key prefix
配置 aws key# mac 系统将对应的 key 配置到 ~/.zprofile 中export AWS_ACCESS_KEY_ID=xxxxexport AWS_SECRET_ACCESS_KEY=xxxxxxxx
部署到 s3hexo deploy
参 ...
K8s 内存泄漏 runc、kubelet 编译方法
K8s 内存泄漏 runc、kubelet 编译方法准备一台和生产节点相同内核版本的机器# 安装 go # 下载地址: https://golang.google.cn/dl/# 也可以直接 yum 安装,连带 git 一起安装了 下载源码时会用到yum install golang git -y# 安装编译工具和依赖包yum -y install gcc gcc-c++ kernel-devel libseccomp-devel
runc 编译有两种方法下载runc的代码
# 通过go工具下载# runc的源码自动下载到$GOPATH/src/github.com/opencontainers/runc目录下# go get github.com/opencontainers/runc# 直接通过git工具克隆代码cd $GOPATH/src/github.com/opencontainersgit clone https://github.com/opencontainers/runc# 切换到对应的版本cd runcgit checkout v1.0.0-rc9# 编译 r ...
lvm 删除正在使用的逻辑卷
1报错[root@SBackup ~]# lvremove /dev/vg_storage1/lei Logical volume vg_storage1/lei in use.
查看是否被占用[root@SBackup ~]# lvdisplay /dev/vg_storage1/lei |grep open # open 1 --被打开了 [root@SBackup ~]# fuser -kuc /dev/vg_storage1/lei/dev/vg_storage1/lei: 1726(root) --也可以看到进程号1726的root用户正在使用
杀掉该进程ps -ef | grep 1726 kill 1726
再次删除[root@SBackup ~]# lvremove /dev/vg_storage1/leiDo you really want to remove active logical volume lei? [y/n]: y Logical volume "lei" successfull ...
lvm
lvm 示意图
依次为:disk -> partition -> PV -> VG -> LV -> fs,也即磁盘->分区->物理卷->卷组->逻辑卷->文件系统。
LVM 主要构成
物理存储介质 (PM, physical media):LVM 存储介质可以是分区、磁盘、RAID 阵列或 SAN 磁盘。
物理卷 (PV, physical volume):物理卷是 LVM 的基本存储逻辑块,但与基本的物理存储介质(如分区、 磁盘等)比较,却包含有与 LVM 相关的管理参数,创建物理卷可以用磁盘分区,也可以用磁盘本身。磁盘设备必须初始化为 LVM 物理卷,才能与 LVM 结合使用。
卷组 (VG, Volume Group):LVM 卷组由一个或多个物理卷组成。
逻辑卷 (LV, logical volume):LV 建立在 VG 之上,可以在 LV 之上建立文件系统。
物理范围 (PE, physical extents):PV 物理卷中可以分配的最小存储单元,PE 的大小是可以指定的,默认为 4MB。
逻辑范围 ( ...
awk 常用语法
AWK 常用命令总结概述此文章为总结awk常用命令而设,方便以后查找。
求和# 第一行第二行求和。[root@master scripts]# awk 'NR==1{a=$1} NR==2{b=$1} END {print b+a}' a3[root@master scripts]# cat a12
awk 乘除free | awk -F "[ ]+" 'NR==2 {printf ("%.2f%\n", $3/$2*100)}'
printf 格式化输出# 示例如下[root@master ~]# awk -F ":" 'BEGIN{print"用户名\t\t\t字段1\t\t 字段2\t\t 权限"}/sbin:/{printf "user:%-20s%-20s%-20s%-20s\n", $1,$4 ...
通过 etcd 访问 kubernetes 数据
Kubenretes1.6 中使用 etcd V3 版本的 API,使用 etcdctl 直接 ls 的话只能看到 /kube-centos 一个路径。需要在命令前加上 ETCDCTL_API=3 这个环境变量才能看到 kuberentes 在 etcd 中保存的数据。
ETCDCTL_API=3 etcdctl get /registry/namespaces/default -w=json|python -m json.tool
如果是使用 kubeadm 创建的集群,在 Kubenretes 1.11 中,etcd 默认使用 tls ,这时你可以在 master 节点上使用以下命令来访问 etcd :
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/peer.crt \--key=/etc/kubernetes/pki/etcd/peer.key \get /registry/namespaces/defaul ...
etcd
概述Kubernetes 使用 Etcd 数据库实时存储集群中的数据,安全起见,一定要备份。Kubeadm 部署的 etcd 没有 etcdctl 命令,需要单独下载 etcd 二进制包。
注意事项// 如果不使用 export ETCDCTL_API=3,而使用 ETCDCTL_API=3,则下面每条 etcdctl 命令前都要加 ETCDCTL_API=3。export ETCDCTL_API=3
配置 etcdctl下载 etcdcli# 查看etcdcli 版本。 etcd-gcr-v3.5.1 为etcd容器的名称。[root@master ~]# docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl version"etcdctl version: 3.5.1API version: 3.5
安装 etcdcli# 由于我使用的是 arm 架构的服务器,所以这里下载 etcd arm 版本的。wget https://github.com/etcd-io/etcd/rel ...
python 邮件转微信
概述python 邮件转 微信
具体实现如下在日常工作中,我们会经常收到邮件,有些是重要的邮件我们希望第一时间知晓,如领导发送的邮件,程序报警邮件。微信是我们使用频率最高的 app 了,因此如果能把邮件内容及时发送到微信,我们就可以及时获取邮件信息,进而采取相应行动。比打开邮件客户端再点击邮件查看要方便多了。
需要安装第三方库 wxpy,wechat_sender,zmail
pip install wxpypip install wechat_senderpip install zmail
原理:使用 wxpy 登陆网页版微信,使用 wechat_sender 监听 wxpy 登陆的微信,使用 zmail 获取邮件。
思维导图如下:
完整代码文件一 :startWechat.py
# -*- coding: utf-8 -*-from wxpy import *from wechat_sender import listen#扫码登陆网页版微信bot = Bot(cache_path=True)@bot.register(Friend)def save_msg(msg): ...