Serverless集群搭建:Knative
文章目录
- Knative搭建
- 1.准备工作
- 安装Kubernetes
- 安装 Istio
- 2.部署Knative
Knative搭建
搭建流程图:
1.准备工作
准备工作
● 本安装操作中的步骤 bash 适用于 MacOS 或 Linux 环境。对于 Windows,某些命令可能需要调整。
● 本安装操作假定您具有现有的 Kubernetes 集群,可以在其上轻松安装和运行Alpha 级软件。
● Knative 需要 Kubernetes 集群 v1.14 或更高版本,以及可兼容 kubectl。
安装Kubernetes
这就无需多言了直接安装即可。(本文版本为1.23)
[root@master ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-64cc74d646-7tjcg 1/1 Running 0 27s
kube-system calico-node-24lwx 1/1 Running 0 27s
kube-system calico-node-cnhbg 1/1 Running 0 27s
kube-system calico-node-x6hxn 1/1 Running 0 27s
kube-system coredns-6d8c4cb4d-rxdlv 1/1 Running 0 2m8s
kube-system coredns-6d8c4cb4d-wwk7v 1/1 Running 0 2m8s
kube-system etcd-master 1/1 Running 0 2m24s
kube-system kube-apiserver-master 1/1 Running 0 2m24s
kube-system kube-controller-manager-master 1/1 Running 0 2m24s
kube-system kube-proxy-dtntn 1/1 Running 0 2m2s
kube-system kube-proxy-fdzk4 1/1 Running 0 2m7s
kube-system kube-proxy-mzj6c 1/1 Running 0 2m9s
kube-system kube-scheduler-master 1/1 Running 0 2m24s
安装 Istio
Knative 依赖 Istio 进行流量路由和入口。您可以选择注入 Istio sidecar 并启用Istio 服务网格,但是并非所有 Knative 组件都需要它。如果您的云平台提供了托管的 Istio 安装,则建议您以这种方式安装 Istio,除非您需要自定义安装功能。如果您希望手动安装 Istio,或者云提供商不提供托管的 Istio 安装,或者您要使用 Minkube 或类似的本地安装 Knative
Master | 192.168.100.10 | docker,kubectl,kubeadm,kubelet |
---|---|---|
Node1 | 192.168.100.20 | docker,kubectl,kubeadm,kubelet |
Node2 | 192.168.100.30 | docker,kubectl,kubeadm,kubelet |
在此不在过多赘述。
下载 Istio,下载内容将包含:安装文件、示例和 istioctl 命令行工具。我的kubernetes集群版本为1.23.0,所以选取Istio1.17.0版本进行搭建。
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.0 TARGET_ARCH=x86_64 sh -
将 istioctl 客户端路径增加到 path 环境变量中
[root@master ~]# vi /etc/profile
export PATH=/root/istio-1.17.0/bin:$PATH
[root@master ~]# source /etc/profile
用于快速启动一个带有基本功能的 Istio 环境。这个配置会部署 Istio 的核心控制平面组件(如 Pilot、Citadel、Galley 等)以及为每个应用服务的 Pod 自动注入 Envoy 代理。
[root@master ]# cd istio-1.17.0/
[root@master istio-1.17.0]# istioctl manifest apply --set profile=demo
使用命令查看:
[root@master istio-1.17.0]# istioctl verify-install
查看pod
确保关联的 Kubernetes pod 已经部署,并且 STATUS 为 Running:
[root@master istio-1.17.0]# kubectl get pod -n istio-system
对外暴露istio-gateway接口
[root@master ~]# kubectl edit svc istio-ingressgateway -n istio-system
##将type接口更改为No的Port
service/istio-ingressgateway edited
[root@master ~]# kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway NodePort 10.107.99.250 <none> 15021:31668/TCP,80:31296/TCP,443:31680/TCP,31400:30111/TCP,15443:31671/TCP 7d19h
2.部署Knative
在应用 net-istio 配置之前,确保 knative-serving 命名空间已经创建。
安装 Knative 与 Istio 集成的网络层组件(net-istio
),目的是让 Knative 通过 Istio 管理流量(如网关、路由、安全策略),并创建了相关资源(如 Gateway、Service、Webhook 等),确保 Knative 服务可通过 Istio 入口对外暴露。
[root@master ~]# kubectl create namespace knative-serving
namespace/knative-serving created
[root@master ~]# kubectl apply -f https://github.com/knative/net-istio/releases/download/knative-v1.7.1/net-istio.yaml
clusterrole.rbac.authorization.k8s.io/knative-serving-istio created
gateway.networking.istio.io/knative-ingress-gateway created
gateway.networking.istio.io/knative-local-gateway created
service/knative-local-gateway created
configmap/config-istio created
peerauthentication.security.istio.io/webhook created
peerauthentication.security.istio.io/domainmapping-webhook created
peerauthentication.security.istio.io/net-istio-webhook created
deployment.apps/net-istio-controller created
deployment.apps/net-istio-webhook created
secret/net-istio-webhook-certs created
service/net-istio-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.istio.networking.internal.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.istio.networking.internal.knative.dev created
安装 Knative Serving v1.7.1 版本的自定义资源定义(CRD),这些 CRD(如 Configurations
、Revisions
、Routes
等)扩展了 Kubernetes API,使集群能够识别和管理 Knative 的核心资源,支撑无服务器应用的核心功能(如流量路由、版本管理、自动扩缩等),为后续部署 Knative Serving 组件提供基础。
[root@master ~]# kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.7.1/serving-crds.yaml
customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/clusterdomainclaims.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/domainmappings.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/ingresses.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/metrics.autoscaling.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/podautoscalers.autoscaling.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/revisions.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/routes.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/serverlessservices.networking.internal.knative.dev created
customresourcedefinition.apiextensions.k8s.io/services.serving.knative.dev created
customresourcedefinition.apiextensions.k8s.io/images.caching.internal.knative.dev created
部署 Knative Serving v1.7.1 核心组件,包括权限配置(RBAC)、自动扩缩控制器(autoscaler
)、流量管理(activator
)、域名映射(domain-mapping
)等核心功能。
[root@master istio-1.17.0]# kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.7.1/serving-core.yaml
Warning: resource namespaces/knative-serving is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
namespace/knative-serving configured
clusterrole.rbac.authorization.k8s.io/knative-serving-aggregated-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/knative-serving-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/knative-serving-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-serving-namespaced-edit created
clusterrole.rbac.authorization.k8s.io/knative-serving-namespaced-view created
clusterrole.rbac.authorization.k8s.io/knative-serving-core created
clusterrole.rbac.authorization.k8s.io/knative-serving-podspecable-binding created
serviceaccount/controller created
clusterrole.rbac.authorization.k8s.io/knative-serving-admin created
clusterrolebinding.rbac.authorization.k8s.io/knative-serving-controller-admin created
clusterrolebinding.rbac.authorization.k8s.io/knative-serving-controller-addressable-resolver created
customresourcedefinition.apiextensions.k8s.io/images.caching.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/clusterdomainclaims.networking.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/domainmappings.serving.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/ingresses.networking.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/metrics.autoscaling.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/podautoscalers.autoscaling.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/revisions.serving.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/routes.serving.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/serverlessservices.networking.internal.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/services.serving.knative.dev unchanged
secret/serving-certs-ctrl-ca created
secret/knative-serving-certs created
image.caching.internal.knative.dev/queue-proxy created
configmap/config-autoscaler created
configmap/config-defaults created
configmap/config-deployment created
configmap/config-domain created
configmap/config-features created
configmap/config-gc created
configmap/config-leader-election created
configmap/config-logging created
configmap/config-network created
configmap/config-observability created
configmap/config-tracing created
Warning: autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+
horizontalpodautoscaler.autoscaling/activator created
poddisruptionbudget.policy/activator-pdb created
deployment.apps/activator created
service/activator-service created
deployment.apps/autoscaler created
service/autoscaler created
deployment.apps/controller created
service/controller created
deployment.apps/domain-mapping created
deployment.apps/domainmapping-webhook created
service/domainmapping-webhook created
horizontalpodautoscaler.autoscaling/webhook created
poddisruptionbudget.policy/webhook-pdb created
deployment.apps/webhook created
service/webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.serving.knative.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.serving.knative.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.domainmapping.serving.knative.dev created
secret/domainmapping-webhook-certs created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.domainmapping.serving.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.serving.knative.dev created
secret/webhook-certs created
镜像无法拉取怎么办嘞?
有梯子的小伙伴有福了,Docker 单独配置网络代理:
[root@master ~]# mkdir -p /etc/systemd/system/docker.service.d
[root@master ~]# vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.180.83:7890"
Environment="HTTPS_PROXY=http://192.168.180.83:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.cluster.local,.svc,.internal.gcr.io"
// 最好开国外的地址进行代理。
查看Knative的Pod状态
[root@master istio-1.17.0]# kubectl get pods -n knative-serving
NAME READY STATUS RESTARTS AGE
activator-54cdf744fb-bgkcr 1/1 Running 0 61s
autoscaler-684495f859-f6nt8 1/1 Running 0 61s
controller-865d96c97f-gj5gp 1/1 Running 0 61s
domain-mapping-5d488c9654-pthss 1/1 Running 0 61s
domainmapping-webhook-54d46d9b6c-4bb2q 1/1 Running 0 61s
net-istio-controller-549f854f4-rh6k8 1/1 Running 0 51s
net-istio-webhook-f9bdbc6f9-wdjk5 1/1 Running 0 51s
webhook-65984d8585-4jp5l 1/1 Running 0 61s
Knative Serving中部署serving-hpa.yaml组件,本质上是为Knative服务启用Kubernetes原生的HPA(Horizontal Pod Autoscaler)自动扩缩能力。部署serving-hap:
[root@master ]# kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.7.1/serving-hpa.yaml
deployment.apps/autoscaler-hpa created
service/autoscaler-hpa created
Knative Eventing安装
- 创建 Knative Eventing 的核心 自定义资源定义(CRDs),包括
Broker
(事件路由中枢)、Trigger
(事件触发器)、Channel
(消息通道)等抽象资源类型。 - 为事件驱动架构奠定基础,允许定义事件源(如
PingSource
)、事件处理流程(如Sequence
)等高级功能。
[root@master ]# kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.7.1/eventing-crds.yaml
customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/containersources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/parallels.flows.knative.dev created
customresourcedefinition.apiextensions.k8s.io/pingsources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/sequences.flows.knative.dev created
customresourcedefinition.apiextensions.k8s.io/sinkbindings.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev created
安装 Eventing 的核心组件
- 创建
knative-eventing
命名空间及控制器(如eventing-controller
)、权限控制(RBAC)、配置管理(ConfigMaps)等核心资源。 - 事件中枢控制层:通过
eventing-webhook
提供动态准入控制,确保事件资源的合规性;eventing-controller
负责协调事件流生命周期(如 Broker/Trigger 的创建与更新)。 - 关键能力:支持事件路由、过滤、持久化等基础功能,为 Serverless 事件驱动场景提供标准化接口。
[root@master ~]# kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.7.1/eventing-core.yaml
namespace/knative-eventing created
serviceaccount/eventing-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-resolver created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-source-observer created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-sources-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-manipulator created
serviceaccount/pingsource-mt-adapter created
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-pingsource-mt-adapter created
serviceaccount/eventing-webhook created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook created
rolebinding.rbac.authorization.k8s.io/eventing-webhook created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook-resolver created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook-podspecable-binding created
configmap/config-br-default-channel created
configmap/config-br-defaults created
configmap/default-ch-webhook created
configmap/config-ping-defaults created
configmap/config-features created
configmap/config-kreference-mapping created
configmap/config-leader-election created
configmap/config-logging created
configmap/config-observability created
configmap/config-sugar created
configmap/config-tracing created
deployment.apps/eventing-controller created
deployment.apps/pingsource-mt-adapter created
Warning: autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+
horizontalpodautoscaler.autoscaling/eventing-webhook created
poddisruptionbudget.policy/eventing-webhook created
deployment.apps/eventing-webhook created
service/eventing-webhook created
customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/containersources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/parallels.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/pingsources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sequences.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sinkbindings.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev unchanged
clusterrole.rbac.authorization.k8s.io/addressable-resolver created
clusterrole.rbac.authorization.k8s.io/service-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/serving-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/channel-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/broker-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/flows-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/eventing-broker-filter created
clusterrole.rbac.authorization.k8s.io/eventing-broker-ingress created
clusterrole.rbac.authorization.k8s.io/eventing-config-reader created
clusterrole.rbac.authorization.k8s.io/channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/meta-channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-messaging-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-flows-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-sources-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-bindings-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-edit created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-view created
clusterrole.rbac.authorization.k8s.io/knative-eventing-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-pingsource-mt-adapter created
clusterrole.rbac.authorization.k8s.io/podspecable-binding created
clusterrole.rbac.authorization.k8s.io/builtin-podspecable-binding created
clusterrole.rbac.authorization.k8s.io/source-observer created
clusterrole.rbac.authorization.k8s.io/eventing-sources-source-observer created
clusterrole.rbac.authorization.k8s.io/knative-eventing-sources-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-webhook created
role.rbac.authorization.k8s.io/knative-eventing-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.eventing.knative.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.eventing.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.eventing.knative.dev created
secret/eventing-webhook-certs created
mutatingwebhookconfiguration.admissionregistration.k8s.io/sinkbindings.webhook.sources.knative.dev created
部署完成后,查看Pod状态:
[root@master ~]# kubectl get pods -n knative-eventing
NAME READY STATUS RESTARTS AGE
eventing-controller-578d46cb89-b5c79 1/1 Running 0 19s
eventing-webhook-54bc4585b5-hmdmc 1/1 Running 0 19s
安装 Kafka 控制器
- 扩展 Knative Eventing 以支持 Kafka 作为事件后端,创建 Kafka 相关 CRDs(如
KafkaSource
、KafkaChannel
)。 - 部署
kafka-controller
和kafka-webhook
,实现 Kafka 集群与 Knative 的事件桥接。 - 核心价值:将 Kafka 的高吞吐、持久化消息队列特性引入 Knative,允许消费/生产 Kafka 主题事件,构建混合云事件驱动架构。
[root@master ~]# kubectl apply -f https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-controller.yaml
configmap/kafka-broker-config created
configmap/kafka-channel-config created
customresourcedefinition.apiextensions.k8s.io/kafkachannels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/consumers.internal.kafka.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/consumergroups.internal.kafka.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/kafkasinks.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/kafkasources.sources.knative.dev created
clusterrole.rbac.authorization.k8s.io/eventing-kafka-source-observer created
configmap/config-kafka-source-defaults created
configmap/config-kafka-descheduler created
configmap/config-kafka-features created
configmap/config-kafka-leader-election created
configmap/config-kafka-scheduler created
configmap/kafka-config-logging created
configmap/config-tracing configured
clusterrole.rbac.authorization.k8s.io/knative-kafka-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/knative-kafka-channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/kafka-controller created
serviceaccount/kafka-controller created
clusterrolebinding.rbac.authorization.k8s.io/kafka-controller created
clusterrolebinding.rbac.authorization.k8s.io/kafka-controller-addressable-resolver created
deployment.apps/kafka-controller created
clusterrole.rbac.authorization.k8s.io/kafka-webhook-eventing created
serviceaccount/kafka-webhook-eventing created
clusterrolebinding.rbac.authorization.k8s.io/kafka-webhook-eventing created
mutatingwebhookconfiguration.admissionregistration.k8s.io/defaulting.webhook.kafka.eventing.knative.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/pods.defaulting.webhook.kafka.eventing.knative.dev created
secret/kafka-webhook-eventing-certs created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.kafka.eventing.knative.dev created
deployment.apps/kafka-webhook-eventing created
service/kafka-webhook-eventing created
安装 KafkaChannel 数据平面
- 创建 Kafka 数据通道 的实现组件(如
kafka-channel-dispatcher
和kafka-channel-receiver
)。 - 通道作用:在服务间提供可靠的事件传输层,确保事件通过 Kafka Topic 持久化,避免数据丢失。
- 场景适配:适用于需要高吞吐、有序事件传递的场景(如订单处理流水线)。
[root@master ~]# kubectl apply -f https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-channel.yaml
configmap/config-kafka-channel-data-plane created
clusterrole.rbac.authorization.k8s.io/knative-kafka-channel-data-plane created
serviceaccount/knative-kafka-channel-data-plane created
clusterrolebinding.rbac.authorization.k8s.io/knative-kafka-channel-data-plane created
deployment.apps/kafka-channel-dispatcher created
deployment.apps/kafka-channel-receiver created
service/kafka-channel-ingress created
安装Broker层
- 将 Kafka 作为 事件总线(Broker) 后端,替代默认的 in-memory Broker,提升事件系统的可靠性和扩展性。
- 部署
kafka-broker-dispatcher
和kafka-broker-receiver
,实现事件从 Kafka 到服务的路由(通过 Triggers)。 - 生产级优势:支持大规模事件分发、多租户隔离、死信队列(DLQ)等企业级特性,适合关键业务事件处理。
[root@master ~]# kubectl apply -f https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-broker.yaml
configmap/config-kafka-broker-data-plane created
clusterrole.rbac.authorization.k8s.io/knative-kafka-broker-data-plane created
serviceaccount/knative-kafka-broker-data-plane created
clusterrolebinding.rbac.authorization.k8s.io/knative-kafka-broker-data-plane created
deployment.apps/kafka-broker-dispatcher created
deployment.apps/kafka-broker-receiver created
service/kafka-broker-ingress created
查验集群状态:
[root@master ~]# kubectl get pods -n knative-eventing
NAME READY STATUS RESTARTS AGE
eventing-controller-578d46cb89-b5c79 1/1 Running 0 7m49s
eventing-webhook-54bc4585b5-hmdmc 1/1 Running 0 7m49s
kafka-broker-dispatcher-57df55bb4-d2rjq 1/1 Running 0 2m4s
kafka-broker-receiver-69f4dcfd97-4gfxn 1/1 Running 0 2m4s
kafka-channel-dispatcher-fffc6796f-kvlmj 1/1 Running 0 2m12s
kafka-channel-receiver-7655dcc69d-826qg 1/1 Running 0 2m12s
kafka-controller-5875747ddc-tvzq5 1/1 Running 0 2m18s
kafka-webhook-eventing-57cfbd8b44-rqw2h 1/1 Running 0 2m18s
关于以上所有的yaml文件无法在集群搭建的问题,我们可以使用梯子下载所有的yaml文件,上传至master节点,依次执行,但是每个节点都要配置Docker代理,不然就会出现镜像无法拉取的问题!!
至此,Knative集群搭建完成。
Knative集群标志着企业级无服务器及事件驱动架构平台的落地,其基于Kubernetes和Istio的深度融合,不仅实现了服务自动扩缩、流量精准路由和灰度发布等核心能力,还通过Knative Eventing与Kafka的集成构建了高可靠事件总线,支撑实时数据流处理与异步任务调度。该平台将开发运维复杂度大幅降低,使开发者聚焦业务逻辑,同时通过资源动态优化显著提升基础设施利用率,为微服务敏捷迭代、突发流量应对、跨系统事件驱动场景提供开箱即用的云原生底座,加速企业向现代化、弹性化应用架构的转型进程。
后续的学习我们慢慢来。
Running 0 2m18s
[外链图片转存中...(img-JAhAEbEB-1744804666881)]关于以上所有的yaml文件无法在集群搭建的问题,我们可以使用梯子下载所有的yaml文件,上传至master节点,依次执行,但是每个节点都要配置Docker代理,不然就会出现镜像无法拉取的问题!!至此,Knative集群搭建完成。Knative集群标志着企业级无服务器及事件驱动架构平台的落地,其基于Kubernetes和Istio的深度融合,不仅实现了服务自动扩缩、流量精准路由和灰度发布等核心能力,还通过Knative Eventing与Kafka的集成构建了高可靠事件总线,支撑实时数据流处理与异步任务调度。该平台将开发运维复杂度大幅降低,使开发者聚焦业务逻辑,同时通过资源动态优化显著提升基础设施利用率,为微服务敏捷迭代、突发流量应对、跨系统事件驱动场景提供开箱即用的云原生底座,加速企业向现代化、弹性化应用架构的转型进程。后续的学习我们慢慢来。
相关文章:
Serverless集群搭建:Knative
文章目录 Knative搭建1.准备工作安装Kubernetes安装 Istio 2.部署Knative Knative搭建 搭建流程图: 1.准备工作 准备工作 ● 本安装操作中的步骤 bash 适用于 MacOS 或 Linux 环境。对于 Windows,某些命令可能需要调整。 ● 本安装操作假定您具有现有…...
今日行情明日机会——20250416
指数在区间震荡,还需要等突破下跌趋势企稳 2025年4月16日涨停的主要行业方向分析 1. 外贸(9家涨停) 细分领域:跨境物流、纺织出口、供应链服务。代表个股: 五板:泰慕士(纺织服装出口龙头&…...
STM32基础教程——DMA
目录 前言 编辑 技术实现 接线图 代码实现 技术要点 DMA时钟 DMA初始化 DMA数据传输设置 数据改变与显示 实验结果 问题记录 前言 DMA(Direct Memory Access)直接存储器存取,用来提供在外设和存储器 之间或者存储器和存储器之间的高速数据传输。无需…...
Node.js 中文件系统模块(`fs`)的详细总结,包括定义、作用、各种写入方式及使用场景
Node.js 中文件系统模块(fs)的详细总结,包括定义、作用、各种写入方式及使用场景: 🧩 一、fs 模块简介 ✅ 定义 fs(File System)是 Node.js 官方内置模块,用于实现对文件和目录的操…...
MyBatis与MyBatis-Plus:字段自动填充的两种实现方式
目录 1. 使用 MyBatis 拦截器实现字段自动填充 2. 使用 MyBatis-Plus 实现字段自动填充 1. 使用 MyBatis 拦截器实现字段自动填充 实现步骤 创建拦截器 实现 MyBatis 的 Interceptor 接口,通过拦截 MyBatis 执行的 SQL 操作来自动填充公共字段 Intercepts({Signa…...
比特率、码元速率(波特率)的定义、关系及相关计算公式
一、相关定义 (一)比特率 比特率(Bit Rate):单位时间内传输的二进制比特数,是信息传输速率的度量。单位:比特每秒(bit/s,bps)。公式:比特率 传…...
炫云平台全面支持Blender4.4云渲染
随着世界渲染大赛众多优秀作品被大家关注,Blender作为建模渲染一体化的软件,也是众多3D艺术家最常用的软件之一。云渲染自然是提升创作效率必不可少的工作。这篇文章说一下炫云云渲染平台近期对Blender云渲染支持的情况。 首先,炫云客户端已经…...
Python自学第1天:变量,打印,类型转化
突然想学Python了。经过Deepseek的推荐,下载了一个Python3.12安装。安装过程请自行搜索。 乖乖从最基础的学起来,废话不说了,上链接,呃,打错了,上知识点。 变量的定义 # 定义一个整数类型的变量 age 10#…...
Flutter 从零到一
iOS 调试与开发工具指南 真机调试 Xcode run 在控制台获取 Dart VM service URIVSCode 点击 Cmd Shift P 选择 Debug: Attach to Flutter on Device粘贴 the URI 后点击 Enter 对于iOS开发者来说,使用appuploader这样的iOS开发助手可以简化真机调试的准备工作。…...
ocr-身份证正反面识别
在阿里云官网,申请一个token [阿里官方]身份证OCR文字识别_API专区_云市场-阿里云 (aliyun.com) 观察一下post请求body部分json字符串,我们根据这个创建一个java对象 先默认是人像面 public class IdentityBody {public String image;class configure…...
深入解析Spring Boot核心组件及其关键功能
【版本:spring-boot-2.1.3.RELEASE】 深入Spring Boot核心组件 Spring Boot是一个流行的框架,简化了基于Spring的应用程序的开发和部署。它通过自动配置和“开箱即用”的特性,使得开发者可以快速启动和运行应用程序。在Spring Boot中&#x…...
JVM 调优不再难:AI 工具自动生成内存优化方案
在 Java 应用程序的开发与运行过程中,Java 虚拟机(JVM)的性能调优一直是一项极具挑战性的任务,尤其是内存优化方面。不合适的 JVM 内存配置可能会导致应用程序出现性能瓶颈,甚至频繁抛出内存溢出异常,影响业…...
分层式设备控制架构、分布式微服务架构及插件化架构
在现代高端装备制造(如半导体设备、精密自动化系统)中,分层式设备控制架构、分布式微服务架构和插件化架构是提升系统灵活性、实时性和可扩展性的核心技术。以下从设计原理、实现方式及行业应用三个维度展开说明:  1.…...
上门服务 APP 30 亿营收商业模式在乌干达的技术赋能与实践
不久前,非洲乌干达出现黑人女技师提供上门足疗服务的消息引发关注。据了解,当地一次40分钟的上门按摩服务仅需约40元人民币,价格仅为国内同类服务的十分之一。这一现象折射出全球健康服务行业正在经历的数字化转型浪潮。 国内领先的上门服务平…...
Chemical Review IF=51.4 综述 | 柔性机器人的当下与未来:材料、技术与应用的深度融合
2025.03.31. 新加坡南洋理工大学研究团队在《Chemical Reviews》期刊上发表 “Soft Materials and Devices Enabling Sensorimotor Functions in Soft Robots” 综述型文章。软机器人的传感器运动功能对其与环境交互至关重要,本文全面综述了相关软材料和设备。传感技…...
Python抽象基类
abstractmethod 详解 abstractmethod 是 Python 中 abc 模块(Abstract Base Classes,抽象基类)提供的一个装饰器,用于定义抽象方法。抽象方法是一种在基类中声明但不实现具体逻辑的方法,强制子类必须实现该方法。以下…...
计算机网络中各种物理量的单位总结
在计算机网络中,数据速率的单位容易混淆,以下是清晰总结: 一、基本单位区分 比特(bit)与字节(Byte) 小写 b 表示 比特(bit),是数据传输的基本单位。 大写 B…...
PCIE网卡驱动DMA初始化配置
1. DMA 启用的时机 e1000e 驱动在 设备初始化阶段 启用 DMA,具体步骤如下: (1) PCIe 设备初始化 调用路径: e1000_probe() → e1000_sw_init() → e1000_init_hw() → e1000_configure() 关键操作: 启用 PCIe 设备的 DMA 主控模…...
音视频小白系统入门笔记-1
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 课程传送门:音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门:音视频小白系统入门笔记-0 课程实践代码仓库:传送门 音频采集 命令行采集 Android端音频…...
技术速递|使用 BrowserStack App Automate 和 Appium UI 测试 .NET MAUI 应用
作者:Sweeky&Gerald 排版:Alan Wang 本文是 Gerald 的博客《开始使用 Appium 测试 .NET MAUI 应用的 UI 》中创建的 .NET MAUI – 使用 Appium 和 NUnit 进行 UI 测试的续篇。 在本篇博客中,我们将了解如何使用 BrowserStack App Automa…...
在多系统环境中实现授权闭环,Tetra Pak 借助CodeMeter打造食品工业的安全自动化体系
一、 行业背景与安全新挑战 在食品加工自动化不断深化的背景下,食品安全、功能安全与知识产权保护的需求日益迫切。Tetra Pak 作为全球领先的食品加工和包装解决方案提供商,业务遍布 160 多个国家,涵盖从配料混合、碳酸化处理到全线自动包装。…...
Nginx+SpringBoot跨域那些事儿(多域名跨域加强版——Nginx配置详解)
嘿,小伙伴们,咱们接着上回书说到,当你的应用需要支持多个域名跨域访问时,Nginx+SpringBoot这对黄金搭档绝对是你的不二之选!今天,咱们就深入聊聊如何在Nginx中配置多个域名跨域,让你的应用更加灵活、强大! 一、跨域问题再科普(多域名跨域场景) 在前后端分离开发中,…...
基于Python的App流量大数据分析与可视化方案
一、引言 App流量数据通常包括用户的访问时间、停留时间、点击行为、页面跳转路径等信息。这些数据分散在不同的服务器日志、数据库或第三方数据平台中,需要通过有效的技术手段进行整合和分析。Python在数据科学领域的广泛应用,得益于其简洁的语法、强大…...
windows下使用nginx + waitress 部署django
架构介绍 linux一般采用nginx uwsgi部署django,在Windows下,可以取代uwsgi的选项包括Waitressa、Daphnea、Hypercoma和Gunicorna(通过WSLa 运行)。windows服务器一般采用nginx waitress 部署django,,他们的关系如下 django是WEB应用…...
openssh离线一键升级脚本分享(含安装包)
查看当前的版本 [rootmyoracle ~]#ssh -V相关安装包下载地址 openssh下载地址:http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下载地址:https://www.openssl.org/source/zlib下载地址:http://www.zlib.net/今天演示从7.4升级…...
【专题刷题】双指针(二)
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
Ubuntu服务器中了木马且处于局域网内无法直接通过公网正向连接
如果你的Ubuntu服务器中了木马且处于局域网内无法直接通过公网正向连接,可以尝试以下方法进行应急响应和恢复控制: 一、尝试通过局域网内部访问(优先方案) 如果攻击者未完全封锁你的权限,且你有局域网内其他机器的控制权: 通过跳板机连接: 使用同一局域网内的其他机器…...
Day09 【基于LSTM实现文本加标点的任务】
基于LSTM实现文本加标点的任务 目标数据准备参数配置数据处理模型构建定义模型结构前向传播方法优化器选择 主程序测试与评估类初始化模型评估统计记录显示统计结果 测试结果 目标 本文基于给定的词表,将输入的文本基于jieba分词分割为若干个词,然后基于…...
SQL刷题日志(day2)
1、timestampdiff:计算时间间隔 timestampdiff(unit,start_date,end_date) 参数说明: unit:返回的时间单位,如minute,hour等start_date:开始日期end_date:结束日期 2、dense_rank(ÿ…...
仿 ElementUI 搭建自己的 vue 组件库
仿 ElementUI 搭建自己的 vue 组件库 一、创建 my-ui-can 项目1. 新建项目2. 自定义组件3. 创建 MyButton 组件4. 导出组件5. package.json 二、发布到 npm 仓库1. npm 账号注册(忽略)2. 发布 my-ui-can 二、项目引用 my-ui-can 依赖包方式一:…...
CentOS 操作系统下搭建 tsung性能测试环境
写在前面 为何这么安装,实际就是这么做的,这是经过好几次实践得出的经验总结。 这为了让大家更清楚的知道怎么安装 tsung性能测试环境,按步照搬的安装即可。 步骤 1、 下载软件安装包 CentOS-6.0-x86_64-bin-DVD1.iso jdk-6u4-linux-x64-rpm.bin erlang: otp_src_1…...
基于YOLOv9的课堂行为检测系统
基于YOLOv9的课堂行为检测系统 项目概述 本项目是一个基于YOLOv9深度学习模型的课堂行为检测系统,旨在通过计算机视觉技术自动识别和监测课堂中学生的各种行为状态,帮助教师更好地了解课堂教学效果。 项目结构 课堂行为检测/ ├── data/ │ ├──…...
Linux常见工具的基本使用,同时介绍了编译过程和动/静态链接的原理
目录 一、工具的本质 二、一些常用的工具 1.yum 2.vim 1)vim的三种基本模式: 2)vim的基本操作 ①命令模式下的基本操作: ②插入模式: ③底行模式: 3)vim的配置:让他变得更好用 3.gcc…...
6.(vue3.x+vite)动态挂载组件并传递参数和方法
1:效果截图 2:父组件代码 <template><div id="cesiumID"></div><div>子组件使用方法传递给父组件的值:{...
大数据人工智能
在大数据人工智能领域,需要具备多种算法和深度学习知识,以下是一些常见的: 机器学习算法 - 线性回归:用于建立输入特征与连续型输出变量之间的线性关系,常用于预测数值型数据。 - 逻辑回归:主要用于二分类…...
Vue3 nextTick
nextTick 是 Vue 中非常重要的一个 API,它允许你在 DOM 更新周期后执行延迟回调。 核心源码位置 Vue3 的 nextTick 实现主要在 packages/runtime-core/src/scheduler.ts 文件中。 基本实现 const resolvedPromise Promise.resolve() as Promise<any> let …...
快速入手-基于python和opencv的人脸检测
1、安装库 pip install opencv-python 如果下载比较卡的话,指向国内下载地址: pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 2、下载源码 https://opencv.org/ windows11对应的版本下载: https://pan.baidu…...
第七节:React HooksReact 18+新特性-并发模式(Concurrent Mode)解决了什么问题?
• 考点:可中断渲染、优先级调度、startTransition使用场景 • 示例:搜索框输入防抖优化 React Hooks 进阶:自定义 Hook 设计实战指南(以 useWindowSize 和 useFetch 为例) 一、自定义 Hook 设计规范 在实现 useWind…...
jwt的无感刷新
jwt无感刷新 如果没有引入额外的刷新机制,JWT 过期后后续请求就会因验证失败而拒绝,导致用户需要重新登录,从而被“强制下线”。为实现无感刷新,可以考虑以下几种方案: 引入 Refresh Token 双 token 机制:…...
Linux:安装 CentOS 7(完整教程)
文章目录 一、简介二、安装 CentOS 72.1 虚拟机配置2.2 安装CentOS 7 三、连接远程服务器(扩展)3.1 获取虚拟机 IP 地址3.2 连接远程服务器 四、结语 一、简介 CentOS(Community ENTerprise Operating System)是一个基于 Linux 的…...
【YOLOv8改进- Backbone主干】CVPR2025 MambaOut :为图像分类任务设计的轻量级模型,曼巴永存!
YOLOV8目标检测创新改进与实战案例专栏 专栏目录: YOLOV8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOV8基础解析+创新改进+实战案例 介绍 摘要 “曼巴(Mamba)是一种具有状态空间模型(SSM)的…...
thanos与VictoriaMetrics对比
Thanos 和 VictoriaMetrics 都是开源的时序数据库(TSDB)解决方案,通常用于存储、查询和管理大规模的时间序列数据,尤其是监控数据。尽管它们在功能上有一些重叠,但它们各自的设计目标、架构、以及适用场景存在差异。以…...
ubuntu 24.02部署java web服务
ubuntu 24.02 版本推荐使用jdk 21版本部署java web服务,开发后先使用sudo java -jar xxx.jar验证运行结果。 jdk安装:sudo apt install openjdk-21-jdk-headless 编辑服务文本 [Unit] DescriptionWebMgr Java Application Afternetwork.target mysql.…...
时序数据预测:TDengine 与机器学习框架的结合(一)
一、引言 在当今数字化时代,时序数据如潮水般涌来,广泛存在于物联网、工业监控、金融交易、气象监测等众多领域。这些按时间顺序记录的数据蕴含着丰富的信息,对其进行准确预测,能够为企业和组织的决策提供有力支持,带…...
SvelteKit 最新中文文档教程(20)—— 最佳实践之性能
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
Spark-SQL核心编程(二)(三)
Spark-SQL核心编程(二) DSL 语法 DataFrame 提供一个特定领域语言(domain-specific language, DSL)去管理结构化的数据。 可以在 Scala, Java, Python 和 R 中使用 DSL,使用 DSL 语法风格不必去创建临时视图了。 1.创建一个 DataFrame val d…...
Godot学习-创建简单动画
文章目录 1、准备工作Godot资源 2、创建项目3、创建结点4、创建动画1、创建动画2、添加轨道3、创建关键帧3.1 第一个关键帧3.2 第二个关键帧 5、加载后自动播放6、动画循环7、轨道设置1、轨道更新模式2、轨迹插值3、其他属性的关键帧4、编辑关键帧5、使用 RESET 轨道6、洋葱皮 …...
新加坡太白私募:金融创新与稳健发展的典范
在全球金融市场的版图中,新加坡太白私募正以其独特的魅力和卓越的表现,成为众多投资者关注的焦点。作为一家在新加坡注册成立的私募机构,太白私募自诞生以来,便凭借着创新的理念、专业的团队和稳健的运营,在激烈的市场…...
[MySQL] 事务管理(二) 事务的隔离性底层
事务的隔离性底层 1.数据库并发的场景2.读-写2.1MVCC三个变量2.1.1 3个记录隐藏列字段2.1.2 undo日志 模拟MVCCselect 的读取2.1.3 Read View(读视图) 3.RR与RC的区别 1.数据库并发的场景 读-读:不存在问题,也不需要并发控制读-写…...
【Netty篇】EventLoopGroup 与 EventLoop 详解
目录 开场白:话说 Netty 江湖第一段:EventLoopGroup——“包工头”的角色第二段:EventLoop——“身怀绝技的工人”第三段:EventLoop 如何处理 I/O 事件、普通任务和定时任务第四段:Handler 执行中如何换人?…...