2018年6月11日 星期一

k8s 初探

架設環境是在 aws ec2 ubuntu 16.04 環境下,大致上照這篇進行
使用的範例則是這本書第一章的 hello world

依該篇文章進行時,初步遇到以下問題需排除:

1. 如果自行安裝 docker-ce 可能會遇到一些問題,使用 ubuntu 內建的 docker.io 會比較順利

2. kubeadm init 時,會使用預設的 cni 網路環境,可能會造成預設相關的 pod 會無法啟動 (Pending),可以依照這篇修改 10-kubeadm.conf ,將 KUBELET_NETWORK_ARGS 給 mark 掉,再執行 kubeadm init

3. 在 deploy pod network 時,該篇文章使用 flannel 網路環境,但是預設環境下產生的 flannel pod 會 Pending。或許可以照這篇做排除,不過還沒嘗試。我是依另一篇文章設定使用 weave 網路環境
sudo kubectl apply --filename https://git.io/weave-kube-1.6

4. 在 aws ec2 上使用的是免費方案等級的 instance,因此在產生範例的 pod 時,會因為 k8s 判斷硬體資源不足而讓 pod 變成 Pending。可以用以下指令讓 k8s 放行:
kubectl taint nodes --all node-role.kubernetes.io/master-


主要是遇到以上問題,就這樣也花了一天時間,才把書上的範例跑起來。
如果對 k8s 裡的元件定義有先弄清楚的話,例如 node rc pod service ,整個流程會比較清楚。我是邊做邊看,有些東西試了一陣子才發現是自己沒看清楚元件的定義或用途。

其他就是熟悉一下 k8s 指令,其實主要也就 kubectl 這個指令。
最常用的幾個 kubectl command 就是
kubectl get [nodes | pods | services ]
kubectl describe [resouce name]
kubectl create -f [filename]
kubectl delete [resource name]

禮拜四要去參加一場 k8s 研討會,希望在那之前能把 k8s 摸熟一點  QQ

2018年5月30日 星期三

karma - webpack unit test environment in laravel

因為對 webpack 不熟,因此拿別人做好的設定檔來用
https://github.com/alhoqbani/laravel-mix-test

npm 相關套件版本變化很快,因此沒有沿用這專案的 package.json,大致進行了如下設定後即可以 karma 來進行 unit test

1. 將該專案的 resources/assets/tests 目錄下的所有檔案複製一份到自己專案下

2. 依該專案設定的 karma 設定檔內的需求,安裝相關的 node package, 大致如下
    karma mocha sourcemap
    sinon chai sinon-chai karma-sinon-mocha
    karma-mocha karma-spec-reporter karma-coverage
    karma-webpack karma-chrome-launcher

3. 更改 karma.conf.js 設定

plugins: [
    'karma-webpack',    'karma-coverage',    'karma-sourcemap-loader',    'karma-mocha',    'karma-spec-reporter',    'karma-chrome-launcher',    require('karma-mocha'),    require('karma-sinon-chai')
],

4. 更改 package.json
"test": "cross-env NODE_ENV=test karma start --config= resources/assets/tests/unit/karma.conf.js --single-run",

然後跑 npm test 即可以看到用 karma 以 resources/assets/tests/unit/specs/ 裡面的檔案設定來跑 unit test 的結果,預設是測試 resouces/assets/js/componments/Example.vue

該專案有改過 Example.vue 的內容,所以如果測試失敗可以複製該專案的 Example.vue 來測試。


設定過程中遇到的問題,主要就是要安裝相關的 node package,以及 karma.conf.js 的設定,其中曾經遇到 karma 一直吐出 "webpack not registered" 之類的訊息,花了一點時間才知道是 karma.conf.js 設定黨的關係。

2018年1月28日 星期日

wordpress 網站放到 aws 上 , 若採用 aws load balance 及 http ssl 授權金鑰所產生的問題

這應該算是有點 tricky 的問題?

這次把公司網站放到 aws 上之後, 在設定 load balance 時發現 aws 可以直接設定 https ssl 所授權的網域, 這樣就不需要維護每三個月更新一次的 letsencrypt . 於是很愉快的使用下去了.

在設定時, 有注意到這種方式完全不用修改 apache 設定就可以直接 work , 但沒深究其原因.
直到發現公司官網在以 https 瀏覽時, 會因為出現有混合 http/https 資料而產生 ssl not secure 的情況, 造成網頁顯示問題時, 開始追究原因後才發現和這個有關.

比較簡單的說法是, aws load balance 的做法像是加一層 revserse proxy 擋在 web 前面, 所以對 web server 來說其實都是 http request , 而不是 https request, 所以 apache 不需要任何 ssl 相關的設定.

但 wordpress 會根據 request 來決定網頁內連結裡應該是 http or https , 所以丟出的連結都是 http 而造成了 http/https mixed content 的情況.
以上解讀若有錯誤請指正 QQ

解決方案 就如同這個網頁提供的, 因為 aws load balance 轉發 request 時會加入一個 header "X-Forwareded-Proto", 可以在 apache 裡設定當這個 header 存在時, 加入一個環境變數, 而 wordpress 會參考到這個環境變數而認為這是一個 https 的 request 產生 https 的連結.

對我來說這問題實在奇妙但真實, 再次驗證在設定系統時不能疏忽或小看任何變動的地方, 否則就是會踩坑給你看.