Knative
- knative/community
- by Google
- KNative 提供标准化的 serverless 开发所需组件 - 提供基石
- OpenFaas、OpenWhisk 可以运行在 KNative 之上
- Gitlab 集成了 KNative 作为 Serveless 运行环境
- 注意
- 最低系统要求 3 节点 6vCPU 22.5G 内存 启用 RBAC
- knative 还不支持 istio 的 mTLS
- 如果配置失败会导致一直失败 - 如果一直出现 CrashLoopBackOff 需要检查配置
- 组件
- knative-eventing - 事件 - 管理和分发事件
- knative-serving - 服务 - 请求驱动的计算 - 可缩容到 0
- knative-monitoring - 监控和日志 - elastic/kibana/fluentd/prometheus
- 网络 - Gatway API
- Istio - 默认
- knative-sandbox/net-kourier
- Envoy proxy
- Ambassador, Contour, Gloo, Kong
- ingress-nginx#7517
- 事件源
- Ceph
- Apache CouchDB
- GitHub
- GitLab
- Apache Kafka
- NATS Streaming
- Prometheus
- RabbitMQ
- Redis
- knative 没有提供 helm,官方倾向于 operator
安装
# 任意 k8s 的安装逻辑
# 目前还没有正式发布 - 20191130 - 因此取到的是预发布版本
knative_version=$(curl -s https://api.github.com/repos/knative/serving/releases | jq -r '.[0].tag_name')
# crd 安装 - 避免 race conditions
kubectl apply --selector knative.dev/crd-install=true \
--filename https://github.com/knative/serving/releases/download/$knative_version/serving.yaml \
--filename https://github.com/knative/eventing/releases/download/$knative_version/release.yaml \
--filename https://github.com/knative/serving/releases/download/$knative_version/monitoring.yaml
# 再次执行
kubectl apply \
--filename https://github.com/knative/serving/releases/download/$knative_version/serving.yaml \
--filename https://github.com/knative/eventing/releases/download/$knative_version/release.yaml \
--filename https://github.com/knative/serving/releases/download/$knative_version/monitoring.yaml
# 安装完成查看安装内容
kubectl get pods --namespace knative-serving
kubectl get pods --namespace knative-eventing
kubectl get pods --namespace knative-monitoring
部署服务
# 部署一个服务
kubectl apply -f- <<YAML
apiVersion: serving.knative.dev/v1 # Knative 当前版本
kind: Service
metadata:
name: helloworld-go # 应用名字
namespace: default # 部署的空间
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go # 应用的镜像
env:
- name: TARGET # 环境变量定义
value: "Go Sample v1"
YAML
# 会获取到该服务的 URL
# 如果设置过域名,那么看到的就是带域名的 URL - 格式为 http://服务名.空间.域名 - 例如 http://helloworld-go.default.wener.me
# 查看域名配置 - kubectl get cm config-domain -n knative-serving -o jsonpath={.data}
kubectl get ksvc helloworld-go -n default
# 获取 URL
kubectl get route helloworld-go --output jsonpath="{.status.url}" -n default
# 实际服务访问是通过 istio-ingressgateway 暴露的
# 可通过 istio 的负载均衡地址进行访问
kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
# 删除服务
kubectl -n default delete ksvc helloworld-go