docker安装jenkins
docker安装Jenkins
Jenkins介绍
开源的java语言开发持续集成工具,支持CI/CD、易于安装部署。
安装方式:可通过yum安装、或下载war包以及通过docker容器等快速安装部署,可方便web界面配置管理。
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
补习一下:普通yum安装方式 (部署效率-》中,可能有卸载残留)
Linux时关闭selinux:setenforce 0
永久关闭,可以修改配置文件/etc/selinux/config,将其中SELINUX设置为disabled,如下,
[root@localhost ~]# cat /etc/selinux/config
SELINUX=disabled
[root@localhost ~]# sestatus
检查防火墙是否开放了8080和50000端口。
附Centos 7开放端口相关命令:
查看已经开放的端口:firewall-cmd --list-ports
开启端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重启防火墙:
firewall-cmd --reload #重新载入firewall配置,使配置生效
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
安装openjdk1.8:
yum install java-1.8.0-openjdk -y
安装git:
yum install -y git
安装jenkins:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
cat /etc/yum.repos.d/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y
更新jenkins
yum update jenkins
启动jenkins
systemctl start jenkins
systemctl status jenkins
# admin密码,初始化安装时会用到
less /var/log/jenkins/jenkins.log
或者:
cat /var/lib/jenkins/secrets/initialAdminPassword
卸载jenkins
在某次自动安装插件时异常了一大片,刷新也没出现下一步,等待许久无果,删了重装
1.rpm -e jenkins
2.会有一些残留的文件分散在各地
find / -iname jenkins | xargs -n 1000 rm -rf
rpm安装方式:(部署效率-》中,可能有卸载残留)
1.直接下载 rpm 安装
各个版本地址 https://pkg.jenkins.io/
wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm
rpm -ivh jenkins-2.156-1.1.noarch.rpm
2.配置
vim /etc/sysconfig/jenkins
#监听端口
JENKINS_PORT="8080"
3.配置权限
为了不因为权限出现各种问题,这里直接使用root
修改用户为root
vim /etc/sysconfig/jenkins
#修改配置$JENKINS_USER="root"
修改目录权限:
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
启动:
systemctl start jenkins
systemctl status jenkins
根据这种方式可以自己实现一个Dockerfile。
FROM openjdk:8-jdk-stretch # yum install java-1.8.0-openjdk -y ARG user=jenkins ARG group=jenkins ARG uid=1000 ARG gid=1000 ARG http_port=8080 ARG agent_port=50000 ARG JENKINS_HOME=/var/jenkins_home RUN mkdir -p $JENKINS_HOME \ && chown ${uid}:${gid} $JENKINS_HOME \ && groupadd -g ${gid} ${group} \ && useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user} war文件现在 wget https://repo.jenkins-ci.org/public/org/jenkins-ci/main/jenkins-war/2.121.1/jenkins-war-2.121.1.war
# 省略 ......
找了个示例:
FROM centos:7 MAINTAINER abc 123456@qq.com RUN yum install wget -y ADD apache-tomcat-9.0.10.tar.gz /opt/ ADD apache-ant-1.10.5-bin.tar.gz /opt/ ADD jdk-8u181-linux-x64.tar.gz /opt/ ADD apache-maven-3.5.4-bin.tar.gz /opt/ ENV JAVA_HOME /opt/jdk1.8.0_181 ENV ANT_HOME /opt/apache-ant-1.10.5 ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV MAVEN_HOME /opt/apache-maven-3.5.4 ENV JENKINS_HOME /var/jenkins_home ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8 ENV PATH $JAVA_HOME/bin:$ANT_HOME/bin:$PATH:$MAVEN_HOME/bin:$PATH:$JENKINS_HOME RUN yum install -y git CMD /opt/apache-tomcat-9.0.10/bin/catalina.sh run RUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # expose memcached port EXPOSE 8080
EXPOSE 50000
直接war包安装方式(需要安装jdk1.8):(部署效率-》中,可能有卸载残留)
http://updates.jenkins-ci.org/download/war/
2.78
将jenkins.war放到/usr/local中
执行java -jar httpPort=8080 jenkins.war,启动jenkins服务器
访问8080端口,可以看到jenkins的界面,需要输入秘钥
在控制台可以找到秘钥,也可以再/root/.jenkins/secrets/initialAdminPassword中找到
复制秘钥,进入界面
install suggested plugins,安装推荐的插件
创建一个管理员账户,save and finish
一条 docker 命令安装方式:(部署效率-》快,数据在数据卷中,基本上无残留,对docker掌握的技术要求高)
1、创建一个jenkins目录(用于备份数据)
# mkdir -p /home/jenkins_home
由于jenkins的官方的镜像的Dockerfile文件,将要挂载的文件夹的用户的uid和gid必需是1000,所以要更改文件夹的属主和属组,下面这个方法最直接。
创建用户: useradd 1000
设置密码: passwd 1000
组的添加: groupadd 1000
chown -R 1000:1000 /home/jenkins_home
检查一些dockerhub的jenkins版本(请求API地址,对响应结果进行分页显示):
我们通过浏览器访问:https://hub.docker.com 可以参考对应镜像文件的版本,但是在linux 是通过docker search jenkins是看不出来对应的版本信息的。
可以通过调用dockerhub的api接口:
https://registry.hub.docker.com/v1/repositories/{image镜像名称}/tags
示例:
curl -s https://registry.hub.docker.com/v1/repositories/jenkins/tags | awk -F"," 'gsub("},","}\n")' | more -10
说明:-10 每次显示10行
可以做成shell脚本,命令的位置:/bin,/usr/bin目录下,默认都是全体用户使用,或者/sbin,/usr/sbin,默认root用户使用。
授权可执行:chmod 777 docker-search-tags
根据上面的知识点得知,需要手动移动到/bin目录下:
mv docker-search-tags /bin/
可以使用which,whereis查找命令位置,详细点信息,通过man和info命令。
[root@master bin]# which docker-search-tags
/usr/bin/docker-search-tags [root@master bin]# whereis docker-search-tags
docker-search-tags: /usr/bin/docker-search-tags [root@master ~]# man docker-search-tags
略
[root@master ~]# info docker-search-tags
略
启动jenkins容器:
docker run -p 8080:8080 -p 50000:50000 -d --name jenkins \
--privileged=true \
-v /home/jenkins_home:/var/jenkins_home -u 0 \
jenkins/jenkins:lts
说明:
8080是jenkins默认访问端口
50000端口用于slave集群间通信
--privileged=true 将CentOS7中的selinux禁掉了,参数给容器加特权。那么可以检查一下selinux状态,开启的情况下会导致一些服务安装、使用不成功。
-u 参数是使用宿主机的权限uid操作数据卷的文件:如果存在权限问题 就需要添加 -u参数 或者手动将文件 改为 用户和组为1000
换一个镜像:
docker run -d --restart unless-stopped --name jenkins \
-p 8080:8080 -p 50000:50000 \
-v /docker_volume/jenkins_home:/var/jenkins_home \
jenkins/jenkins:alpine
访问jenkins地址 http:<ip或者域名>:8080,进行安装初始化。
查看镜像:
docker inspect jenkins/jenkins:alpine
密码查看:
初次启动的时候,可以通过下面命令查看控制台输出的密码,通过这个密码登录系统。
docker logs -f jenkins
因为我们在部署jenkins服务时,在数据卷选项中主机目录映射到容器内目录。
所以应该到我们的主机映射目录去查看,宿主机中执行如下命令得到密码:
cat /home/jenkins_home/secrets/initialAdminPassword
或者:
sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
或者通过进入容器:
docker exec -it jenkins /bin/bash
然后查看密码:
cat /var/jenkins_home/secrets/initialAdminPassword
发现文件的权限不够:需要设置权限后重新启动容器。
chmod -R 777 /home/jenkins_home
docker restart jenkins
或者:在启动容器时加上 -u 0参数。这参数的意思是覆盖容器中内置的帐号,使用外部传入的用户ID作为默认用户,这里传入0代表的是root帐号Id。
权限分析:
Jenkins镜像内部使用的用户是jenkins,但是我们启动容器时的用户是root,导致没有权限操作内部目录,我们可以稍微改一下上面的命令:
查看容器用户
$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id"
jenkins
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
查看容器"/var/jenkins_home"目录权限
$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home"
total 20
drwxr-xr-x 2 jenkins jenkins 4096 Nov 22 07:43 .
drwxr-xr-x 26 root root 4096 Nov 8 21:55 ..
-rw-r--r-- 1 jenkins jenkins 220 Nov 12 2014 .bash_logout
-rw-r--r-- 1 jenkins jenkins 3515 Nov 12 2014 .bashrc
-rw-r--r-- 1 jenkins jenkins 675 Nov 12 2014 .profile
插件能够安装成功,就说明安装很成功了。
还有很多其他方式,比较麻烦,如:手动配置java环境,通过war包启动方式,这里不采用。手动配置的方式好处就是版本任意,docker方式版本可能不是最新的。
还有人用的这个镜像文件:这个版本安装时,安装插件存在安装失败的情况
docker run -it -d -p 8080:8080 -p 50000:50000 \
--name jenkins --privileged=true -u 0 \
-v /home/jenkins_home:/var/jenkins_home \
jenkins
我也挺纳闷,最新版本这么才是 2.60.3,正式版都2.100多了
恭喜你中大奖了 ,本人亲测好几遍,默认插件安装不上,有人说时候自己单独安装,强迫症的我,看着就不爽,抓狂抓狂~~~
jenkins常用的插件:
以下这两个网站是Jenkins所有的插件及说明
Jenkins Plugins https://plugins.jenkins.io
Jinkins Plugins Wiki https://wiki.jenkins.io
git插件 :默认
Ant插件 :基本没用过
svn插件 :现在不怎么用了,都用git了
maven插件 :手动安装/自定义安装
github插件 :自定义安装
gitLib插件 :自定义安装
SSH插件:默认
1、Publish Over SSH Plugin:
作用:通过SSH拷贝文件到目标机器,同时可以在目标机器上执行脚本
2、Email Extension Plugin
链接:https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin
作用:用于替换Jenkins自带的邮件发送,更加的强大
3、Role-based Authorization Strategy
链接:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin
作用:基于角色的的用户权限控制
Rancher 部署服务来完成jenkins的安装:
Rancher提供了在生产环境中使用的企业级管理Docker和Kubernetes的全栈化容器部署与管理平台。
Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。
Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。
Rancher包含了当前全部主流的编排调度引擎,例如Docker Swarm, Kubernetes和Mesos。
同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用。
目前Rancher支持如下四种:Cattle/Kubernetes/Mesos/Swarm, Cattle是Rancher自己内置的缺省的编排环境,缺省的Default的即为Cattle类型的。
RANCHER服务器标签
Rancher服务器有2个不同的标签。对于每个主要版本标记,我们将提供特定版本的文档。
rancher/server:latest
tag将是我们最新的开发版本。这些构建将通过CI自动化框架进行验证。这些版本不适用于生产中的部署。rancher/server:stable
标签将是我们最新的稳定版本。此标记是我们建议用于生产的版本。
请不要使用带rc{n}
后缀的任何版本。这些rc
构建适用于Rancher团队测试构建。
先从镜像中心下载rancher镜像:
参考文档1.X版本:https://rancher.com/docs/rancher/v1.6/en/quick-start-guide/
如果是1.x系列的,镜像名为rancher/server,而2.x是rancher/rancher,我们使用2.x版本的,所以,执行如下命令即可:
Rancher部署
单容器部署(使用容器内部自带的MySQL数据库)
在安装和部署了Docker容器环境的Linux服务器上,使用一个简单的命令就可以启动一个单实例的Rancher。
# 1.x版本
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable
查看日志:
$ sudo docker logs -f <CONTAINER_ID>
Rancher服务器启动只需几分钟。日志显示时.... Startup Succeeded, Listening on port...
,Rancher UI已启动并正在运行。
配置完成后,这行日志几乎就会立即生效。此输出后可能还有其他日志,因此请不要认为它将在初始化时成为日志的最后一行。
# 2.x版本
2.X版本的测试命令:
$ sudo docker run -d --name rancher
--restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /var/lib/rancher/:/var/lib/rancher/ \
rancher/rancher:stable
规矩点的命令:
$
mkdir -
p /docker_volume/rancher_home/rancher
$
mkdir -
p /docker_volume/rancher_home/auditlog
$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 \
-v /docker_volume/rancher_home/rancher:/var/lib/rancher \
-v /docker_volume/rancher_home/auditlog:/var/log/auditlog \
--name rancher rancher/rancher:stable
Rancher 2.0部署与使用过程中常见的问题及其解决方法:
1、部署Rancher 2.0的环境需求
- 推荐使用的操作系统
- 推荐的硬件配置
- 支持的docker版本
- 防火墙需要允许通过的端口
2、部署过程中的常见问题及排查思路
- 环境信息残留
- openssh版本过低问题
- nodeport端口只有一台机器能访问
- 部署使用calico网络部署环境失败问题
- 部署时主机not found问题
- web页面kubectl闪退问题
- 非worker节点仍然被调度pod问题
- it is a not share mount 问题
- networkredy=false 问题
- 集群 unavailable
1.x版本 单容器部署(使用外部MySQL数据库)
除了使用内部的数据库,你可以启动一个Rancher Server并使用一个外部的数据库。启动命令与之前一样,但添加了一些额外的参数去说明如何连接你的外部数据库。
使用外部数据库,需要提前创建数据库名和数据库用户,Rancher服务启动后会自动创建Rancher管理平台需要的数据库表。以下为相关的建库脚本, 可供参考:
> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';
启动一个Rancher连接一个外部数据库,你需要在启动容器的命令中添加额外参数。
$ sudo docker run -d --restart=unless-stopped -p 8090:8080 rancher/server \
--db-host 192.168.1.101 --db-port 3306 --db-user username --db-pass password --db-name cattle
大部分的输入参数都有默认值并且是可选的,只有MySQL数据库主机地址配置项是必须配置的。
--db-host 数据库主机名或IP地址
--db-port 数据库服务端口(默认为:3306)
--db-user 数据库用户名(默认为:cattle)
--db-pass 数据库用户密码(默认为:cattle)
--db-name 数据库名(默认为:cattle)
在高可用(HA)的模式下运行Rancher Server与单容器部署方式一样简单,但需要暴露一个额外的服务端口用于实现集群节点之间的通讯。
需要添加额外的参数到启动命令中,并且运行一个外部的负载均衡就可以了。
HA 节点:
9345
,8080
端口需要在各个节点之间能够互相访问
至少1GB内存
MySQL数据库
至少1GB内存
每个Rancher Server节点需要50个连接 (例如:3个节点的Rancher则需要至少150个连接)
大规模部署建议
- 每一个Rancher Server节点需要有4GB 或者 8GB的堆空间,意味着需要8GB 或者 16GB内存
- MySQL数据库需要有高性能磁盘
- 对于一个完整的HA,建议使用一个有备份的MySQL数据库。另一种选择则是使用MySQL集群(Galera)。
在每个需要加入Rancher Server HA集群的节点上,运行以下命令:
$ docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 \
rancher/server --db-host 192.168.1.101 --db-port 3306 \
--db-user Cattle --db-pass cattle --db-name cattle \
--advertise-address <IP_of_the_Node>
在每个节点上,<IP_of_the_Node>
需要在每个节点上唯一,因为这个IP会被添加到HA的设置中。
如果你修改了 -p 8080:8080
并在host上暴露了一个不一样的端口,你需要添加 --advertise-http-port <host_port>
参数到命令中, 如下所示:
$ docker run -d --restart=unless-stopped -p 8000:8080 -p 9345:9345 \
rancher/server --db-host 192.168.1.101 --db-port 3306 \
--db-user Cattle --db-pass cattle --db-name cattle \
--advertise-address 192.168.1.102 --advertise-http-port 8000
初始配置
访问rancher的管理web页面:https://192.168.1.101:8080
添加agant 节点
https://blog.51cto.com/13043516/2299949
切换为中文:单击“ 基础架构”,单击“ 添加主机”,Rancher将提示您选择主机注册URL。此URL是Rancher服务器运行的位置,必须可以从要添加的所有主机访问。这在Rancher服务器将通过NAT防火墙或负载平衡器暴露给Internet的安装中非常有用。如果您的主机具有私有或本地IP地址192.168.*.*
,Rancher将打印一条警告,要求您确保主机确实可以访问该URL。
由于我们正在添加同时运行Rancher服务器的主机,因此我们需要添加应该用于主机的公共IP。其中一个选项提供了输入此IP的功能,该IP会自动使用环境变量更新自定义命令。
在运行Rancher服务器的主机中运行此命令。当您在Rancher UI上单击“ 关闭”时,您将被定向回“ 基础架构” - >“ 主机”视图。几分钟后,主机将自动出现。
添加主机的意思(物理机/云主机ecs节点),就是添加主机到集群。
拷贝出来在需要加入集群的,可以相互访问的主机节点 执行该命令:
sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.1.110:8090/v1/scripts/AB0EDE972891EE3B4F8E:1546214400000:PGj1EDD8P46wtSzI5IzE3hhP8
每个新添加的主机,都去http://192.168.1.110:8090这个节点进行注册。
点击 基础架构 ---》主机,进入主机页面,发现会自动下载很多个容器,
我们可以通过docker image ls(docker images)和docker container ls(docker ps -a)看看刚才集群创建过程中都为我们拉取了哪些镜像和启动了哪些容器:
创建nginx容器:
可能会创建失败,一般情况是端口被占用,docker-proxy会占用8080端口,暴露端口改成8000
部署tomcat8镜像:
通过另外的一种方式是通过rancher应用商店安装jenkins
左侧是jenkins-ci server,第三个是swam-plugin,这两个可以组成一个master/slave模式的集群。
安装单机版时,只需呀安装第一个插件,
容器内:
/var/jenkins_home/secrets/initialAdminPassword
宿主机:
/var/lib/docker/jenkins-ci/secrets/initialAdminPassword
访问 IP:8066
输入密码
再来理解一下应用和服务和容器之间的关系
每个用户下面有多个应用,一个应用下面有多个服务,一个服务下面对应多个容器。
删除jenkins-ci时,删除的是应用,如果删除的服务,那么下次安装时会失败。
2.0.x版本是安装页面如下:
注:因为Rancher是自动使用的自签名证书,在第一次登录会提示安全授信问题,信任即可
点开红框,在点开继续前往
修改密码,默认密码admin ,这里改为123456
设置服务器地址:默认就可以
进入主页,修改为中文简体语言
首先需要添加一个集群,这里选择CUSTOM自定义集群,集群的名称可自定义:
配置主机的及角色地址,这个主机也就是rancher agent:按照1的描述,每个集群都必须包含下面的三个选项至少都存在一个,而当前就一个节点作为1个集群,所以需要三个都勾选上。
复制2的内容,在192.168.1.101的linux命令行执行,如果是多个节点,就在需要添加的节点执行。agant可以理解为注册中心。每个节点都执行一遍,那不就是向注册中心注册数据么。
下载agant需要等个几分钟。
注册成功,页面会显示一个提示,点击完成。
此时我们的集群处于等待注册的状态,点击主机下的数字可以查看主机信息:
主机信息如下,这会主机处于注册中的状态:
基本上就这个意思,2.x很多坑,先本研究了,有时间在搞搞~~~
清理容器
$ docker rm -f $(docker ps -a -q)
$ docker stop $(docker ps -a -q) && docker system prune --all --force
====================================================================================================================================================
操作系统分类
全功能操作系统:常见有 Ubuntu、CentOS
这类操作系统的功能无疑是最齐全的。如果某个应用程序需要某个特定的特性或功能,全功能操作系统或许都能满足它。
不过这种“齐全”也是有一定代价的:在存储、内存和CPU资源方面,这类操作系统对系统的要求最高。
同时,这些功能还会增加操作系统的攻击面,为潜在的攻击者提供更多的角落和缝隙进行攻击。
不论是价格成本还是安全风险,如果操作系统的这些功能都是应用程序需要的,那么这些成本也就很容易承担了;但如果只需要少量功能,相较之下性价比就略低。
最适合的用例,是企业需要在单个OS实例之上的容器中部署多个不同应用程序。在这些情况下,操作系统的功能多而全,可能是支持应用程序最经济的方式。
精简的操作系统:常见有BusyBox和Alpine Linux
容器,尽可能地将少而精的功能汇集在一起,创建完整的应用程序。
BusyBox是因为是单一可执行文件而体积很小, 而Alpine Linux则是使用强化的内核,为其前身BusyBox的紧凑、简单的目标增加安全性。
容器操作系统:常见有 Rancher OS和Container Linux
开箱即用,拥有内置的自动化和容器编排工具。它们被设计和构建为“主机”操作系统,用于托管Alpine和BusyBox等容器操作系统的操作系统。
容器操作系统的特征在于,它不仅仅是一个支持容器的软件,而是使用容器技术部署的软件。“容器一直向下”的体系结构意味部署的自定义程序更高、更灵活,从而比传统的OS部署复杂得多。
另一方面,对于早期转向容器的组织,或者对于那些不一定适合容器架构的应用程序部署中,“全容器”架构并非那么容易。
RancherOS中的每个进程都在Docker管理的单独容器中运行。对Docker的优化和依赖让RancherOS可以做到体积极小、启动极快。
除了基本的性能优势之外,RancherOS系统服务由Docker Compose定义和配置。这种依赖意味着只加载和部署应用程序所需的服务,从而进一步加速和简化部署。
通过与cloud-init集成,再次简化了部署,从而实现了广泛和高速的自动配置和部署。
三大类可用于容器部署操作系统,开发团队应该选择哪种?
如果某个特定服务器的唯一目的是托管容器,那么像RancherOS和Container Linux这样的容器操作系统非常适合。
这类操作系统的自动化、部署速度和一致的容器架构,使其成为那些希望优化容器托管环境的人的最佳选择。
如果要同时考虑容器和非容器应用程序,那么毫无疑问,像Ubuntu和CentOS这样的传统Linux部署也可以用作容器平台。
它们的体系结构、实用程序、功能列表将使它们启动速度变慢并且需要更多系统资源,但如果启动速度和最小资源消耗不是关键考虑因素,那么这类操作系统是不错的选择。
位于上述二者之间的BusyBox和Alpine Linux这样的极精简操作系统。
单从容器部署的角度出发,这类操作系统可以满足需求。不过如果企业存在资源受限的非容器应用程序(例如物联网的应用程序),这些应用程序也应该作为整个应用程序环境的一部分被考虑进来。
了解不同类型操作系统的功能和限制之间的差异,对于任何用于生产的OS平台的讨论都至关重要。
使用现代操作系统,真正的考量不应该满足于哪个操作系统可以工作,而是需要围绕哪个操作系统能最有效和最高效地完成工作。
====================================================================================================================
具体介绍rancherOS
RancherOS,目标是成为一个运行Docker容器的最小linux发行版,体积只有30M左右,精简的很不错。
RancherOS中的所有东西都是Docker容器。我们通过启动两个Docker实例来实现这一目标。
RancherOS中有两个Docker守护进程:System Docker容器,Docker容器:
一个是我们所谓的System Docker,它是系统上的第一个进程。所有其他系统服务,如ntpd,syslog和console,都在此Docker容器中运行。
System Docker运行一个名为Docker的特殊容器,PID为1,这是另一个负责管理所有用户容器的Docker守护程序。
从控制台以用户身份启动的任何容器都将在此Docker中运行。这会创建与System Docker容器的隔离,并确保正常的用户命令不会影响系统服务。
我们创建这种分离不仅是为了安全性,还为了确保命令docker rm -f $(docker ps -qa)不会删除整个操作系统。
其实RancherOS技术并不是多么厉害,很多linux发行版都很小,但是它的思想,它的观念是厉害的。
说到这里不得不提CoreOS,CoreOS的目标也是为了运行Docker,但是RancherOS要比CoreOS的设计思想更进一步。
RancherOS最初希望能直接在Linux Kernel上运行Docker,把所有用户空间Linux服务分发为Docker容器。
这使得部署一个服务变得相当简单,对于运维人员来说,需要就拿来,不需要就去掉,招之即来挥之即去。
视频教程:https://rancher.com/videos-and-podcasts/
这是官网文档:http://docs.rancher.com/os/
这是官网Github地址:https://github.com/rancher/os
快速入门:https://rancher.com/docs/os/v1.x/en/installation/running-rancheros/workstation/boot-from-iso/
安装到磁盘的官方文档:https://rancher.com/docs/os/v1.x/en/installation/running-rancheros/server/install-to-disk/
v1.5.0版本的initrd已经采用了gzip格式,文件体积有所增大,但是启动速度有了质的飞跃。 同时我们也优化了system-docker的镜像加载和cloud-init的启动,对启动速度进行了深度优化。
安装RancherOS:
RancherOS可以使用Live版进行免安装体验,本文记述如何安装RancherOS到硬盘。
RancherOS ISO文件可用于在KVM,VMware,VirtualBox或裸机服务器上创建新的RancherOS安装。您可以rancheros.iso
从我们的发布页面下载该文件。
将RancherOS安装到一台虚拟机中,并通过SSH进行远程管理RancherOS主机。
然后尝试运行RancherOS系统特有的一些管理命令,比如查看系统可用版本、查看Docker可用版本,切换Docker版本、设置Docker镜像加速器、运行容器等等。
系统要求:1.5.x版本,内存在1GB以上,硬盘没有限制,一般5G足够使用,CPU配置1G~2G,网络模式改成桥接网卡,EFI启动不要勾选。
登录账号:rancher 密码:rancher
环境配置:
Win10+VirtualBox-5 用于创建2台虚拟机(RancherOS、Ubuntu16.04)
RancherOS 1台 192.168.1.200 安装到虚拟机硬盘中
Ubuntu16.04 1台 192.168.1.100 创建秘钥,远程ssh操作RancherOS
主要过程: 1、在Ubuntu机器上,使用ssh-keygen生成秘钥对; 2、编辑cloud-config.yml配置文件,放入ssh公钥和IP地址信息; 3、在RancherOS主机上使用scp命令,将Ubuntu上的配置文件拷贝到机器中; 4、执行sudo ros install命令,指定配置文件和磁盘,安装RancherOS系统到硬盘中; 5、重启RancherOS主机,并在ubuntu机器上使用私钥ssh登录到RancherOS进行管理; 6、尝试查看系统可用版本、切换Docker版本、设置镜像加速器、运行容器等基本操作;
1、先创建一台普通的虚拟机,安装linux普通操作系统(主要是用于操作rancherOS系统的客户端),使用ssh-keygen生成秘钥对,三次回车,使用默认文件名
ssh-keygen -t rsa
生成的公钥和私钥文件名、位置及内容
2、编辑cloud-config.yml配置文件,设置即将要安装的RancherOS主机的网络相关信息,复制粘贴方式加入公钥
rancher: network: interfaces: eth0: address: 192.168.1.100/24 gateway: 192.168.1.1 mtu: 1500 dhcp: false ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0rUXXb3mIX1Zt0U6GMGchehCp7nIo75jENxYWgg0hQCQ9+BMOmN1Dtl/UsewNRRO3X4OajJ0M4fU0B8bWXsG1nv9cSESzoozh6AXo0ZxbZtp7Kg3aD41ncF1IW4pa3kAVEmgjxFc3VvYLhnF27zWxEmbqqulbBD7n6ARSJijbW/v0sNVncd14K/B5eYdIZIbzdAWpvbYI5Eug42G+CJlZo4q/Qa9XBeGDQAU+aHIZj+fkj4U8t5DFAI6ApUa5h4P5/ddBTNDj7f/iyXTOgJQrtnITSdd565+11S6ERZSWt88C7/OfspDZZx9gFy2lIxI46TTdMkfnlqbEpQbC1KzFw== rsa 2048-041018
3、创建新的一台虚拟机,设置光驱为rancheros.iso文件
默认选第一个,然后下一步。
自动登录默认用户:rancher/rancher
- 下载RancherOS的ISO镜像:rancheros.iso,引导镜像1.5.x版本127MB大小。
- 配置好虚拟机,启动RancherOS,使用默认启动项
- 在系统内部配置DHCP时,RancherOS的eth0会自动获取IP地址
- 在RancherOS主机上,使用scp命令将远程的客户端的主机上的cloud-config.yml文件拷贝到RancherOS机器上
$ sudo scp root@192.168.1.101:/root/cloud-config.yml /var/lib/rancher/conf
$ sudo scp root@192.168.1.101:/root/cloud-config.yml .
- 使用fdisk -l 查看本地磁盘的名称及大小
- sudo fdisk -l | grep Disk
- 使用ros install命令,安装RancherOS系统到本地硬盘中
sudo ros install -c cloud-config.yml -d /dev/sda
一直按y确定。
4、移除RancherOS虚拟机光驱,以便从硬盘启动系统
重新启动虚机,从硬盘启动RancherOS系统,IP地址已是配置文件中的IP
5、在客户端的linux机器上,使用私钥文件远程ssh登录到RancherOS机器上,这里有可能登录不上去的,原因是网络没有设置为桥接模式,NAT模式有可能不行。
ssh -i /root/.ssh/id_rsa rancher@192.168.1.200
或者
ssh rancher@192.168.1.200
6、执行其他操作-查看ros版本-可用版本-docker版本-可用docker引擎的版本
# 查看rancherOS当前的系统版本
$ sudo ros -v
#查看存在的系统版本列表
$ sudo ros os list
#查看当前的docker版本
$ sudo docker -v
$ sudo docker version
#查看存在的docker版本列表
$ sudo ros engine list
7、切换到docker-17.03.1-ce 版本,再次查看Docker版本已是新切换的docker-17.03.1-ce 版本
sudo ros engine switch docker-17.03.1-ce
8、配置镜像加速器
如果速度慢,可以设置国内的镜像 'https://nj9kfpre.mirror.aliyuncs.com'
手工设置 mirror,加快下载速度:
# RancherOS内设置registry mirror
$ sudo ros config set rancher.docker.registry-mirror "https://s06nkgus.mirror.aliyuncs.com"
$ sudo ros config set rancher.docker.registry_mirror https://registry.docker-cn.com
$ sudo system-docker restart docker
15,通过命令查看这个 container 的运行状况: sudo docker logs -f rancher
注意,docker 容器的启动需要时间,需要观察到这个容器启动完毕后才能 reboot 系统,否则再启动后容易出错
sudo reboot
sudo docker info
再次执行 sudo docker info。多了个仓库地址:
测试镜像下载时间:
time sudo docker pull nginx
100m用了54秒,约500m用了21秒
注意: system-docker只能由root用户使用,因此sudo每当您想要与System Docker交互时都必须使用该命令。
RancherOS默认是打开DHCP客户端Docker进程的,所以是能自动获取IP地址的,也可以像下面一样配置静态IP
#先查看自己网络设备名称 ip link #添加IP,注意将IP和eth0换成自己的 sudo ip addr add 192.168.1.101/24 dev eth0 #添加默认网关,注意将IP换成自己的 sudo route add default gw 192.168.1.1 #添加DNS,注意将IP换成自己的 sudo vi /etc/resolv.conf #打开resolv.conf文件后添加 nameserver 192.168.1.1 #保存退出
=====================================================================================================================================================
注册网易云账号,管理镜像仓库
https://www.163yun.com
需要实名认证和企业认证,个人用户目前不具备条件的
个人建议使用阿里云的仓库(支持个人账户):学习地址(地址有视频教程):https://www.aliyun.com/product/containerservice
阿里云镜像仓库地址:登录阿里云账户之后访问 https://cr.console.aliyun.com
ubuntu和centos加速器是一样的
/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://w3m66zhu.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
可以创建k8s集群和swarm集群
卡里要大于100元。
awk分字段内容的替换
1 简单例子
awk的内置字符串函数sub和gsub的区别:
sub匹配第一次出现的符合模式的字符串,相当于 sed 's//'
sub函数匹配指定域/记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的时候。
格式如下:
sub (regular expression, substitution string)
sub (regular expression, substitution string, target string)
gsub匹配所有的符合模式的字符串,相当于 sed 's//g'
gsub函数作用跟sub类似,但它会替换所有匹配值
格式如下:
gsub (regular expression, substitution string)
gsub (regular expression, substitution string, target string)
另外, 只有针对字段进行替换的时候 ,指定0FS变量才有用, 如果不指定字段,对整条记录进行替换,不需要指定OFS。
操作1:将第一个“/”替换成空格,后面的“/”不变
$ echo "mm/dd,2018/01/22 00:00:01" | awk -F"," 'sub("/"," ")'
mm dd,2018/01/22 00:00:01
操作2:将所有“/”替换成空格
$ echo "mm/dd,2018/01/22 00:00:01" | awk -F"," 'gsub("/"," ")'
mm dd,2018 01 22 00:00:01
操作3:将第2和第3个“/”替换成空格,第1个“/”不变
$ echo "mm/dd,2018/01/22 00:00:01" | awk -F"," 'gsub("/"," ",$2)'
mm/dd 2018 01 22 00:00:01
问题来了,dd后面的“,”分隔符没有了,因为这里的替换是针对字段进行的,字段内容发生了变化,意味着需要重新设定输出分隔符OFS。
$ echo "mm/dd,2018/01/22 00:00:01" | awk -F"," -v OFS="," 'gsub("/"," ",$2)'
mm/dd,2018 01 22 00:00:01
操作4:如果只需第2个“/”替换成空格,第1个和第3个“/”不变
$ echo "mm/dd,2018/01/22 00:00:01" | awk -F"," -v OFS="," 'sub("/"," ",$2)'
mm/dd,2018 01/22 00:00:01
资料参考:
https://blog.csdn.net/shenhonglei1234/article/details/86307437
https://blog.51cto.com/zero01/2168999
https://anjia0532.github.io/2017/11/10/rancher-k8s/