基于Knative开发应用

准备工作

安装 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

基于Knative开发应用

选择启用链路追踪,点击【立即开通】 跳转到调用链页面获取接入点链接

基于Knative开发应用

到链路追踪页面开启日志服务授权

基于Knative开发应用

基于Knative开发应用

如下所示的状态标明已经开通成功

基于Knative开发应用

选择对应 region 的 ZipKin 内网 v1 的接入点
基于Knative开发应用

回到 Istio 页面粘贴接入点,继续安装。
基于Knative开发应用

部署 Knative

到容器服务的控制台上面选择好目标集群使用一键部署功能直接部署 Knative 安装文档

基于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

基于Knative开发应用

CICD 自动化

例子: https://github.com/knative-sample/wordpress

运维操作

Tracing

https://tracing-analysis.console.aliyun.com/ 查看 tracing 信息

选择相应的 Region,点击应用列表查看应用列表

基于Knative开发应用

调用链查询页面

基于Knative开发应用

基于Knative开发应用
基于Knative开发应用

日志管理

  • 日志服务控制台: https://sls.console.aliyun.com
  • 本示例以容器标准输出采集为例进行展示,详细设置步骤可以参考日志服务文档
  • 根据 Kubernetes 集群 ID 找到对应的日志服务 Project
  • 创建一个新的 Logstore

基于Knative开发应用

设置数据导入方式

基于Knative开发应用

选择 Docker标准输出

基于Knative开发应用

  • 配置容器标准输出日志采集策略
{
  "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 设置数据类型

基于Knative开发应用

创建完成以后回到刚才的 Project 可以看到创建的 logstore , 然后即可进行日志查询等管理动作

基于Knative开发应用

基于Knative开发应用

告警

code 400 | SELECT  COUNT(*) as total

触发告警

watch -n 1 ' curl http://wordpress.default.kubedemo.com/wp-admin/admin-ajax.php'

基于Knative开发应用

基于Knative开发应用

基于Knative开发应用

过一分钟左右可以看到邮件告警通知

基于Knative开发应用

Autoscaler

简单压测
可以到这里下载二进制文件,然后执行如下所示的命令开始压测。

hey -z 15s -c 30 "http://wordpress.default.kubedemo.com/" && kubectl get pods

knload 压测工具

压测数据展示
下载压测结果文件 ,下载后直接用浏览器打开即可查看

压测的并发数陡增导致服务响应时间抖动,但随着 Pod 数量的自动扩容 RT 很快就恢复到了正常水位。

OSS 事件触发

  • 安装 MNSOSS Chart 包
    基于Knative开发应用
  • 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开发应用
  • 向 OSS 中上传一张带有人像的图片
  • OSS 上传图片的事件自动触发 Knative 人脸识别程序执行,并且生成一张新图片。新图片中有人像性别的标识。
  • 更多场景
    基于Knative开发应用

清理环境

  • 取消 Istio 自动注入
kubectl label  namespace default istio-injection-
  • 卸载 Knative 组件
    基于Knative开发应用
上一篇:Redis 数据库


下一篇:AWK常用技巧