时间过的很快,距离毕业离校已经过去将近三个月,上班也一个快一个半月,每天都在不断的接触新的东西,新旧知识需要融合,每周公司新人需要进行周报总结,算是一次新旧知识融合,但是输出文档只对内开放,外网查阅不到,所以还是准备花些时间进行整理进行知识融合过程,顺便梳理下,整个学习周期,哪个环节可能出现了问题,哪些环节可以优化,不进行多层次的思考,发现不出问题,就算是多层次的思考,也会因为时机和场景等因素忽略掉部分问题。
整个输出文档按下面几个部分进行书写:
先介绍下入职的行业:云计算层次中的PAAS层相关的部署和开发工作
1. 做了什么
部门有新人培养计划,原本按部就班的按照培养计划来就是整个的学习计划,但是中途会兼顾项目的紧急程度而需要人手,所以即使是经验不足的情况下,也需要进行团队协作开发。
整个的培养计划大致分为这么几部分:
- 熟悉部门相关业务
- 针对裸服务器进行相关的PAAS部署
- 学习Docker 容器技术,K8s 容器集群管理工具
- 学习相关Ansible 自动化运维工具
- 学习内部集成的部署工具的整个业务流程和代码总结
- 测试开发工作:UT
- 接手相关开发工作
这一个月还是按照培养计划进行着,时间安排和任务也比较契合。占用时间比较大的一块是搭建PAAS环境搭建。
通过对裸服务的一些列安装部署,渐渐明白,类似于阿里云、腾讯云、百度云的产品底层大概是个什么样的。
简单从其中一个场景讲起:比如我们从阿里云官网购买云服务器。
各类厂商机房有大量高性能服务器,性能高,内存大,存储空间大。
从裸服务器开始讲起:
- 给裸服务器安装操作系统: 一般是centos
- 给服务器安装openstack: 一套开源的云计算管理平台
- 各服务器按照场景或者需求,组成服务器群,各服务器之间可以相互通信
- 其中一个服务器可以进行远程登入,进而对多台服务器管理,这个暂且叫做控制节点,其他可以称为计算节点
- 在openstack 基础上:可以将这些服务器群看成是一个更巨型的计算机(比单独的某个服务器性能、存储翻倍)
- 利用虚拟化技术可以将这个巨型的计算机分成创建多个租户(即你购买的云服务器),这些租户的容量,cpu,磁盘空间等可以根据需求进行划分,各租户可以绑定浮动IP,且各租户彼此之间不影响
- 租户可以创建,销毁,回收
一句话总结这个过程:将物理上独立的服务器群进行集合成"更大的计算机", 在更大的计算机的基础上利用虚拟化技术,又可以切分成相互独立的小型计算机,小型计算机可以创建、销毁、回收等操作。
即你购买云服务的背后是巨型服务器下划分的小型计算机,按照你购买的时限给予你一定的使用权,不续费之后,这个云服务器就被回收了。
当然公司内部对各种开源工具进行了进一步的封装,使得安装部署更为简便,我大概花了两周的时间从裸服务器搭建高可用性集群(其实熟悉了之后,一两天就能搞定)。
除开发相关业务之外,还接手部门的部分行政工作,主要原因是因为我是新人。
2. 学了什么
Linux
Linux 可能现在是开发人员的必备了,在学校期间相关的科研工作其实并没有太多的场景使用Linux,因为Linux 在服务器层面使用居多。
好,假如你现在也是没有具体场景的Linux初学者,想要学习Linux,有两个选择:
- 在个人PC机上Vmware 虚拟机安装Linux 或者本机Linux 操作系统的安装
- 购买主流厂商的云服务器:大概几十块钱一个月(主流厂商对学生有优惠价)
切换自己的开发环境或者日常办公环境为Linux. 经常使用,先不说了解内核,正常工作还是没啥问题的。
那主要的入门型的Linux 需要掌握哪些东西:记住一句话:Linux 一切皆文件
我总结了下大概这几个方面:
- 文件目录操作
常用的命令有:
mkdir file # 创建文件夹
rmdir file # 销毁空文件夹
mv # 移动文件夹或者文件
cp # 复制文件夹或者文件
ls # 查看文件内信息
cd # 切换目录
pwd# 显示当前目录
rm # 删除文件或者目录
- Linux 目录结构
安装好的Linux 操作系统存在几个特定的文件夹
root # 用户目录
boot # 挂载目录,引导类目录
etc # 配置目录
home # 普通用户目录
mnt # 默认光驱,软驱目录
bin # 命令目录
sbin # 带权限的命令目录
var # 异常信息目录
- 文件属性
Linux 是一个多用户系统,不同的用户有不同的权限,不同用户访问同一个文件有不同的权限
文件有9个属性(3+3+3 每个属组下有三个r,w,x 权限):
r:读
w:写
x:可执行
文件有属于哪个组:
U: user
G: groups
O: others
更改权限和属组:
chgrp # 更改文件属组
chown # 更改文件属主
chmod # 更改属性
- 文件操作
touch # 创建
rm # 销毁
vim/vi # 编辑
cp # 复制
mv # 一点或者重命名
cat # 查看
tac # 倒序查看
nl # 显示行号
tail # 显示末尾几行
head # 显示开头几行
wc # 统计行和字数
more # 一页一页显示
- 网络管理
ifconfig # 查看网络和网口信息
ping # 判断网段是否联通
traceroute/ tracepath # 路由跟踪
host # DNS查询
ifdown/ifup # 关闭和开启网口
netstat # 显示网络接口统计信息
- 磁盘管理
df #列出文件系统的整体磁盘使用量
du #检查磁盘空间使用量
fdisk #磁盘分区
- 用户管理
useradd # 添加
userdel # 删除
sudo user # 用户切换
passwd # 密码管理和更改
shell
vim 操作
查询命令帮助文档: man command --help
大概是分这个入门型的几类,回过头来看看Linux 相关书籍的目录,其实基础讲解也几乎是这些东西。
- 登入远程主机方式
工具: VNC, SecureCRT,Xshell,Putty
Docker
是什么
应用容器引擎,做什么
允许开发者将应用程序和配置等信息进行打包到容器中,移植到一个其他的生产环境下,可以正常运行。思想是
docker 原意是码头工人,码头有集装箱,几本的思想是将物件通过集装箱运输到其他地方,而保持物品的完整性,可以正常使用。1. 封装性 2. 一致性 3. 移植性
- 包含哪些
1. images : 镜像
2. 容器
3. 仓库
镜像和容器的关系就相当于程序设计中的类和实例的关系,仓库完成的任务对镜像的远程管理和存储。
- 基本的命令
docker images # 查询主机上镜像信息
docker ps # 查询主机上运行的容器
docker run ubuntu # 运行容器
docker stop sha # 停止容器运行
docker info # 查询容器整体信息
docker version # 版本信息
docker pull python # 从远程仓库拉去镜像,可以指定镜像仓库地址,国内比较好的是网易蜂巢
docker run --help # 查看run 指令的帮助文档
docker build -t name . # 制作镜像
Ansible
- 是什么
一套比较新的集成了众多优秀自动化运维的自动化运维工具.
实现的是在本机上完成远程主机上的自动化部署,命令执行,查询,部署等操作。
- 包含什么
1. ad-hoc # 执行命令的方式
2. playbook # 按剧本操作执行自动化部署等命令
这两者的区别是: 相当于ad-hoc 是敲shell 命令行的这种,playbook 则是编写yml 文件,在里面按顺序执行命令
- 框架组成
1. 主机清单
2. playbook
3. 连接工具
4. 模块
5. ansible core
- 各部件的作用
hosts 清单: 远程主机的集中管理,其实就是远程主机IP地址的集合
比如下面这个简易的hosts文件
[local]
10.62.99.17
[PAAS]
10.62.60.129
10.62.60.64
playbook: 主要是遵从yaml 标记语言顺序执行
---
- hosts: local
remote_user: root
tasks:
- name : print docker images
shell: docker images
连接工具: 本地主机和远程主机通过SSH协议连接,安全性能有保障
ssh 常用操作
1. 连接主机
ssh root@10.62.60.129
2. 生成秘钥
ssh-keygen -t rsa
3. 将本机公钥添加到远程主机上
ssh-copy-id -i ~/.ssh/id_rsa.pub rot@10.62.60.129
模块: 包含两个部分:内置和自己开发的模块
常用的模块:
copy # 复制文件
file # 文件操作
command # 命令
shell
ping
yum/apt # 安装模块
service # 服务模块
- 命令实例: ad-hoc
- m : 接模块名称
- a : 接模块需要添加的参数信息
1. 判断远程主机是否网络连通
ansible all -m ping
2. 判断远程主机docker服务是否开启
ansible PAAS -m service -a "name=docker state=started"
3. 查询远程主机镜像信息
ansible PAAS -m shell -a "docker images"
4. 把管理主机的某个文件移植到远程主机指定文件夹下
ansible PAAS -m copy -a "src= dest="
5. 查询命令带的key 参数有哪些
ansible-doc -s copy
3. 问题和改进
- 学习知识
入门简单,熟练使用需要靠时间,精通需要靠刻意练习
- 对标
学习经常会需要解决的问题是什么,所以经常需要对标,即:写明需要解决的问题,对照你现在查询或者正在解决的方式是不是向着问题被解决的方向进行着...
- 对齐
同时间段入职的人培养计划依照的是团队的需求进行的,但其实整体需要掌握的技能是差不多的,所以在学有余力的情况下,参照别人的培养计划,填补相应的知识
- 早准备
遇到的问题,其实有很多东西难以彻底搞清楚, 想搞清楚往往发现会是一个庞大的体系。好,为解决这个问题,多问为什么,比如:是什么; 是在解决什么问题; 怎么做?
- 反复确认
反复确认不是问相同的问题,而是从问题的不同方面确定你听到的和领导表达的是没有差错的。
- 记录
第一,你没经验
第二,你接收信息能力弱
第三,你需要信息整合能力