999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于配置庫管理工具的電力系統容器部署研究

2017-04-08 09:21:02耿貞偉李少華權鵬宇
數字技術與應用 2017年2期
關鍵詞:電力系統

耿貞偉++李少華++權鵬宇

摘要:電力系統運行穩定性關系著千家萬戶電力供應的持續有效性,作為電力信息化的建設和運維主體單位,云南電網信息中心以云計算等核心技術支撐各業務系統的穩定運行。隨著電力系統信息化的深入,各種應用服務需求增長迅速,原有服務部署方式呈現出資源利用率低,管理復雜,執行效率低等問題。因此對現有業務進行容器化改造,成為了一個必然的選擇。另一方面,Docker本身還需要在主機上安裝、管理和部署,同時主機也需要被管理起來。本文結合電網公司的實際情況提出了一種使用配置庫管理工具部署容器的解決方案。

關鍵詞:Docker;容器;電力系統;配置管理

中圖分類號:TP311.5 文獻標識碼:A 文章編號:1007-9416(2017)02-0131-03

近年來,計算機技術飛速發展,大數據、云計算、容器化、微服務、平臺戰略等新技術和新概念層出不窮,電力系統為了在有限的資源下為了滿足用戶日益多樣化的需求也不斷采用新技術升級迭代,這在業務支撐、架構能力、平臺擴展性等方面對舊有的煙囪式建設的業務支撐系統提出了巨大的挑戰。這種情況下,容器技術因其輕量級虛擬化,標準化打包、封裝、搬運,秒級快速啟動,類似于積木的分層機制,簡化開發版本管理等特點走入人們的視野。同時,Docker容器需要編排、管理和部署,也經常要與外部服務和工具通信,如何利用現有的配置管理工具自動化標準化配置,就成為了一個亟待解決的問題。本文首先闡明了容器技術的概念和特點,然后介紹了配置管理工具的概念及在容器部署中的作用,最后交待了如何使用Puppet來管理Docker容器。

1 容器技術

容器技術是一個在單一主機上提供多個隔離運行環境的操作系統級虛擬技術。容器是直接運行在操作系統內核之上的用戶空間,只能運行與底層宿主機相同或相似的操作系統。容器運行不需要模擬層和管理層,而是使用操作系統的系統調用接口,因此相比虛擬機宿主機中可以運行更多的容器。容器概覽圖1所示。

容器隔離了應用,操作系統資源已經被Docker抽象隔離了,如上圖右方,容器以層的概念建立,多個容器可以共享一個底層,降低資源的使用。

對于容器環境來說,需要首先安裝主機操作系統,之后將容器層安裝在主機操作系統之上。在安裝完容器層之后,就可以從系統可用計算資源當中分配容器實例了,并且企業應用可以被部署在容器當中。每個容器化應用都會共享相同的操作系統。

容器使應用程序的跨平臺移植比以往任何時候都更容易,通過允許在開發工作站上構建和測試的同一鏡像運行在生產環境中,解決了開發環境與生產環境差異的問題。

2 配置管理工具

配置管理工具作為配置管理的重要組成部分,其目標是完成新上線服務器的配置和現有線上服務配置的更新等任務的標準化和自動化。配置管理工具在以下3個方面能幫到Docker用戶。

(1)配置和維護Docker宿主機。這包括從帶有基礎操作系統的新硬件的上線到Docker服務的安裝和配置,以及確保這些宿主機上安裝了最新的安全補丁。(2)Docker容器和Docker鏡像的管理。這涵蓋了從容器鏡像的整個生命周期(鏡像的創建、推送等)到實際運行這些鏡像的容器的運行和管理。(3)構建鏡像。盡管Docker可以很便利的將軟件和配置打包成鏡像,很多時候在容器里運行的軟件還是需要通過配置管理指令來安裝和配置。通過配置管理工具,用戶可以直接使用在虛擬機上安裝應用軟件的方式將應用軟件安裝到Docker容器。

3 使用puppet管理docker

Puppet官方不直接提供專用的manifest,用戶可以使用Puppet的一個由Gareth Rushgrove提供的garethr-docker模塊來完成Docker宿主機、鏡像以及容器的安裝和管理等工作。該模塊在容器安裝、鏡像管理、容器啟動、網絡管理、編排、私有registry等方面為Docker提供多樣化的支持。

3.1 容器安裝

默認情況下Puppet會在需要時在系統上建立Docker宿主倉庫,并安裝Docker包。Docker守護進程會默認綁定到一個位于/var/run/docker.sock的unix套接字。我們可以使用下面的指令改變套接字,同時在需要的情況下綁定到一個tcp套接字:

class { 'docker':

tcp_bind => ['tcp://127.0.0.1:4243','tcp://10.0.0.1:4243'],

socket_bind => 'unix:///var/run/docker.sock',

ip_forward => true,

iptables => true,

ip_masq => true,

bridge => br0,

fixed_cidr => '10.20.1.0/24',

default_gateway => '10.20.0.1',

}

如果要以安全傳輸層協議建立連接,需要上傳相關文件(如CA證書,服務器證書及密鑰),并在manifest中給出它們的路徑:

class{'docker':

tcp_bind => ['tcp://0.0.0.0:2376'],

tls_enable => true,

tls_cacert => '/etc/docker/tls/ca.pem',

tls_cert => '/etc/docker/tls/cert.pem',

tls_key => '/etc/docker/tls/key.pem',

}

Puppet將在第一次運行的時候默認從Docker倉庫安裝最新版本的Docker。可以通過下面的指令安裝指定的Docker版本:

class { 'docker':

version => '0.5.5',

}

有些情況下,DNS解析不能在容器內正常運行,可以通過如下方式為Docker守護進程指定DNS服務器:

class{'docker':

dns => '8.8.8.8',

}

如果要為Docker組添加用戶,可以如下傳遞一個數組:

class { 'docker':

docker_users => ['user1', 'user2'],

}

同樣可以通過傳遞一個數組來添加守護標簽:

class { 'docker':

labels => ['storage=ssd','stage=production'],

}

3.2 鏡像管理

鏡像是容器的靜態體現,是一個還沒有運行起來的“運行環境”,是Docker生命周期中的構建階段,是啟動容器的只讀模板。Docker通過把應用的運行時環境和應用打包在一起,解決了部署環境依賴的問題。

安裝鏡像的時候,可以通過下面的指令拉取鏡像:

docker::image { 'base': }

這條命令有可選的參數image_tag,用來選取同一倉庫中多個鏡像之一:

docker::image { 'ubuntu':

image_tag => 'precise'

}

還可以使用docker_file屬性或docker_dir屬性添加鏡像。也可以通過訂閱如Dockerfile改變之類的外部事件來觸發鏡像重構,使鏡像重構更加自動化:

docker::image { 'ubuntu':

docker_file => '/tmp/Dockerfile'

subscribe => File['/tmp/Dockerfile'],

}

file { '/tmp/Dockerfile':

ensure => file,

source => 'puppet:///modules/someModule/Dockerfile',

}

在一個鏡像不再需要的時候,可以方便的及時移除:

docker::image { 'base':

ensure => 'absent'

}

3.3 容器啟動

在使用Docker時,執行最多的命令莫過于run,它是Docker操作的入口。Docker在執行時會將相關進程封裝到相互隔離的容器中。當執行 Docker Run時,Docker會啟動一個進程,同時給這個進程分配其獨占的文件系統,獨占的網絡資源和以此進程為根進程的進程組。在Docker啟動容器時加載的鏡像,或許已經定義好了默認的啟動進程,需要公開的網絡端口和其他在Dockerfile中定義好的資源,使用Docker Run 可以對其重新進行定義。

Puppet使用docker::run封裝Docker Run。在擁有一個鏡像之后,即可以使用docker::run啟動容器:

docker::run { 'helloworld':

image => 'base',

command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',

}

run命令也包含許多可選參數:(1)pull_on_start:在每次容器啟動前都拉取鏡像;(2)before_stop:在停止容器前執行一條命令;(3)after:用于表示必須在此之前啟動的容器;(4)depends:用于表示容器之間的依賴關系。依賴的容器將在此容器之前啟動,在此容器之后停止;(5)depend_services:用于指定需要在容器之前啟動的依賴的通用服務(非docker);(6)extra_parameters:數組中存放要傳遞給docker run命令的額外參數。

默認情況下,生成的初始化腳本將會在服務停止或啟動后移除容器。可以通過如下修改改變此行為:

docker::run { 'helloworld':

remove_container_on_start => true,

remove_volume_on_start => false,

remove_container_on_stop => true,

remove_volume_on_stop => false,

}

3.4 網絡管理

隨著Docker在實際生產環境中的應用,網絡功能的重要性日益突出。從Docker 1.9開始,Docker提供對網絡功能的官方支持。通過對Network Namespace的操縱,Docker提供了五種容器網絡模式:

(1)none:不為容器配置任何網絡功能。(2)container:與另一個運行中的容器共享Network Namespace及網絡視圖。(3)host:與主機共享Root Network Namespace,容器有完整的權限可以操縱主機的協議棧、路由表和防火墻等。(4)bridge:Docker設計的NAT網絡模型,在此模式下,Docker容器與Internet的通信,以及不同容器之間的通信,都是通過iptables規則控制的。(5)overlay:Docker原生的跨主機多子網模型,其底層需要類似consul或etcd的KV存儲系統進行消息同步,核心是通過Linux網橋與vxlan隧道實現主機劃分子網。

在Puppet的garethr-docker模塊中,我們通過docker_network來管理網絡功能:

docker_network { 'my-net':

ensure =>present,

driver =>'overlay',

subnet =>'192.168.1.0/24',

gateway =>'192.168.1.1',

ip_range =>'192.168.1.4/32',

}

其中只有ensure和name是必填項。如果不給driver賦值,Docker網絡會使用默認網橋,然后定義過的網絡就可以在docker::run資源中使用net參數使用了。

3.5 編排

Docker Compose是用于定義和運行復雜Docker應用的工具。用戶可以在一個文件中定義一個多容器的應用,然后使用一條命令來啟動應用,然后所有相關的操作都會被自動完成。

模塊中包含的docker_compose類型允許使用Puppet來運行Compose。因此可以使用Puppet修復容器問題,并且結果將與Compose文件中的模型匹配。

使用docker_compose類型之前需要確保docker-compose工具已經安裝:

docker_compose { '/tmp/docker-compose.yml':

ensure => present,

}

然后以如下方式定義一個指向Compose文件的docker_compose資源:

docker_compose { '/tmp/docker-compose.yml':

ensure => present,

}

在Puppet運行的時候,就會自動的執行需要的Compose。

Docker_compse可以接受伸縮規則和附加項,根據用戶定義的多種策略(時間表、運行狀態等)自動的實現IT資源擴展或收縮,以便在避免IT資源過度配置的情況下保持足夠的性能,同時降低管理費用。下面的例子中,需要兩個容器來運行,Puppet將在運行給定服務的容器的數量與提供的伸縮值不匹配的時候運行Compose。

docker_compose { '/tmp/docker-compose.yml':

ensure => present,

scale => {

'compose_test' => 2,

},

options => '--x-networking'

}

3.6 私有registry

Docker Registry是構建倉庫的核心,旨在實現鏡像的創建、存儲、分發和更新等功能。在用戶希望構建和存儲不想被公開的信息或數據的鏡像時,就需要利用Docker Hub上的私有倉庫或者在防火墻后運行自己的registry。除非指定私有registry,模塊從index.docker.io拉取和推送鏡像。如果私有registry無需認證,可以完全限定鏡像名稱;如果私有registry要求認證,需要配置registry:

docker::registry { 'example.docker.io:5000':

username => 'user',

password => 'secret',

email => 'user@example.com',

}

在不需要registry的時候可以采用如下方式退出:

docker::registry { 'example.docker.io:5000':

ensure => 'absent',

}

4 研究結論

Docker因其技術優勢正在取得越來越廣泛的應用,但Docker依然存在一些問題:Dockerfile在對應用程序的運行環境的控制上不如配置文件靈活,可能需要針對不同環境編寫不同的Dockerfile;Docker的安全模式也決定了中間層開發者可能會污染下層容器。另一方面,時下的配置管理工具已經在配置和維護Docker宿主機、管理Docker容器和Docker鏡像、構建鏡像等方面提供對Docker的支持。因此,面對微服務架構的多代碼敏捷性版本更迭,通過配置管理的自動化和可視化來管理容器代碼的部署是必要且可行的。

參考文獻

[1]陳星宇.基于容器云平臺的網絡資源管理與配置系統設計與實現[D].浙江:浙江大學,2016.

[2]王飛.基于Docker的研發部署管理平臺的設計與實現[D].北京:北京交通大學,2015.

[3]高飛,李勇.Docker容器資源管控配置實戰[J].程序員,2014(9):96-101.

[4][美]Joe Jhonston,[西]Antonio Bathelli,[英]Justin Cormack,[美]John Fiedler,[英]Milos Gajdos. Docker生產環境實踐指南[M].吳佳興,梁曉勇.譯.北京:人民郵電出版社,2016.

[5]華為Docker實踐小組.Docker進階與實戰[M].北京:機械工業出版社,2016.

猜你喜歡
電力系統
淺析繼電保護自動化技術在電力系統中的應用
電力系統變電運行設備維護技術分析
并聯電抗器在高壓電網中的應用
試論電力繼電保護運行及可靠性問題
信息時代的電力系統信息化經驗談
關于智能變電站繼電保護技術優化探討
探討電力系統中配網自動化技術
科技視界(2016年21期)2016-10-17 20:00:58
配網自動化技術的應用探討
科技視界(2016年21期)2016-10-17 19:54:47
一種新型高壓電纜頭制作方法
電力系統繼電保護技術常見問題及對策
主站蜘蛛池模板: 国产乱视频网站| 国产日韩欧美成人| 十八禁美女裸体网站| a在线观看免费| 美女毛片在线| 久久semm亚洲国产| 亚洲高清在线天堂精品| 国产91特黄特色A级毛片| 美女国产在线| 亚洲AV无码久久天堂| 91精品亚洲| 中文纯内无码H| 欧美日韩中文国产| 国产美女无遮挡免费视频| 亚洲成人黄色在线观看| 亚洲成a∧人片在线观看无码| 一级一级一片免费| 成人精品免费视频| 午夜精品久久久久久久2023| 五月天久久综合国产一区二区| 亚洲精品无码久久毛片波多野吉| 欧美激情第一区| 国产亚洲精久久久久久无码AV| 91久久精品国产| 中文字幕精品一区二区三区视频| 99青青青精品视频在线| 亚洲精品日产AⅤ| 色亚洲成人| 国产精品专区第1页| 国产无码高清视频不卡| 精品福利国产| 色屁屁一区二区三区视频国产| 91视频国产高清| 日本一区二区不卡视频| 日韩免费成人| 国产又色又刺激高潮免费看| 国产91全国探花系列在线播放| 3D动漫精品啪啪一区二区下载| 国产精品亚洲欧美日韩久久| 国产精品尤物在线| 99re热精品视频国产免费| 欧美人与牲动交a欧美精品 | 亚洲精品自在线拍| 日韩经典精品无码一区二区| 特级aaaaaaaaa毛片免费视频| www.亚洲天堂| 狠狠色狠狠色综合久久第一次| 成人在线观看不卡| 亚洲Av综合日韩精品久久久| 亚洲欧美在线综合一区二区三区| 国产喷水视频| 在线无码av一区二区三区| 亚洲无码高清一区二区| 国产高潮视频在线观看| 91色老久久精品偷偷蜜臀| 亚洲欧美另类视频| 亚洲综合欧美在线一区在线播放| 国产成人久久综合一区| 看你懂的巨臀中文字幕一区二区| 欧美精品在线免费| 国产成人亚洲精品色欲AV| 亚洲国语自产一区第二页| 欧美视频二区| 97精品伊人久久大香线蕉| 2020极品精品国产| 亚洲国产亚洲综合在线尤物| 91精品最新国内在线播放| 日韩国产一区二区三区无码| 九九热免费在线视频| 67194在线午夜亚洲| swag国产精品| 亚洲无码一区在线观看| 久久久久人妻一区精品色奶水 | 久久福利网| 亚洲色成人www在线观看| 亚洲三级色| 凹凸精品免费精品视频| 亚洲男人的天堂久久香蕉网| 国产精品蜜芽在线观看| JIZZ亚洲国产| 日本五区在线不卡精品| 91黄视频在线观看|