云平台部署与管理
云平台部署与管理 1
环境介绍 10
虚拟化概念 10
虚拟化服务器平台 11
kvm虚拟机组成: 12
Virsh虚拟机管理 12
Qemu-img命令 13
创建新的镜像盘文件 14
创建XML文件 14
批量创建虚拟机 14
创建虚拟机 14
修改xml文件 15
定义xml文件 15
Virsh扩容磁盘 15
扩容思路 15
根分区扩容 15
语言必须为英文 15
查看硬盘设备是否有多余空间 15
扩容第一个分区 16
扩容文件系统 16
检查扩容结果 16
云计算基础服务: 16
PaaS,平台即服务 16
SaaS,软件即服务 16
IaaS,即基础设施即服务 16
Openstack主要组件 17
Keystone 17
Neutron 17
Cinder 17
Glance 18
Nova 18
步骤一:准备三台虚拟机 18
2)opensatck主机扩容为50G 19
3)nova01 和 nova02 主机扩容为100G 19
4)三台主机配置静态ip(以一台为例) 20
5) 三台主机修改主机名,配置/etc/hosts,和/etc/resolv.conf文件 20
6)修改三台主机的内存(openstack6G,nova01 和nova02 4G) 21
步骤一:三台主机配置yum源(以一台主机为例,共10670个软件包) 23
步骤一:检查基础环境 26
1)安装额外软件包(三台机器操作,这里以一台为例) 26
3)检查配置主机网络参数 26
4)验证主机名是否互通 27
5)检查配置主机yum源 28
6)检查时间同步是否可用 29
7)检查/etc/resolv.conf 不能有 search 开头的行 29
步骤一:安装packstack 29
网络管理 32
步骤一:查看外部OVS网桥 32
1)查看br-ex网桥配置(br-ex为OVS网桥设备) 32
2)查看eth0网卡配置(该网卡为OVS网桥的接口) 32
3)验证OVS配置 33
Docker 34
缺点 34
安装docker(docker1和docker2主机同样操作) 34
步骤一:docker镜像 36
1)下载镜像 36
2)上传镜像 37
3)查看镜像 37
4)查找busybox镜像 37
5)导出busybox镜像为busybox.tar 38
6)导入镜像 38
7)删除镜像 39
步骤二:一次性导入多个镜像 40
步骤三:启动镜像 41
1)启动centos镜像生成一个容器 41
镜像常用命令 42
命令列表 42
命令列表: 43
容器常用命令 43
命令列表 43
自定义镜像 44
步骤一:使用镜像启动容器 44
1)在该容器基础上修改yum源 44
2)安装测试软件 44
3)ifconfig查看 45
1)创建新建镜像 45
2)查看新建的镜像 45
3)验证新建镜像 46
Dockerfile文件创建一个新的镜像文件 46
1)创建一个Apache的镜像文件 46
创建私有镜像仓库 48
步骤一:自定义私有仓库 48
1)定义一个私有仓库 48
2)客户端配置 49
步骤二:查看私有仓库 49
1)查看里面有什么镜像 49
2)查看里面的镜像标签 49
NFS共享存储 50
步骤一:配置NFS服务器 50
步骤二:配置客户端 51
创建自定义网桥 53
步骤一:新建Docker网络模型 53
1)新建docker1网络模型 53
2)使用自定义网桥(docker1)启动容器 53
3)使用默认网桥(docker0)启动容器 54
测试 55
大型架构及配置技术 55
Ansible基础: 55
优点: 55
Ansible依赖关系使用以下模块 56
ansible安装部署 56
批量部署证书文件,给所有主机部署密钥 56
1)创建密钥 56
2)给所有主机部署密钥 57
主机定义与分组 57
步骤三:配置主机分组,自定义文件,在重新定义一个新的 ansible.cfg 58
1)自定义文件 58
2)测试结果 59
创建用户 59
步骤一:添加用户 59
步骤一:添加用户 60
用脚本写,script模块执行 60
1)批量修改配置文件 61
批量同步所有机器的 yum 配置文件 61
2) 给所有 db 主机开启 binlog 日志 62
步骤一:综合练习 63
1)使用copy模块同步my.cnf配置文件 63
2)使用 lineinfile 模块 修改 binlog 格式 64
类似sed的一种行编辑替换模块 64
3)使用 replace 模块修改 binlog 格式 64
类似sed的一种行编辑替换模块 64
3)setup模块 65
大型架构及配置技术二 66
Ansible七种武器: 66
JSON介绍 67
YAML介绍: 67
图片 68
Playbook语法基础 69
playbook的ping脚本检测 69
用playbook安装Apache,修改端口,配置ServerName,修改主页,设置开机自启 70
变量练习 71
使用user模块添加用户,并修改密码 71
变量过滤器,创建一个用户,设置密码 72
定义一个变量创建用户 73
handlers练习 74
步骤一:error 74
tags给指定的任务定义一个调用标识 74
1)tags 样例 74
2)调用方式 75
步骤三: handlers 75
环境介绍
第四阶段专用虚拟机模板:
$base-vm //执行脚本克隆虚拟机
$base-vm web1 db1 Nova1
虚拟化概念
X个物理资源—>y个逻辑资源
实现程度:完全…部分…硬件辅助(CPU)
主要厂商及产品:
VMware: VMware workstation,vSphere
Microsoft: VirtualPC,Hyper-V
RedHat: KVM,RHEV
Citrix: Xen
Oracle: Oracle VM VirtualBox
虚拟化服务器平台
KVM:是linux内核的模块,需要CPU支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V
QEMY:是虚拟化仿真工具,通过ioctl与内核kvm交互完成对硬件的虚拟化支持
Libvirt:是虚拟化管理的接口和工具,提供用户端程序virsh,virt-install,virt-manager,virt-view与用户交互
必备软件:
qemu-kvm:为kvm提供底层仿真支持
Libvirt-daemon:libvirtd守护进程,管理虚拟机
Libvirt-client: 用户端软件,提供客户端管理命令
Libvirt-daemon-driver-qemu: libvirtd连接qemu驱动
可选功能:
Virt-install #系统安装工具
Virt-manager #图形管理工具
Virt-v2v #虚拟机迁移工具
Virt-p2v #物理机迁移工具
虚拟平台的安装:
#yum -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
#systemctl start libvirtd
kvm虚拟机组成:
内核虚拟化模块(KVM)
系统设备仿真(QEMU)
虚拟机管理程序(LIBVIRT)
一个XML文件(虚拟机配置声明文件)
位置 /etc/libvirt/qemu/
一个磁盘镜像文件(虚拟机的硬盘)
位置 /var/lib/libvirt/images/
Virsh虚拟机管理
List [–all] 列出虚拟机
Start|shutdown|reboot 虚拟机启动,停止,启动
Destroy 强制停止虚拟机
Define|undefine 根据xml文件 创建/删除虚拟机
Console 连接虚拟机的console
Edit 修改虚拟机的配置
Autostart 设置虚拟机自启动
Domiflist 查看虚拟机网卡信息
Domblklist 查看虚拟机硬盘信息
Net-list [–all] 列出虚拟网络
Net-start 启动虚拟交换机
Net-destroy 强制停止虚拟交换机
Net-define 根据xml文件创建虚拟网络
Net-undefine 删除一个虚拟网络设备
Net-autostart 设置虚拟交交换机自启动
Qemu-img命令
Qemu-img支持raw,qcow2,vdi,vmdk
格式:qemu-img 命令 参数 块名 大小
常用命令:
Create 创建一个磁盘
Convert 转换磁盘格式
Info 查看磁盘信息
Resize 扩容磁盘空间
创建新的镜像盘文件
应用:qemu-img create -f 格式 磁盘路 size
qemu-img create -f qcow2 disk.img 50G
查询镜像盘文件
应用:qemu-img info 磁盘路径
Qemu-img info disk.img
-b使用后端模块文件
Qemu-img create -b disk.img -f qcow2 disk1.img
创建XML文件
编辑:virsh edit 虚拟机名
若修改CPU与memory
#virsh edit node0
批量创建虚拟机
创建虚拟机
Cd /var/lib/libvirt/images/
Qemu-img create -f qcow2 -b node.qcow2 node1.img 20G
修改xml文件
Sed ‘s,node,node1,’ node.xml > /etc/libvirt/
Qemu/node1.;xml
定义xml文件
Virsh define /etc/libvirt/qemu/node1.xml
Virsh扩容磁盘
Virsh -domblklist //查看虚拟机硬盘信息
-blockresize --path[绝对] --size 50G openstack
扩容思路
首先是硬盘–>其次是分区–>再次是文件系统
根分区扩容
语言必须为英文
LANG=C
查看硬盘设备是否有多余空间
lsblk
扩容第一个分区
/usr/bin/growpart /dev/vda 1
扩容文件系统
/usr/sbin/xfs_frowfs /
检查扩容结果
Df -h
云计算基础服务:
PaaS,平台即服务
简单滴说,PaaS平台是指云环境中的应用基础设施服务,也可以说是中间件即服务
SaaS,软件即服务
通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网像厂商订购所需的应用软件服务
IaaS,即基础设施即服务
提供消费者的服务对所有计算基础设施利用.cpu,内存,存储,网络等.
IaaS通常分为:公有云,私有云,混合云
Openstack主要组件
Keystone
为其他服务提供认证和授权的集中身份管理服务
已提供集中的目录服务
支持多种身份认证模式,如密码,令牌,亚马逊web服务登录
为用户和其他服务提供sso认证服务
Neutron
一种软件定义网络服务
用于创建网络,子网,路由器,管理浮动ip地址
可以实现虚拟交换机,虚拟路由器
可用与在项目中创建
Cinder
虚拟机管理存储卷服务
运行在nova中的实例提供永久块存储
可以通过快照进行数据备份
经常用在实例存储环境中,如数据库文件
Glance
扮演虚拟机注册的角色
允许用户为直接存储拷贝服务器镜像
这些景象可以用于新建虚拟机的模板
Nova
节点上用于管理虚拟机的服务
Nova是分布式的服务,能与keystone交互实现认证,与glance交互实现镜像管理
Nova被设计成在标准硬件上能够进行水平扩展
需要下载镜像
步骤一:准备三台虚拟机
[student@room9pc01 images] b a s e − v m o p e n s t a c k n o v a 01 n o v a 02 [ s t u d e n t @ r o o m 9 p c 01 i m a g e s ] base-vm openstack nova01 nova02 [student@room9pc01 images] base−vmopenstacknova01nova02[student@room9pc01images]virsh start openstack
[student@room9pc01 images] v i r s h s t a r t n o v a 01 [ s t u d e n t @ r o o m 9 p c 01 i m a g e s ] virsh start nova01 [student@room9pc01 images] virshstartnova01[student@room9pc01images]virsh start nova02
2)opensatck主机扩容为50G
·[student@room9pc01 images]$ virsh blockresize --path /var/lib/libvirt/images/openstack.img --size 100G openstack
·[student@room9pc01 images]$ virsh console openstack
·[root@localhost ~]# /usr/bin/growpart /dev/vda 1
·[root@localhost ~]# /usr/sbin/xfs_growfs /
3)nova01 和 nova02 主机扩容为100G(以nova01为例
·[student@room9pc01 images]$ virsh blockresize --path /var/lib/libvirt/images/nova01.img --size 50G nova01
· 重新定义 ‘/var/lib/libvirt/images/nova01.img’ 块设备大小
·[root@localhost ~]# /usr/bin/growpart /dev/vda 1
· [root@localhost ~]# /usr/sbin/xfs_growfs
4)三台主机配置静态ip(以一台为例)
[root@localhost~]# cd /etc/sysconfig/
network-scripts/
[root@localhostnetwork-scripts]#vim ifcfg-eth0
DEVICE=“eth0”
ONBOOT=“yes”
NM_CONTROLLED=“no”
TYPE=“Ethernet”
BOOTPROTO=“static”
PERSISTENT_DHCLIENT=“yes”
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
5)三台主机修改主机名,配置/etc/hosts,和/etc/resolv.conf文件
[root@localhost ~]# hostname openstack
[root@localhost ~]# echo openstack > /etc/hostname
[root@localhost ~]# vim /etc/hosts
192.168.1.10 openstack
192.168.1.11 nova01
192.168.1.12 nova02
[root@localhost ~]# vim /etc/resolv.conf //去掉search开头的行
; generated by /usr/sbin/dhclient-script
nameserver 192.168.1.254
6)修改三台主机的内存(openstack6G,nova01 和nova02 4G)
[student@room9pc01 ~]$ virsh edit openstack
· …
· 6588282
6588282
[student@room9pc01 ~]$ virsh edit nova01
· …4588282
·4588282
·[student@room9pc01 ~]$ virsh start openstack
· 域 openstack 已开始
·[student@room9pc01 ~]$ virsh start nova01
· 域 nova01 已开始
·[student@room9pc01 ~]$ virsh start nova02
步骤一:修改openstack,nova01 和 nova02 的时间服务器(以一台为例)
[root@openstack ~]# vim /etc/chrony.conf
…
server 192.168.1.254 iburst
[root@openstack ~]# systemctl restart chronyd
步骤二:验证
[root@openstack ~]# chronyc sources -v
步骤三:两台虚拟机配置静态ip
注意:两台主机同样操作,改一下ip即可(以openstack.tedu.cn为例)
[root@localhost~]#echo openstack.tedu.cn > /etc/hostname
[root@localhost~]#hostname openstack.
tedu.cn
//另外一台主机改名为nova.tedu.cn,配置ip为1.20
[root@openstack ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
步骤一:三台主机配置yum源(以一台主机为例,共10670个软件包)
$ cd /linux-soft/04/openstack/
$ ls
cirros.qcow2 RHEL7-extras.iso RHEL7OSP-10.iso small.qcow2
$ mkdir /var/ftp/RHEL7OSP-10
$mount RHEL7-extras.iso /var/ftp/
RHEL7-extras/
mount: /dev/loop1 写保护,将以只读方式挂载
$ mount RHEL7OSP-10.iso /var/ftp/
RHEL7OSP-10/
mount: /dev/loop2 写保护,将以只读方式挂载
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=1
[RHEL7-extras]
name=RHEL7-extras
baseurl="ftp://192.168.1.254/RHEL7-extras"
enabled=1
gpgcheck=0
[RHEL7OSP-package]
name=RHEL7OSP-package
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-rpms"
enabled=1
gpgcheck=0
[RHEL7OSP-devtools]
name=RHEL7OSP-devtools
baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-devtools-rpms"
enabled=1
gpgcheck=0
[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.11:/etc/yum.repos.d/
[email protected]'s password:
local.repo 100% 490 484.4KB/s 00:00
[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/
[email protected]'s password:
local.repo
步骤一:检查基础环境
1)安装额外软件包(三台机器操作,这里以一台为例)
[root@openstack yum.repos.d]# yum install -y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools
)是否卸载firewalld 和 NetworkManager
3)检查配置主机网络参数
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
PERSISTENT_DHCLIENT="yes"
IPADDR=192.168.1.10
NEMASK=255.255.255.0
GATEWAY=192.168.1.254
4)验证主机名是否互通
...
64 bytes from openstack (192.168.1.10): icmp_seq=1 ttl=255 time=0.023 ms
64 bytes from openstack (192.168.1.10): icmp_seq=2 ttl=255 time=0.027 ms
...
[root@openstack ~]# ping nova01
PING nova01 (192.168.1.11) 56(84) bytes of data.
64 bytes from nova01 (192.168.1.11): icmp_seq=1 ttl=255 time=0.139 ms
...
[root@openstack ~]# ping nova02
PING nova02 (192.168.1.12) 56(84) bytes of data.
64 bytes from nova02 (192.168.1.12): icmp_seq=1 ttl=255 time=0.251 ms
...
5)检查配置主机yum源
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识 源名称 状态
RHEL7-extras RHEL7-extras 76
RHEL7OSP-devtools RHEL7OSP-devtools 3
RHEL7OSP-package RHEL7OSP-package 680
local_repo CentOS-7 - Base 9,911
repolist: 10,670
6)检查时间同步是否可用
7)检查/etc/resolv.conf 不能有 search 开头的行
; generated by /usr/sbin/dhclient-script
nameserver 192.168.1.254
步骤一:安装packstack
//answer.ini与answer.txt是一样的,只是用vim打开answer.ini文件有颜色
Packstack changed given value to required value /root/.ssh/id_rsa.pub
42 CONFIG_SWIFT_INSTALL=n
45 CONFIG_CEILOMETER_INSTALL=n //计费相关模块
49 CONFIG_AODH_INSTALL=n //计费相关模块
53 CONFIG_GNOCCHI_INSTALL=n //计费相关模块
75 CONFIG_NTP_SERVERS=192.168.1.254 //时间服务器的地址
98 CONFIG_COMPUTE_HOSTS=192.168.1.11
102 CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11
333 CONFIG_KEYSTONE_ADMIN_PW=a //修改管理员的密码
840 CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan //驱动类型
876 CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5
//设置组播地址,最后一个随意不能为0和255,其他固定
910 CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex //物理网桥的名称
921 CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
//br-ex桥的名称与eth0连接,管理eth0,网桥与哪个物理网卡连接
1179 CONFIG_PROVISION_DEMO=n //DEMO是否测试
Welcome to the Packstack setup utility
网络管理
步骤一:查看外部OVS网桥
1)查看br-ex网桥配置(br-ex为OVS网桥设备)
[root@openstack ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
ONBOOT=“yes”
NM_CONTROLLED=“no”
IPADDR=“192.168.1.10”
PREFIX=24
GATEWAY=192.168.1.254
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO=“static”
TYPE=OVSBridge
2)查看eth0网卡配置(该网卡为OVS网桥的接口)
DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none
3)验证OVS配置
Bridge br-ex
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
Port br-ex
Interface br-ex
type: internal
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port "eth0"
Interface "eth0"
ovs_version: "2.5.0"
Docker
Docker是完整的一套容器管理系统
Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术.
缺点
容器的隔离性没有虚拟化强
公用Linux内核,安全性有先天缺陷
SELinux难以驾驭
监控容器和容器排错是挑战
安装docker(docker1和docker2主机同样操作)
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:3e:e7:3f:6e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:53:82:b9:d4 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
步骤一:docker镜像
1)下载镜像
Using default tag: latest
Trying to pull repository docker.io/library/busybox ...
latest: Pulling from docker.io/library/busybox
Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
2)上传镜像
3)查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest d8233ab899d4 10 days ago 1.199 MB
4)查找busybox镜像
5)导出busybox镜像为busybox.tar
busybox.tar
6)导入镜像
nginx.tar
3c816b4ead84: Loading layer 58.47 MB/58.47 MB
787822cf1b17: Loading layer 54.44 MB/54.44 MB
89decbdf7fb7: Loading layer 3.584 kB/3.584 kB
Loaded image: docker.io/nginx:latest/3.584 kB
[root@docker2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 42b4762643dc 4 weeks ago 109.2 M e1ddd7948a1c 4 weeks ago 1.163 MB
7)删除镜像
Untagged: docker.io/nginx:latest
Deleted: sha256:42b4762643dcc9bf492b08064b55fef64942f055f0da91289a8abf93c6d6b43c
Deleted: sha256:e0e55dd2303b3e3ec852acae267d1f8a3eea27a22c64a5829304ecee4d3f559c
Deleted: sha256:4062cf272cdd99e83b1c21f712e5e1359c91ecf92925e56c62133c3324b84e45
Deleted: sha256:3c816b4ead84066ec2cadec2b943993aaacc3fe35fcd77ada3d09dc4f3937313
步骤二:一次性导入多个镜像
$ cd /linux-soft/04/
[student@room9pc01 04]$ scp -r docker/ [email protected]:/root/
centos.tar nginx.tar redis.tar registry.tar ubuntu.tar
REPOSITORY TAG IMAGE ID CREATED SIZE
步骤三:启动镜像
1)启动centos镜像生成一个容器
启动镜像时若不知道后面的命令加什么:
1、可以猜(如:/bin/bash、/bin/sh)
2、可以不加后面的命令,默认启动
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
#vi dvd.repo //在容器里面配置一个yum源
[local]
name=local
baseurl=ftp://192.168.1.254/system
enable=1
gpgcheck=0
镜像常用命令
命令列表
Docker images //查看镜像列表
Docker history //查看镜像制作历史
Docker inspect //查看镜像底层信息
Docker pull //下载镜像
Docker push //上传镜像
命令列表:
Docker rmi //删除本地镜像
Docker save //镜像另存为tar包
Docker load //使用tar包导入镜像
Docker search //搜索镜像
Docker tag //修改镜像名称和标签
容器常用命令
命令列表
Docker run //运行容器
Docker ps //查看容器列表
Docker stop //关闭容器
Docker start //启动容器
Docker restart //重启容器
Docker attach|exec //进入容器
Docker inspect //查看容器底层信息
Docker top //查看容器进程列表
Docker rm //删除容器
自定义镜像
步骤一:使用镜像启动容器
1)在该容器基础上修改yum源
[root@docker1 docker_images]# docker run -it docker.io/centos
[dvd]
name=dvd
baseurl=ftp://192.168.1.254/system
enabled=1
gpgcheck=0
2)安装测试软件
3)ifconfig查看
步骤二:另存为另外一个镜像
1)创建新建镜像
//可以简写为8d,要保证唯一性
8d07ecd7e345
sha256:ac3f9c2e8c7e13db183636821783f997890029d687b694f5ce590a473ad82c5f
2)查看新建的镜像
3)验证新建镜像
Dockerfile文件创建一个新的镜像文件
Dockerfile语法格式:
– FROM:基础镜像
– MAINTAINER:镜像创建者信息(说明)
– EXPOSE:开放的端口
– ENV:设置环境变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
1)创建一个Apache的镜像文件
FROM docker.io/myos:latest
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/ //定义容器默认工作目录
ADD index.html index.html
EXPOSE 80 //设置开放端口号
EXPOST 443
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
d9a5402709b26b42cd304c77be442559a5329dc784ec4f6c90e4abac1c88e206
创建私有镜像仓库
步骤一:自定义私有仓库
1)定义一个私有仓库
//打标签
//上传
2)客户端配置
INSECURE_REGISTRY='--insecure-registry docker1:5000'
ADD_REGISTRY='--add-registry docker1:5000'
//直接启动
步骤二:查看私有仓库
1)查看里面有什么镜像
{“repositories”:[“docker.io/busybox”,“docker.io/myos”]}
2)查看里面的镜像标签
/busybox/tags/list
{“name”:“docker.io/busybox”,“tags”:[“latest”]}
#curl http://192.168.1.31:5000/v2/
docker.io/myos/tags/list
{“name”:“docker.io/myos”,“tags”:[“http”]}
NFS共享存储
步骤一:配置NFS服务器
/content *(rw,no_root_squash)
exporting *:/content
步骤二:配置客户端
Export list for 192.168.1.254:
/content *
index.html
11
224248f0df5d795457c43c2a7dad0b7e5ec86abdc3f31d577e72f7929f020e01
11
Export list for 192.168.1.254:
/content *
00346dabec2c7a12958da4b7fee6551020249cdcb111ad6a1058352d2838742a
11
#ls /mnt/qq/
a.sh index.html
22
创建自定义网桥
步骤一:新建Docker网络模型
1)新建docker1网络模型
b447cacc0373631ff7c534f119047946be5c1498b5b2e31a31180c5ee6320ab5
2)使用自定义网桥(docker1)启动容器
5270cba305c06c3da3f56185b35dc059aabcf2884a12ef717d89a768360e5326
4b4a4e8bebfbcc18a0deaa17225f0b5dec8c6d5d52e513617849c9579b0b1813
3)使用默认网桥(docker0)启动容器
[root@docker1 ~]# docker run -itd docker.io/myos
63e99284b1a78d7d5fe17d25697424502054c59e0cc61b58c3070758fff1c35d
172.17.0.3
#docker inspect -f ‘{{.NetworkSettings.
IPAddress}}’ 63e
172.17.0.2
测试
大型架构及配置技术
Ansible基础:
Ansible可以实现:自动化部署app
自动化管理配置项
自动化持续交付
自动化(aws)云服务管理
优点:
只需要ssh和python即可使用
无客户端
Ansible功能强大,模块丰富
上手容易,门槛低
基于python开发,做二次开发更容易
使用公司比较多,社区活跃
Ansible依赖关系使用以下模块
①paramiko ②PyYAML ③Jinja2 ④httplib2 ⑤six
ansible安装部署
配置ip地址,用配置文件配置/etc/syscon~/network-scripts/ifcfg-eth0
#systemctl restart network
#ifconfig
配置yum客户端,管理节点ansible上配置
#vim /etc/yum.repos.d/local.repo
Ip写入到/etc/hosts中 ping通同步
装包:
批量部署证书文件,给所有主机部署密钥
1)创建密钥
[web]
web1
web2
[db]
db[1:2]
[other]
cache
2)给所有主机部署密钥
主机定义与分组
步骤二:在 inventory 文件中指定 key 的位置
[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"
Last login: Thu Sep 6 11:49:00 2018 from 192.168.1.40
步骤三:配置主机分组,自定义文件,在重新定义一个新的 ansible.cfg
1)自定义文件
[app1]
web1
db1
[app2]
web2
db2
[app:children]
app1
app2
[other]
cache
[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"
[defaults]
inventory = myhost
Host_key_checking = False
2)测试结果
web1 | SUCCESS => {
//切换到别的目录,测试失败
创建用户
步骤一:添加用户
步骤一:添加用户
对于太复杂的命令,可以写个脚本,然后用script模块执行
用脚本写,script模块执行
#!/bin/bash
id nb
if [ $? != 0 ];then
useradd wk
echo 123 | passwd --stdin wk
fi
nb
Wk
1)批量修改配置文件
批量修改所有机器的 dns 配置 /etc/resolv.conf
//查看/etc/resolv.conf
[root@ansible .ssh]# vim /etc/resolv.conf
nameserver 172.40.92.6
//查看有nameserver 172.40.92.6
批量同步所有机器的 yum 配置文件
dest=/etc/yum.repos.d/'
2) 给所有 db 主机开启 binlog 日志
log_bin = mysql-bin
binlog-format = mixed
拷贝一个mariadb的配置文件到ansible的管理主机上面,修改其文件
[mysqld]
log-bin=mysql-bin
binlog-format=mixed
...
步骤一:综合练习
1)使用copy模块同步my.cnf配置文件
2)使用 lineinfile 模块 修改 binlog 格式
类似sed的一种行编辑替换模块
path 目标文件文件
regexp 正则表达式,要修改的行
line 最终修改的结果
regexp="^binlog-format" line="binlog-format=row"'
3)使用 replace 模块修改 binlog 格式
类似sed的一种行编辑替换模块
path 目的文件
regexp 正则表达式
replace 替换后的结果
3)setup模块
filter 过滤指定的关键字(可以过滤到我们需要的信息)
cache | SUCCESS => {
"ansible_facts": {},
"changed": false
}
cache | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "CentOS"
},
"changed": false
}
大型架构及配置技术二
Ansible七种武器:
Ansible命令,用于执行临时性的工作,
Ansible-doc是ansible模块文档说明,针对每个模块都有详细说明及应用案例介绍,和linux系统man类似.
Ansible-console是用户提供的交互式工具,虚拟出来像shell一样使用内置各种命令.
Ansible-galaxy从github上下载管理roles的一款工具与python的pip类似
Ansible-playbook是日常应用中使用频率最高的命令,工作机制,playbook的编写实现批量管理
Ansible-vault主要用于配置文件加密,不随意让别人看到,可以加密
Ansible-pull有两种工作模式pull/push,默认使用push模式工作,他俩去反.
JSON介绍
Json是javascript对象表示法,基于文本独立与语言的轻量级数据交换格式.
分隔符限于单引号’’,小括号(),中括号[],大括号{},冒号:和逗号,
YAML介绍:
Playbook语法基础
Hosts:定义将要执行playbook的远程主机组
Vars:定义playbook运行时需要使用的变量
Tasks:定义将要在远程主机上执行的任务列表
Handlers:定义task执行完成以后需要调用的任务
playbook的ping脚本检测
---
- hosts: all
remote_user: root
tasks:
- ping:
用playbook安装Apache,修改端口,配置ServerName,修改主页,设置开机自启
---
- hosts: cache
remote_user: root
tasks:
- name: install one specific version of Apache
yum:
name: httpd //安装Apache
state: installed
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
line: 'Listen 8080' //修改端口为8080
- service:
name: httpd
enabled: yes //开机自启
state: restarted
- copy:
src: /root/index.html //修改主页,可以自己写个页面
dest: /var/www/html/index.html
hello world
Last login: Fri Sep 7 09:32:05 2018 from 192.168.1.40
变量练习
使用user模块添加用户,并修改密码
---
- hosts: cache
remote_user: root
vars:
username: xiaoming
tasks:
- name: create user "{{username}}"
user: group=wheel uid=1000 name={{username}}
- shell: echo 123456 | passwd --stdin xiaoming
- shell: chage -d 0 {{username}}
变量过滤器,创建一个用户,设置密码
---
- hosts: cache
remote_user: root
tasks:
- user:
name: lisi
group: root
password: "{{'123456' | password_hash('sha512')}}"
- shell: chage -d 0 lisi
定义一个变量创建用户
---
- hosts: cache
remote_user: root
vars:
user: zhangs
tasks:
- user:
name: "{{user}}"
group: root
password: "{{'123456' | password_hash('sha512')}}"
- shell: chage -d 0 "{{user}}"
handlers练习
步骤一:error
tags给指定的任务定义一个调用标识
1)tags 样例
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
2)调用方式
步骤三: handlers
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
notify:
- restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
编写playbook
步骤一:把系统负载太高的Apache服务停止
with_items标准循环
1)with_item创建多用户
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group=wheel password={{'123456' | password_hash('sha512')}} name={{item}}
with_items: ["nb", "dd", "plj", "lx"]
2)为不同用户定义不同组
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group={{item.group}} password={{'123456' | password_hash('sha512')}} name={{item.name}}
with_items:
- {name: 'nb', group: 'root'}
- {name: 'dd', group: 'root'}
- {name: 'plj', group: 'wheel'}
- {name: 'lx', group: 'wheel'}
debug检测
playbook: http.yml
//测试运行
#ansible-playbook http.yml --list-tasks
//显示要执行的工作
大型架构及配置技术三
ELK介绍
ELK分别代表:
Elasticsearch:负责日志检索和储存
Logstash:负责日志的手机和分析,处理
Kibana:负责日志的可视化
ES基础
安装一台ES服务器
设置主机名称和ip对应关系
解决依赖关系
安装软件包
修改配置文件
启动服务
检查服务
2)部署elasticsearch第一个节点
192.168.1.51 es1
192.168.1.52 es2
192.168.1.53 es3
192.168.1.54 es4
192.168.1.55 es5
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
SELinux status: disabled
17 cluster.name: myelk //配置集群名字
23 node.name: es1 //当前主机名称
54 network.host: 0.0.0.0 // 0.0.0.0(监听所有地址)
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]
//声明集群里的主机成员有谁,不需要全部写进去
ES集群安装配置
步骤一:安装elasticsearch和java-1.8.0-openjdk,同步配置文件
备注:在步骤一已经安装了一台elasticsearch,这里只需再准备四台即可
1)更改对应的主机名、 ip地址以及搭建yum源(以案例1为例子)
2)安装elasticsearch四台主机同样操作(以es2为例子)
3)同步配置/etc/hosts和/etc/elasticsearch/
elasticsearch.yml, 修改node.name字段(以es2为例子)
/etc/elasticsearch/elasticsearch.yml \
192.168.1.$i:/etc/elasticsearch/elasticsearch.yml; done
node.name: es2 //另外三台修改为对应es3,es4,es5
4)访问测试,如图-2所示:
可以访问61-65的任意一台主机, 集群的节点都是5台,若先启动的是es4或es5,这两个会自动成为各自的集群,解决办法,先启动集群里的es1或es2或es3其中的一台,或者把es4和es5重启,es4和es5会自动加进去
ES 集群验证:返回字段解析:
”status”: ”green“ 集群状态:绿色为正常、黄色表示有问题但不是很严重、红色表示严重故障
”number_of_nodes”: 5, 表示集群中节点的数量
$firefox http://192.168.1.51:9200/
_cluster/health?pretty
练习插件
步骤一:部署插件
插件装在哪一台机器上,只能在哪台机器上使用(这里安装在es5机器上面)
1)使用远程 uri 路径可以直接安装
ftp://192.168.1.254/elk/elasticsearch-head-master.zip //安装head插件
ftp://192.168.1.254/elk/elasticsearch-kopf-master.zip //安装kopf插件
ftp://192.168.1.254/elk/bigdesk-master.zip
//安装bigdesk插件
Installed plugins in /usr/share/elasticsearch/plugins:
- head
- kopf
- bigdesk
2)访问head插件,如图-4所示:
$firefox http://192.168.1.55:9200
/_plugin/head
3)访问kopf插件,如图-5所示:
$firefox http://192.168.1.55:9200
/_plugin/kopf
4)访问bigdesk插件,如图-6所示:
$ firefox http://192.168.1.55:9200
/_plugin/bigdesk
步骤二:使用head创建index
/index" -d ’
> {
> “settings”:{
> “index”:{
> “number_of_shards”:5, //分片数
> “number_of_replicas”:1 //副本数
> }
> }
> }’
{“acknowledged”:true}
插入,增加,删除查询数据
步骤一:增加数据
tedu/teacher/1" -d ‘{
“职业”:“诗人”,
“名字”:“李白”,
“称号”:“诗仙”,
“年代”:“唐”
}’
{"_index":“tedu”,"_type":“teacher”,"_id":“1”,"_version":1,"_shards":{“total”:2,“successful”:2,“failed”:0},“created”:true}
步骤二:修改数据
tedu/teacher/1" -d ‘{
“doc”:{
“年代”: “唐代”
}
}’
{"_index":“tedu”,"_type":“teacher”,"_id":“1”,"_version":3,"_shards":{“total”:2,“successful”:2,“failed”:0},“created”:false}
步骤三:查询数据
tedu/teacher/3?pretty"
{
“_index” : “tedu”,
“_type” : “teacher”,
“_id” : “3”,
“found” : false
}
步骤四:删除数据
/tedu/teacher/3?pretty"
{
“found” : false,
“_index” : “tedu”,
“_type” : “teacher”,
“_id” : “3”,
“_version” : 1,
“_shards” : {
“total” : 2,
“successful” : 2,
“failed” : 0
}
}
步骤五:删除索引
//删除索引
{"acknowledged":true}
{"acknowledged":true}
导入数据
步骤一:导入数据
使用POST方式批量导入数据,数据格式为json,url 编码使用data-binary导入含有index配置的json文件
$ scp /var/ftp/elk/*.gz [email protected]:
/root/
[root@kibana ~]# gzip -d logs.jsonl.gz
/_bulk" \
–data-binary @logs.jsonl
2)使用GET查询结果
/_mget?pretty’ -d ‘{
“docs”:[
{
“_index”:“shakespeare”,
“_type:”:“act”,
“_id”:0
},
{
“_index”:“shakespeare”,
“_type:”:“line”,
“_id”:0
},
{
“_index”:“tedu”,
“_type:”:“teacher”,
“_id”:25
}
]
}’