基于Knative开发应用


title: (三)基于Knative开发应用

目录

  • 安装 Istio
  • 安装 Knative
  • 玩转 helloworld-go
  • WordPress 实战

创建 Kubernetes 集群

  • 确保 Kubernetes 集群创建的时候已经选择了启用日志服务
  • 确保 Kubernetes 集群和 OSS 在一个 region
  • Kubernetes 集群创建的时候需要开启 kube-apiserver 公网访问
  • 提前帮用户配置好 kubeconfig 命令行

安装 Istio

安装 Istio 时注意以下几点:

  • 默认要安装 gateway
  • 日志服务和 Xtrace 要提前开通,Istio 需要使用 ZipKin v1 向 Xtrace 汇报监控数据

在容器服务集群管理页面可以直接在目标集群上部署 Istio

安装 Knative

选择好目标集群使用一键部署功能直接安装即可, 安装文档

玩转 helloworld-go

  • 配置日志采集策略
  • 部署 Helloworld
  • 监控告警
  • 调用链
  • 压测数据展示

日志管理

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

设置数据导入方式

选择 Docker标准输出

  • 配置容器标准输出日志采集策略
{
  "inputs": [
    {
      "detail": {
        "IncludeEnv": {
          "K_SERVICE": "helloworld-go"
        },
        "IncludeLabel": {},
        "ExcludeLabel": {}
      },
      "type": "service_docker_stdout"
    }
  ],
  "processors": [
    {
      "detail": {
        "KeepSource": false,
        "NoMatchError": true,
        "Keys": [
          "time",
          "level",
          "msg"
        ],
        "NoKeyError": true,
        "Regex": "(\\d+-\\d+-\\d+ \\d+:\\d+:\\d+)\\s+(\\w+)\\s+(*)",
        "SourceKey": "content"
      },
      "type": "processor_regex"
    }
  ]
}

分别为相应的键值 time、level 和 msg 设置数据类型

部署 Helloworld

  • 准备 kubeconfig

到容器服务控制台页面,打开集群详情页。复制 KubeConfig 内容保存到本地 ~/.kube/config 文件

多访问几次 helloworld-go 生成一些访问日志

./sample/run-test.sh

生成一些访问日志以后点击查询,即可查看相应的日志

日志服务控制台: https://sls.console.aliyun.com

日志服务有丰富的查询条件,比如查询 ERROR 日志

监控告警

使用下查询语句进行搜索,这条语句使用了 SELECT ,可以进行更高级别的操作。

level:ERROR | SELECT  COUNT(*) as total

搜索ERROR 日志,时间跨度选择一分钟。

点击另存为告警

触发条件的变量就是 左侧表格中的列名称

如下设置的含义是,1分钟检索一次 ERROR 日志的数量如果大于等于4 就告警。

可以设置多种告警通知方式,并且告警 body 还可以使用系统变量。获取告警的上下文信息。

打开邮件可以看到告警通知

调用链

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

调用链查询页面

压测数据展示

下载源文件: https://kstarter.oss-cn-beijing.aliyuncs.com/knload-result.html ,直接用浏览器打开即可查看

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

  • 压测工具 knload
  • server 端模拟:http-server

WordPress

  • 部署 WordPress
  • 修改主题和安装 plugin
  • OSS 图片添加水印
  • 现场互动压测

部署 WordPress

  • 工程

  • 部署 WordPress

    ## ENV 换成具体的值
              env:
              - name: WORDPRESS_DB_HOST
                value: {db_host:3306}
              - name: WORDPRESS_DB_NAME
                value: {db_name}
              - name: WORDPRESS_DB_USER
                value: {db_user}
              - name: WORDPRESS_DB_PASSWORD
                value: {db_password}
                
    ## 部署 WordPress  # kubectl apply -f /Users/qiulin.nql/works/github/knative-sample/secret/wordpress-service.yaml 
    kubectl apply -f sample/service.yaml
  • 添加 Egress

    kubectl apply -f sample/egress.yaml 
  • 访问 WordPress 服务

    ./hack/run-wp-test.sh
  • host 绑定 && 浏览器访问
  • 日志收集

    {
      "inputs": [
        {
          "detail": {
            "IncludeEnv": {
              "K_SERVICE": "wordpress"
            },
            "IncludeLabel": {},
            "ExcludeLabel": {}
          },
          "type": "service_docker_stdout"
        }
      ],
      "processors": [
        {
          "detail": {
            "KeepSource": false,
            "NoMatchError": true,
            "Keys": [
              "ip",
              "time",
              "req",
              "code"
            ],
            "NoKeyError": true,
            "Regex": "(\\d+.\\d+.\\d+.\\d+)\\s+-\\s+(\\d+/\\w+/\\d+:\\d+:\\d+:\\d+\\s\\+\\d+)\\s\"(.*)\"\\s(\\d+)",
            "SourceKey": "content"
          },
          "type": "processor_regex"
        }
      ]
    }

多并发测试

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

修改主题和安装 plugin

  • plugins

猜你喜欢

转载自yq.aliyun.com/articles/705455