iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
DevOps

玩耍開源k8s30天系列 第 16

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囉。


上一篇
day15 : NATS 、NATS Streaming、JetStream服務應用 on K8S (上)
下一篇
day17 : kafka服務應用 on K8S (上)
系列文
玩耍開源k8s30天31

尚未有邦友留言

立即登入留言