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/