docker安裝jenkins

docker安裝Jenkins

Jenkins介紹

開源的java語言開發持續集成工具,支持CI/CD、易於安裝部署。javascript

安裝方式:可經過yum安裝、或下載war包以及經過docker容器等快速安裝部署,可方便web界面配置管理。html

消息通知及測試報告:集成RSS/E-mail經過RSS發佈構建結果或當構建完成時經過e-mail通知,生成JUnit/TestNG測試報告。java

分佈式構建:支持Jenkins可以讓多臺計算機一塊兒構建/測試。node

文件識別:Jenkins可以跟蹤哪次構建生成哪些jar,哪次構建使用哪一個版本的jar等。linux

豐富的插件支持:支持擴展插件,你能夠開發適合本身團隊使用的工具,如git,svn,maven,docker等。
nginx

補習一下:普通yum安裝方式  (部署效率-》中,可能有卸載殘留)

Linux時關閉selinuxsetenforce 0git

永久關閉,能夠修改配置文件/etc/selinux/config,將其中SELINUX設置爲disabled,以下,github

[root@localhost ~]# cat /etc/selinux/config   web

SELINUX=disabled  正則表達式

[root@localhost ~]# sestatus

檢查防火牆是否開放了808050000端口。

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文件,將要掛載的文件夾的用戶的uidgid必需是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查找命令位置,詳細點信息,經過maninfo命令

[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

說明:

8080jenkins默認訪問端口

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

參考文章
jenkins經常使用插件彙總
Jenkins插件大全

git插件 :默認
Ant插件 :基本沒用過

svn插件 :如今不怎麼用了,都用git了
maven插件 :手動安裝/自定義安裝
github插件 :自定義安裝
gitLib插件 :自定義安裝
SSH插件:默認
一、Publish Over SSH Plugin:
做用:經過SSH拷貝文件到目標機器,同時能夠在目標機器上執行腳本
二、Email Extension Plugin 
連接:https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin
做用:用於替換Jenkins自帶的郵件發送,更加的強大
三、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 SwarmKubernetesMesos

同一個用戶能夠建立Swarm或者Kubernetes集羣。而且可使用原生的Swarm或者Kubernetes工具管理應用。

 目前Rancher支持以下四種:Cattle/Kubernetes/Mesos/Swarm, Cattle是Rancher本身內置的缺省的編排環境,缺省的Default的即爲Cattle類型的。

RANCHER服務器標籤

Rancher服務器有2個不一樣的標籤。對於每一個主要版本標記,咱們將提供特定版本的文檔。

  • rancher/server:latesttag將是咱們最新的開發版本。這些構建將經過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服務器啓動只需幾分鐘。日誌顯示時,Rancher UI已啓動並正在運行。
配置完成後,這行日誌幾乎就會當即生效。此輸出後可能還有其餘日誌,所以請不要認爲它將在初始化時成爲日誌的最後一行。


# 2.x版本
.... Startup Succeeded, Listening on port...
  當前2.x版本的快速入門:https://www.cnrancher.com/quick-start
  Linux主機操做系統:64位Ubuntu 16.04或者CentOS7
  硬件:最少1核 至少4GB內存(這塊被坑過,沒注意內存大小,致使安裝一直不成功
2.X版本的測試命令:
 $ sudo docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /var/lib/rancher/:/var/lib/rancher/ \
rancher/rancher:stable

--name rancher
規矩點的命令:
$ mkdir -p /docker_volume/rancher_home/rancher $ mkdir -p /docker_volume/rancher_home/auditlog

$-/docker_volume/rancher_home/rancher$-/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部署與使用過程當中常見的問題及其解決方法:

一、部署Rancher 2.0的環境需求

  • 推薦使用的操做系統
  • 推薦的硬件配置
  • 支持的docker版本
  • 防火牆須要容許經過的端口

二、部署過程當中的常見問題及排查思路

  • 環境信息殘留
  • 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版本、設置鏡像加速器、運行容器等基本操做;

一、先建立一臺普通的虛擬機,安裝linux普通操做系統(主要是用於操做rancherOS系統的客戶端),使用ssh-keygen生成祕鑰對,三次回車,使用默認文件名

ssh-keygen -t rsa

生成的公鑰和私鑰文件名、位置及內容

二、編輯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

 三、建立新的一臺虛擬機,設置光驅爲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肯定。

四、移除RancherOS虛擬機光驅,以便從硬盤啓動系統

      從新啓動虛機,從硬盤啓動RancherOS系統,IP地址已經是配置文件中的IP

五、在客戶端的linux機器上,使用私鑰文件遠程ssh登陸到RancherOS機器上,這裏有可能登陸不上去的,緣由是網絡沒有設置爲橋接模式,NAT模式有可能不行。

ssh -i /root/.ssh/id_rsa rancher@192.168.1.200
或者

ssh rancher@192.168.1.200

六、執行其餘操做-查看ros版本-可用版本-docker版本-可用docker引擎的版本

# 查看rancherOS當前的系統版本

$ sudo ros -v

#查看存在的系統版本列表
$ sudo ros os list

 

#查看當前的docker版本

$ sudo docker -v     
$ sudo docker version

#查看存在的docker版本列表

$ sudo ros engine list

 

七、切換到docker-17.03.1-ce 版本,再次查看Docker版本已經是新切換的docker-17.03.1-ce 版本

sudo ros engine switch docker-17.03.1-ce

八、配置鏡像加速器

若是速度慢,能夠設置國內的鏡像 '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/
相關文章
相關標籤/搜索