背景: 使用kvm 安装 qcow2 文件 ,启用一个ubuntu 虚拟机。
qemu-img info a.qcow2
qemu-img create -f qcow2 -o preallocation=metadata b.qcow2 60G
virt-resize --expand /dev/sda1 a.qcow2 b.qcow2
#第一个命令查看a.qcow2 镜像磁盘有多大(a 包含我们要安装系统镜像)
#第二个命令创建一块 60G 的镜像磁盘文件(即最终磁盘容量,b须比a大)
#第三个命令,将a 镜像内容拷到b镜像中,并将空闲空间(b'size-a'size)扩展到/dev/sda1 分区上。
#即,如果a.qcow2 原磁盘大小是50G ,执行完命令后b.qcow2 除了是a.qcow2 的完整拷贝外,b.qcow2中的/deb/sda磁盘大小为60G,其中/dev/sda1 分区 比a.qcow2 中/dev/sda1 多了10G.
qemu-img resize a.qcow2 +5G
virsh destroy vm
virsh start vm
## enter vm
fdisk -l | grep sda (/dev/sda 磁盘大小增加了5g, 但是分区 /dev/sda1 未拿到这些空间)
parted /dev/sda (将磁盘的未分配空间,分配给分区sda1)
(parted) p
(parted) resizepart 1
(parted) quit
## 执行log 如下:
root@CASA-MOBILE:~# parted /dev/sda
(parted) p <== remember space of all disk /dev/sda ,and remember the Number of sda1
在使用diskimage-builder生成qcow2 镜像时,磁盘空间足够,但是执行到中间时会报
No space left
用df -h 查看时,/目录下的空间足够。
于是再执行,在执行过程中发现,diskimage-builder在执行过程解包和拷贝过程是会将一个/tmp/dib_build.xxxxxx的临时目录挂载在tmpfs上,而当前系统的tmpfs 只有3.9G 。
root@vm1:~# df -h| grep tmpfs
tmpfs 797M 3.3M 793M 1% /run
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 797M 0 797M 0% /run/user/0
tmpfs 3.9G 3.8G 154M 97% /tmp/dib_build.whmZyNdv
tmpfs 3.9G 0 3.9G 0% /tmp/dib_image.6Jdr8dSL
了解tmpfs是在哪里分配及分配规则:
https://wiki.archlinux.org/index.php/Tmpfs
tmpfs is a temporary filesystem that resides in memory and/or swap
partition(s). Mounting directories as tmpfs can be
在ubuntu系统上,安装一系列依赖,及打包工具diskimage-builder, 然后在其上执行包含
disk-image-create 命令的脚本,生成qcow2/vmdk镜像。
每个人想拥有自己的构建环境 ,都需要另外在自己的系统上安装所需要的软件列表,会存在系统版本和软件版本不一的情况。
将其上环境构建成固定的dokcer 镜像, 每个人不管自己的设备是redhat, centos, ubuntu,都可以使用可控版本的打包容器进行构建,并且使用的软件版本是一致的。使用的镜像基于基础系统另装了哪些工具,都是可追溯可控版的。
将需要定义的变量,需要预装的软件,都写进dockerfile
FROM ubuntu:bionic AS DIB-env
COPY sources.list /etc/apt/
RUN apt-get update
RUN apt-get install -y python-pip
RUN apt-get install -y qemu-utils
RUN apt-get install -y sudo
RUN apt-get install -y curl
RUN apt-get install -y squashfs-tools
# Install python packages
RUN pip install --upgrade pip
RUN pip install networkx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
RUN pip install diskimage-builder -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
ENV TEMP_PATH=/vob_temp
RUN mkdir -p ${TEMP_PATH}
COPY temp.tar.gz ${TEMP_PATH}
WORKDIR ${TEMP_PATH}
RUN tar zxvf temp.tar.gz
RUN r
Dockerfile 里的 pip install 总是failed .但是直接执行可以成功。
估计是docker build 时默认使用的pip 源有太慢导致
RUN pip install networkx
Step 9/15 : RUN pip install networkx
---> Running in 3a3f19067b2f
Collecting networkx
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutErr
自动垃圾回收机制
丰富的内置类型
函数多返回值
错误处理
匿名函数和闭包
类型和接口
#我们在实现Bird类型时完全没有任何IFly的信息。我们可以在另外一个地方定义这个IFly
接口:
type IFly interface {
Fly()
}
#这两者目前看起来完全没有关系,现在看看我们如何使用它们:
func main() {
var fly IFly = new(Bird)
fly.Fly()
}
并发编程
平时的配置管理概念默认是指都是指源代码的版本管理,这一章整理一些系统环境的配置管理
整理中。。。。。
https://docs.saltstack.com/en/latest/
SaltStack是一种革命性的基础设施管理方法,它以速度取代了复杂性。SaltStack非常简单,可以在几分钟内运行,可扩展程度足以管理数万台服务器,速度足以在几秒钟内与每个系统通信。
Salt Master 上安装了中心管理系统,配置和指令是由master 发往minions 的
Salt minion 被管理系统上安装着Salt minion ,由Salt minion 接收来自master 的指令
从命令行对一个或多个受管理系统执行的临时命令。适用于:
系统配置的声明式或命令式表示。
(系统变量)。粒度是关于底层托管系统的静态信息,包括操作系统、内存和许多其他系统属性。还可以为任何系统定义自定义粒度。
用户定义的变量。这些安全变量被定义并存储在Salt主服务器上,然后使用目标将其“分配”给一个或多个“仆从”。Salt pillar数据存储端口、文件路径、配置参数和密码等值。
将Formulas和Pillar数据与minion进行匹配
在Salt Master上执行支持任务的模块。Salt runner报告作业状态、连接状态、从外部api读取数据、查询连接的Salt minions等等。
例如,Orchestrate runner协调跨许多系统的配置部署
Accurev workspace 有一个include/exclude 功能,可以在workspace 中增加规则,使workspace 只看到,只更新想关注的列表。
对于被排除在外的元素,不可见,不更新,不会提交,不影响
切换到workspace exploer
在workspace 左侧导栏 下方,勾选 include/exclude view 右击文件视图上方会出现 include.exclude 功能的按扭
Include : 包含在视图
Include Directry Only : 只包含目录,不包含目录下的文件
Exclude : 排除在外
一个元素上只能有一种规则
顶部元素没有设置rule的,按默认显示
设置之后右侧视图上方展示workspace 的元素,下方展示元素上被设置的规则
/gua/gua2/test1.txt
/hua/hua2/test2.txt
/hua/hua2/test1.txt
/dua/dua2/test/test3.txt
设置一个workspace ,使之更新时将/dua目录及目录下的文件排除在外,即workspace视图 对stream 的dua 目录不可见
/dua :exclude
设置一个workspace ,使之更新时只会更新到/hua/hua2/test2.txt,对此文件外的其他文件及目录不可见。
/dua :exclude
/gua :exclude
/hua :include directory only
/hua/hua2 :include directory only
/hua/hua2/test2.txt :include
Accurev 其他相关笔记
安装时报错:
http://blog.leanote.com/post/gua_l
Stream Name: 自定义名称
Basis: 爸爸stream
Stream Type : stream 类型
Base Time : 基准时间
新建 :Base stream 上右击菜单,new stream
修改 :在建成的stream 上右击菜单是,change stream
一般情况下我们新建的都是 Dynamic Stream ,图标是波浪线或时钟。
这种类型的stream 的图标有两种,一种是三条波浪线,一种是时钟
两种情况可以互相转换,通过把basetime 从None 和 其他三种时间的切换实现
波浪线表示可以本流是实时同步父流同步的提交的,实时接收父流的修改,即两流从上而下的关系是畅通的意思, New stream 的页面,Based time里选 None , 即上下游之间无关时间闸门阻隔。
时钟表示这个动态流上打上了一个时间闸门,即以basetime 里设置的时间作为一个时间节点,这个时间节点以后,在父流提交的东西,不会往下流到本流。
New stream 的页面,Based time 的 Now , Transaction # , specail time 三个选项都可以设置时间闸门。
会以创建时间为准,保存时,将当前时间转换成一个具体的时间戳。创建成功后再查看时间,是当时的now. 不同时间点now 都有不同含义。常用于需要最新修改,但是不要以后的修改流下来的情况
在base stream 的history 里,每一条promote 都有一个对应的transaction ID , 这背后也是对应着的一个时间戳,可以在该base time 的histroy 里选一条提交的transaction ID ,或者选全局的一个trans
apt-get install -y dnsmasq
root@node248:/etc/resolvconf/resolv.conf.d# cat /etc/dnsmasq.conf | grep -v "^#|^$"
port=53
resolv-file=/etc/resolv.conf
strict-order
listen-address=172.0.11.248
addn-hosts=/etc/hosts
root@node248:/etc/resolvconf/resolv.conf.d# cat /etc/hosts
#.....
172.0.11.2 vm2
172.0.11.3 vm3
172.0.11.4 vm4.com
使用服务器本身的dns 列表,则resolv-file=/etc/resolv.conf
使用服务器上另外的dns 列表文件,即上游dns,则resolv-file=/etc/dnsmasq.d/ 此目录下放置 *conf
#14
service dnsmasq restart
#18
systemctl restart dnsmasq
客户端将此服务器ip 设置为dns 之后,查找域名时,会通过服务器的/etc/hosts 去解析域名,然后再通过resolv-file 中列的dns 去解析。
UBUNTU 14
root@vm1:/etc/dnsmasq.d# cat /etc/resolvconf/resolv.conf.d/base
nameserver 172.0.11.248
root@vm1:/etc/dnsmasq.d# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#
fluxCD
https://fluxcd.io/
The GitOps operator for Kubernetes
填补了构建和监控之间的空白 ,持续监控git库中的yaml和 registry的镜像
It fills the automation void that exists between building and monitoring.
Automated git->cluster synchronisation
Flux的主要特性是版本控制存储库和集群之间的自动同步。如果对存储库进行任何更改,这些更改将自动部署到集群中。
所有配置都存储在版本控制中,并且本质上是最新的。在任何时候,任何人都可以完全以完全相同的配置状态重新创建集群。
对集群的更改对所有相关方都是立即可见的。
在事后分析期间,git日志为审计提供了完美的历史记录。
端到端,代码到生产管道不仅变得可能,而且容易。
另一个特性是容器的自动部署。它将持续监控一系列容器注册中心,并在适用的地方部署新版本。
这对于使存储库和集群保持最新非常有用。它允许单独的团队拥有自己的部署管道,因为Flux能够看到新映像并相应地更新集群。
可以禁用此功能,并将图像锁定到特定的版本。
对于跨环境和集群的配置自定义,Flux提供了对Kustomize和Helm的内置支持。
对于高级部署模式,如Canary版本、A/B测试和蓝/绿部署,Flux可以和Flagger一起使用。
Requirements and limitations