9/24/2015

Ansible結合Docker的使用方式

前言

為什麼不直接用Docker就好?
以現況來說,如果服務暫時無法移植到container執行, 要在私有雲上跑, 仍然需使用Ansible或是Chef或是Puppet這一類的工具。

目標

讓習慣Ansible的開發人員用原有的腳本在筆電上重複進行部署測試。
單純利用Docker的好處節省在開發機上安裝一堆VM (節省安裝OS的時間&空間)。
學習少量的Docker指令。

觀念

Ansible是從common role負責安裝所有的機器, 再由其他role安裝與設定其他各式Server。
Ansible需要為各種role撰寫playbook。
Docker的觀念是通過建立自己的base image 例如from Cent OS 7, 設置防火牆 VPN 與時區校正之後, commit, tag, 再從base image上安裝軟體變成各式Server。
用docker-compose以及links可以直接組裝許多Official images, 基本上只需要設計服務所需要的Application layer的images。
Docker需要為各種image撰寫Dockerfile。

安裝Docker

請按照官方步驟在Mac安裝完Docker環境之後在spotlight可以找到docker QuickStart Terminal 
你會得到一隻鯨魚以及一個IP, 那個就是虛擬機的IP, 請抄起來。

假設我們需要1台空白機讓Ansible管理, 執行:
bash-3.2$ docker run -d shooding/docker-ubuntu-openssh
bash-3.2$ docker ps
你會看到1台機器(container)正在執行。

這裏我解釋一下參數
-d = daemon背景模式執行
shooding/docker-ubuntu-openssh 是我放在docker hub上面的image名稱
如果有興趣可以看一下Dockerfile的寫法, 這裏使用的是Ubuntu 14.04 LTS版本。

安裝Ansible
$ brew install ansible

設定Inventory

Inventory就是要被Ansible管理的機器群。
剛剛已經用docker開好1台機器(container), 一般會分成staging和production來區分環境。
現在是在筆電上進行測試, 使用staging
把container的資訊加入到~/staging

$ vim ~/staging

請把IP換成你剛剛抄起來的IP。請把account換成你的User名稱。
[app_servers] 
app-1 ansible_ssh_host=192.168.99.100 ansible_ssh_port=2222

[app_servers:vars]

ansible_connection=ssh
ansible_ssh_user=root

將Ansible的Inventory路徑設定到環境變數當作預設值
$ vim ~/.profile
$ export ANSIBLE_HOSTS=/Users/shooding/staging
$ source ~/.profile

測試一下對於1台機器的連接狀況
$ ansible all -m ping 
你會得到...

用過Ansible就知道它是透過SSH連到被控制的主機(node)

因此我們需要將docker的SSH port forward出來, 並且將公鑰複製進去被控制的機器。
如果你還不會產生SSH 公鑰/私鑰, 請先完成產生SSH金鑰 的步驟。
或是直接執行:
$ ssh-keygen
會產生~/.ssh/id_rsa和~/.ssh/id_rsa.pub

那麼...

剛剛忘記把docker的port forward出來, 再進行一次吧
先停止所有的機器
bash-3.2$ docker stop $(docker ps -q)
bash-3.2$ docker run -d -p "2222:22" shooding/docker-ubuntu-openssh

參數說明 -p port forward 將SSH port 22 對應到外埠2222
也就是在ansible裡面設定的ansible_ssh_port = 2222

接著將公鑰複製進去被控制的機器
bash-3.2$ docker cp ~/.ssh/id_rsa.pub 660246bd6146:/root/.ssh/authorized_keys
660246bd6146 (這裏請換成你的 container id )

使用Ansible測試連接是否成功?
$ ansible all -m ping
參數說明: 使用ping module測試所有機器
XXXX | success >> {
    "changed": false,
    "ping": "pong"
}


成功了, 在這之後就可以照原來Ansible的使用方法囉!

附錄小幫手
如果你需要所有機器的private IP, 有時候建置互相連接的cluster會用到
bash-3.2$ docker inspect $(docker ps -q) | grep '"IPAddress"'

TODO
其實我很想要省掉docker cp的操作, 而直接將id_rsa.pub透過 docker -v 參數分享空間到
container裡面。例如開機器的時候改成:
docker run -d -p "2222:22" -v ~/.ssh/id_rsa.pub:/root/.ssh/authorized_keys shooding/docker-ubuntu-openssh

但是很可惜這樣做會造成SSH無法登入, 大神請在回應中點評一下。


8/11/2015

Lima開箱


先前在Kickstarter上贊助的Lima終於到貨了, 需要向海關申報價值和補稅金折騰了一陣。
Lima是一個讓你接上USB硬碟把它變成雲端化的一種技術。
首先先來一張三個顏色的疊疊樂。


打開之後很讓人驚豔的一點是包裝盒內有磁吸設計,紅色拉環也非常明顯,無需太多說明。附贈的耳機有木頭裝飾,算是小小驚喜。但是原本以為會靠木質共鳴來提高音質的溫潤感,實測之後純粹是我想太多了,幾乎沒有中低音。

拉開之後發現本體,確實蠻輕巧的。

USB port就是讓你外接硬碟用的,建議是外接一個大於你筆電的硬碟,最大不能超過7TB。外接USB Hub串聯硬碟要等未來功能釋出。

背後的網路孔和電源孔(是的,他需要插座。不然電從哪裡來供給硬碟呢?)
和羅技的Unify接頭比較一下大小,宅宅們應該就有感覺了。為什麼會說宅宅們?因為待會操作和設定確實不太容易。

周邊線材都很好的收納在盒子內,而且公司很細心的附上適合台灣的電源插頭。

造訪直接點這個連結 http://install.meetlima.com 下載安裝軟體,這裏我是用Mac laptop進行下載。你如果用Google搜尋Lima只會找到某某首都,要搜尋meetlima。
令人非常害怕的是安裝檔案竟然有200多MB (你沒看錯, 200多MB)。進行安裝的時候動畫非常的炫,讓我懷疑這個軟體裡面有多少MB是動畫成份。

按照說明上的操作你必須把Lima接上硬碟, 網路, 電源這三樣之後再進行下邊步驟。
你的laptop和lima必須暫時位於相同的網路環境, 也就是家中的router之下。
目前沒有任何地方可以查詢到Lima的MAC Address。

註冊個人帳戶之後Lima service會把這個裝置登記在你的名下。Mac筆電上會多出一顆硬碟,如下圖:

Lima主打的一點就是我們到外面趴趴走的時候,還可以聽存放在家裡硬碟裡面的音樂,所以我先把幾首mp3丟到Lima硬碟裡面。

目前手機app仍在測試階段,當你註冊完畢之後在信箱中應該會有一封信,這是Crashlytics的測試版本。這裏我是用手機安裝iOS版本。


安裝過程也是非常的....久。應該也是下載200MB的軟體。


需要輸入我的帳號密碼,因為我已經在Mac筆電上註冊過,Lima service已經把Lima和他所處的網路設定以及我的帳號綁定在一起。
會根據我輸入的帳號密碼嘗試連接Lima裝置,我猜如果沒有在Mac筆電上註冊,純粹直接透過手機App啟用的話,手機也必須待在家中的網路之下。
連接成功之後會開始把手機上的照片匯入到Lima裡面,這裏似乎只有匯入其中的一部分。可能是某種智能快取技術。
如果你不想匯入可以skip。


又來了非常炫的動畫,到這裡我已經很佩服這間公司的設計和包裝,但是技術就...一直有點卡卡的感覺,可能如同他們在包裝盒上所說的:「At Lima, we focus on what's important. We don't care about technology. We care about you.」
來了,找到我剛剛在Macbook上傳的MP3,如果仔細看的話,它下面的小小圖示(Available)有分成(Available)和(Available via XXX)。
意思是那個檔案並不是存放在我手機裡面,而是在筆電上。

如果點下去播放,會很快的從筆電上快取過來,然後開始播放。一旦快取成功,Available on XXX就變成Available(在本地即手機上) 之後每次播放就只是從手機播放,和筆電無關了。

根據Lima blog上的技術說明,他們採用一種專有(proprietary)的VPN技術加上P2P網路,聽起來相當於自動翻牆。

TODO (之後會再更新這篇文章)
  • 測試用手機看電影
  • 測試用3個Lima同時掛載在我的帳號下看發生什麼事情



5/29/2015

ZENLET 開箱

幾個月前在FlyingV上贊助的ZENLET終於到貨了,包裝盒非常有質感。

打開之後馬上可以看到ZENLET標誌。
官方印製的Thank you note。
比Macbook的Touch panel稍微小一些。


放入卡片的狀態,卡片愈多會卡越緊,要稍微用力才能單手推開。推開的時候實際上是從背面推開,ZENLET的機構會讓卡片會依序展開來, 但是最下面那一張幾乎不會展開。
我注意到信用卡類的有浮出的字其實會干擾, 推開的時候造成一些摩擦力。
由於底部有一層金屬怕會干擾悠遊卡扣款, 所以我馬上跑到7-11測試一下, 感應完全沒問題。

感想:
如果單手推開可以再做滑順一點就好了。

同場加映:





5/27/2015

小朋友保險研究

/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */

開始:
最近二寶出生了之後又把以前研究保險的心得翻出來。

先說結論:
我會選擇10萬壽險主約+雙 * 定期實支實付醫療險附約+親子豁免條款
醫療險的額度至少家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免長期住院需要父母辭職照顧的情形。

社會環境&假設前提:
DRG實施後, 平均住院天數下降(因為醫生沒利潤, 會建議患者趕快出院, 自費住院不給付), 門診比例提高, 門診手術費較貴, 最好多投保一些。如果有能力負擔單人房也比較不會被趕著出院, 但是單人房價也是每年都在調高。

定期險vs終身險 (此處以醫療險為例):
終身險前期總投入保費較高, 對父母產生的壓力稍大
反之定期險在前面投入很小, 但小朋友長大以後保費每年增加一些, 約30歲與終身險追平, 但60歲以後保費往往倍增, 這是因為保險公司對於未來的不確定進行風險轉嫁。
但我認為30歲以後應由成年子女自行負擔老年醫療的規劃, 父母只需在年輕時替他們打好基礎即可。
定期險相較之下金流壓力較小,更可以給他們更好的童年環境。

定期險會根據金管會規定每年或數年更新條款, 一般而言從優認定, 隨著醫療手術技術的進步, 這點是最大的好處。
定期險通常只能續約保到75歲左右。
定期險要避免發生扣款中斷。

醫療險:
實支實付如果只保1家不要選 (日額、實支2擇1的)。如果保2家組合, 則盡量選2擇1的, 這樣每一家都可以自由搭配。
實支實付重點要看保不保證續保, 到幾歲?
理賠的項目有沒有全民健保以外的自費支出。(除看護外自費全部包括的概括式條款), 有概括式條款的較佳, 模糊解釋時從優解釋。

需留意超過30天有加倍理賠嗎? 拖過30天的病通常會花大錢了。
實支實付有沒有涵蓋高貴自費藥材?
如果你的保險有Cover, 醫生可能喜歡你這種病患, 可以放新的用利潤高的藥, 醫病關係良好, 也可以放心的升等單人病房。

壽險:
小孩14歲之前壽險額度都沒意義。任何時候小孩掛了我也不想領那種錢。14歲之後, 加公司團保定期壽險(為什麼這時候又要保? 因為實在便宜又大碗), 直到小朋友成年, 工作之後就要自己負擔, 因為這時候他的壽險額度是為了身後留下錢給另一半。

意外險:
所有保險賠率最高的高CP值險種, 完全是風險轉嫁的概念。
金管會有規定一個人最多保多少意外險, 避免殺人詐領,
經濟許可就盡量保滿。公司團保的意外險不計入, 也盡量保滿。

防癌、重大疾病:
(如果家族沒有遺傳病史)小朋友在防癌、重大疾病機率不高可以視自己經濟狀況投保, 用儲蓄準備金替代即可。小朋友成年之後請他自己投保防癌。

燒燙傷:
小朋友最難受的就是燒燙傷, 任何爸媽都會哭翻。
重點是家裡要減少可能發生燙傷的環境, 比買什麼保險都重要。
可加保意外險或是特別針對燒燙傷的險種。

親子豁免條款: 
如果爸媽掛了, 雖然保了很多醫療險, 但是遺眷繳不出來也是枉然, 這條不算便宜。

額度該保多少?
醫療險的額度至少>家中次要經濟來源(父、母其中之一)的薪資, 相當於所得替代率的概念, 避免萬一萬一需要長期住院, 父母一人辭職照顧的情形。
如果報稅時你是列舉申報, (通常有租一整層, 或是已貸款買房正在繳利息的家庭, 往往用列舉)
保險扣除額每個人24000, 因此小朋友的保險支出建議保超過24000, 這時候就相當於保費打折。


/** 免責聲明
以下文章僅個人心得, 本網站之內容僅供參考之用,並未據此勸誘使用者採取任何行為,不構成對任何人在任何地區的投資建議、買賣之要約、勸誘買賣有價證券、金融產品或票券或參與任一特定的投資策略或任何其他意思表示,讀者不應視為專業意見而加以倚賴。任何人士或團體根據本網站所載任何資訊、意見或估計行事而直接或間接遭受的任何損失,概不作任何保證或承擔任何責任 */