昨天简略的介绍了今天会布署的NATS,虽然NATS Streaming要被弃用了,不过我还是会介绍一下。
之前的安装全部都是透过k8s基础的resource编写yaml,对於管理者来说每一次的配置也许可以透过helm或是kustomize等等方式调整,但是还是不太方便,因此诞生了一种基於固定服务而生的crd 叫operator,接下来将会大量透过operator来管理应用。
NATS operator
从官方的git上写到配置可以分为只能在单独的namespace或是整座cluster,基於管理上的方便,我是使用了单独的namespace的方式,首先建立一个独立的namespaces
kubectl create ns nats
接着下载官方的两个yam档案
https://github.com/nats-io/nats-operator/releases/latest/download/00-prereqs.yaml
https://github.com/nats-io/nats-operator/releases/latest/download/10-deployment.yaml
并将其中的namespace从default修改为nats,然後apply 这两个resource,就可以透过CRD去扩展NATS instance
apiVersion: nats.io/v1alpha2
kind: NatsCluster
metadata:
name: ithome-nats-cluster
spec:
size: 3
version: "1.3.0"
透过同样的方式取得nats streaming的CRD
https://raw.githubusercontent.com/nats-io/nats-streaming-operator/main/deploy/default-rbac.yaml
https://raw.githubusercontent.com/nats-io/nats-streaming-operator/main/deploy/deployment.yaml
apiVersion: nats.io/v1alpha2
kind: NatsCluster
metadata:
name: stan-nats
spec:
size: 3
version: "1.3.0"
and
apiVersion: streaming.nats.io/v1alpha1
kind: NatsStreamingCluster
metadata:
name: ithome-stan-cluster
spec:
natsSvc: stan-nats
config:
storeDir: /pv/stan
template:
spec:
volumes:
- name: stan-store-dir
persistentVolumeClaim:
claimName: streaming-pvc
containers:
- name: nats-streaming
volumeMounts:
- mountPath: /pv
name: stan-store-dir
pv和pvc则是另外准备好,就会自动创出对应的nats streaming cluster罗
接着来试试看jetstream 吧,由於jetstream也是以NATS为核心,所以依旧要有NATS,为了不要跟上面搞混,所以用另一个namespace nack
https://raw.githubusercontent.com/nats-io/k8s/master/nats-server/nats-js-leaf.yml
调整sts的volume设定
https://raw.githubusercontent.com/nats-io/nack/main/deploy/crds.yml
https://raw.githubusercontent.com/nats-io/nack/main/deploy/rbac.yml
https://raw.githubusercontent.com/nats-io/nack/main/deploy/deployment.yml
并修改一些namespace参数和nats服务的连线设定
接着透过示例做出stream跟push、pull的consumer来尝试使用NATS服务。
---
apiVersion: jetstream.nats.io/v1beta1
kind: Stream
metadata:
name: mystream
spec:
name: mystream
subjects: ["orders.*"]
storage: memory
maxAge: 1h
---
apiVersion: jetstream.nats.io/v1beta1
kind: Consumer
metadata:
name: my-push-consumer
spec:
streamName: mystream
durableName: my-push-consumer
deliverSubject: my-push-consumer.orders
deliverPolicy: last
ackPolicy: none
replayPolicy: instant
---
apiVersion: jetstream.nats.io/v1beta1
kind: Consumer
metadata:
name: my-pull-consumer
spec:
streamName: mystream
durableName: my-pull-consumer
deliverPolicy: all
filterSubject: orders.received
maxDeliver: 20
ackPolicy: explicit
全部建置完成後,现在我们可以使用的nats如下
这样就可以来玩nats罗。
>>: 【Day 7】Dockerfile x 连千毅:从一排汉堡认识容器映像档
相较於资料湖,另一个更常见的大数据储存系统是 — 资料仓储。和资料湖一样,资料仓储也用来储存巨量资料...
今天来看看所有appstore商店中的app,从容量最大到最低的排序,好奇容量前五名大的app是什麽...
今天是开赛第一天,我会透过接下来的30天,从基本的东西慢慢讲起,然後再慢慢地加深难度,可以说一边透过...
shioaji 股票下单 contract = api.Contracts.Stocks.TSE.T...
如果有错误,欢迎留言指教~ Q_Q useState:让 component 拥有内部的 stat...