day16 : NATS 、NATS Streaming、JetStream服务应用 on K8S (下)

昨天简略的介绍了今天会布署的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"

https://ithelp.ithome.com.tw/upload/images/20210916/20139661GCYf5RwwJ4.png

透过同样的方式取得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罗
https://ithelp.ithome.com.tw/upload/images/20210916/201396614RCeUAEbr6.png

接着来试试看jetstream 吧,由於jetstream也是以NATS为核心,所以依旧要有NATS,为了不要跟上面搞混,所以用另一个namespace nack

https://raw.githubusercontent.com/nats-io/k8s/master/nats-server/nats-js-leaf.yml
调整sts的volume设定
https://ithelp.ithome.com.tw/upload/images/20210916/20139661vEWu0W6t3F.png

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服务的连线设定
https://ithelp.ithome.com.tw/upload/images/20210916/201396615q9kFw8b9k.png

接着透过示例做出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如下
https://ithelp.ithome.com.tw/upload/images/20210916/20139661iFzDMH96Op.png
这样就可以来玩nats罗。


<<:  Day 01: 缘由、大纲

>>:  【Day 7】Dockerfile x 连千毅:从一排汉堡认识容器映像档

DAY 5 Big Data 5Vs – Volume(容量) - RedShift

相较於资料湖,另一个更常见的大数据储存系统是 — 资料仓储。和资料湖一样,资料仓储也用来储存巨量资料...

[Tableau Public] day 19:试着分析appstore资料集-4

今天来看看所有appstore商店中的app,从容量最大到最低的排序,好奇容量前五名大的app是什麽...

Day 1 Hello Playground!

今天是开赛第一天,我会透过接下来的30天,从基本的东西慢慢讲起,然後再慢慢地加深难度,可以说一边透过...

买大买小!下好离手 - 下单

shioaji 股票下单 contract = api.Contracts.Stocks.TSE.T...

Day 09 - 那个很常用到的 useState

如果有错误,欢迎留言指教~ Q_Q useState:让 component 拥有内部的 stat...