准备工作
安装 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
└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
47.95.139.84
└─# kubectl get ksvc wordpress --output=custom-columns=NAME:.metadata.name,DOMAIN:.status.domain
NAME DOMAIN
wordpress wordpress.default.kubedemo.com
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

CICD 自动化
例子: https://github.com/knative-sample/wordpress
运维操作
Tracing
到 https://tracing-analysis.console.aliyun.com/ 查看 tracing 信息
选择相应的 Region,点击应用列表查看应用列表

调用链查询页面



日志管理

设置数据导入方式

选择 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 压测工具
压测数据展示
下载压测结果文件 ,下载后直接用浏览器打开即可查看
压测的并发数陡增导致服务响应时间抖动,但随着 Pod 数量的自动扩容 RT 很快就恢复到了正常水位。
OSS 事件触发
- 安装 MNSOSS Chart 包
- namespace 开启默认 broker
kubectl label namespace default knative-eventing-injection=enabled --overwrite
kubectl apply -f mnsoss.yaml
清理环境
kubectl label namespace default istio-injection-
- 卸载 Knative 组件