準備工作
安裝 kubectl
Linux 安裝 kubectl
curl -LO https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl --help
MacOS 安裝 kubectl
curl -LO https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/darwin/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl --help
Windows 安裝 kubectl
把
https://kstarter-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubectl/kubectl/windows/amd64/kubectl.exe放到系統 PATH 路徑下
kubectl --help
配置 kubeconfig
配置 kubectl 連接配接 Kubernetes 叢集的配置,可參考文檔
通過kubectl連接配接Kubernetes叢集建立 Kubernetes 叢集
如果還未建立 Kubernetes 叢集,可以到
這裡建立一個 Kubernetes 叢集
部署 Istio
在容器服務
叢集管理頁面可以直接在目标叢集上部署 Istio

選擇啟用鍊路追蹤,點選【立即開通】 跳轉到調用鍊頁面擷取接入點連結
到鍊路追蹤頁面開啟日志服務授權
如下所示的狀态标明已經開通成功
選擇對應 region 的 ZipKin 内網 v1 的接入點
回到 Istio 頁面粘貼接入點,繼續安裝。
部署 Knative
到容器服務的
控制台上面選擇好目标叢集使用一鍵部署功能直接部署 Knative
安裝文檔開始部署 Knative, 等十幾秒鐘即可完成部署。
部署 WordPress
開啟 Istio Sidecar 注入
kubectl label namespace default istio-injection=enabled --overwrite
添加 egress
執行下面指令添加 egress 配置,使得 Pod 内部可以通路資料庫服務:
kubectl apply -f https://knative-sample.oss-cn-shanghai.aliyuncs.com/kubecon-2019-sh/egress.yaml
修改預設域名
預設 Istio Gateway 綁定的域名是 example.com,防止 example.com 未備案導緻不能通路我們把域名改成 kubedemo.com
kubectl apply -f https://knative-sample.oss-cn-shanghai.aliyuncs.com/kubecon-2019-sh/custom-domain.yaml
建立 Knative Service
點選連結下載下傳
wp-service.yaml,把檔案中的
__DB_NAME__
替換成你自己的資料庫名稱.
執行
kubectl apply -f wp-service.yaml
安裝WordPress
- 擷取 istio Gateway IP
└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
47.95.139.84
- 擷取 WordPress 通路位址
└─# kubectl get ksvc wordpress --output=custom-columns=NAME:.metadata.name,DOMAIN:.status.domain
NAME DOMAIN
wordpress wordpress.default.kubedemo.com
- 添加 host 綁定
Linux 和 Mac 編輯
/etc/hosts
檔案,在最後添加一行
sudo vim /etc/hosts
47.95.139.xx wordpress.default.kubedemo.com
Windows
直接在
C:\WINDOWS\system32\drivers\etc
目錄的 HOSTS 檔案最後添加一行
47.95.139.xx wordpress.default.kubedemo.com
即可。具體操作方法參見:
https://yq.aliyun.com/articles/706009-
通過浏覽器通路 WordPress
點選連結:
http://wordpress.default.kubedemo.com/ 應該就能通路到部署的 WordPress 了
CICD 自動化
例子:
https://github.com/knative-sample/wordpress- CICD 原理介紹
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境 - 開源工具
- deployer https://github.com/knative-sample/deployer
- github-trigger-tmpl https://github.com/knative-sample/github-trigger-tmpl
- 示範視訊 https://knative-sample.oss-cn-shanghai.aliyuncs.com/kubecon-2019-sh/github-trigger-0.10.mp4
運維操作
Tracing
到
https://tracing-analysis.console.aliyun.com/檢視 tracing 資訊
選擇相應的 Region,點選應用清單檢視應用清單
調用鍊查詢頁面
日志管理
- 日志服務控制台: https://sls.console.aliyun.com
- 本示例以容器标準輸出采集為例進行展示,詳細設定步驟可以參考 日志服務文檔
- 根據 Kubernetes 叢集 ID 找到對應的日志服務 Project
- 建立一個新的 Logstore
設定資料導入方式
選擇 Docker标準輸出
- 配置容器标準輸出日志采集政策
{
"inputs": [
{
"detail": {
"IncludeEnv": {
"K_SERVICE": "wordpress"
},
"IncludeLabel": {},
"ExcludeLabel": {}
},
"type": "service_docker_stdout"
}
],
"processors": [
{
"detail": {
"KeepSource": false,
"NoMatchError": true,
"Keys": [
"ip",
"time",
"action",
"url",
"code"
],
"NoKeyError": true,
"Regex": "(\\d+.\\d+.\\d+.\\d+)\\s+-\\s+(\\d+/\\w+/\\d+:\\d+:\\d+:\\d+\\s\\+\\d+)\\s\"(\\w+)\\s(.*)\"\\s(\\d+)",
"SourceKey": "content"
},
"type": "processor_regex"
}
]
}
分别為相應的鍵值 ip、time、action、url 和 code 設定資料類型
建立完成以後回到剛才的 Project 可以看到建立的 logstore , 然後即可進行日志查詢等管理動作
告警
code 400 | SELECT COUNT(*) as total
觸發告警
watch -n 1 ' curl http://wordpress.default.kubedemo.com/wp-admin/admin-ajax.php'
過一分鐘左右可以看到郵件告警通知
Autoscaler
簡單壓測
可以到
下載下傳二進制檔案,然後執行如下所示的指令開始壓測。
hey -z 15s -c 30 "http://wordpress.default.kubedemo.com/" && kubectl get pods
knload 壓測工具
- https://github.com/knative-sample/knload
- token-server : https://github.com/knative-sample/token-server
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境
壓測資料展示
下載下傳
壓測結果檔案,下載下傳後直接用浏覽器打開即可檢視
壓測的并發數陡增導緻服務響應時間抖動,但随着 Pod 數量的自動擴容 RT 很快就恢複到了正常水位。
OSS 事件觸發
- 安裝 MNSOSS Chart 包
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境 - namespace 開啟預設 broker
kubectl label namespace default knative-eventing-injection=enabled --overwrite
- 安裝 mnsoss source 配置
kubectl apply -f mnsoss.yaml
- 詳情參考: https://yq.aliyun.com/articles/706126
- 實驗原理
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境 - 向 OSS 中上傳一張帶有人像的圖檔
- OSS 上傳圖檔的事件自動觸發 Knative 人臉識别程式執行,并且生成一張新圖檔。新圖檔中有人像性别的辨別。
- 更多場景
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境
清理環境
- 取消 Istio 自動注入
kubectl label namespace default istio-injection-
- 解除安裝 Knative 元件
基于Knative開發應用準備工作部署 WordPressCICD 自動化運維操作AutoscalerOSS 事件觸發清理環境