我想尝试在GKE上使用NATS Operator

首先

我想在Kubernetes上使用消息服务,所以尝试运行了NATS。起初我想找Helm的Chart,但没找到,于是我在NATS官方的Github账号上找到了Operator,于是尝试使用了它。

NATS运算符
https://github.com/nats-io/nats-operator

NATS 是什么?

NATS是一个简单而高效的开源消息传递服务,与Kubernetes一样,它也是CNCF(Cloud Native Computing Foundation)项目的一部分。根据官方网站的表述,NATS适用于云原生应用程序、物联网消息传递以及微服务架构。

NATS服务器是用Go语言实现的,而NATS客户端则存在多种语言的实现版本。

NATS(消息传递技术)
https://nats.io/

“操作员”指的是

Operator通过CoreOS公司提出的Kubernetes自定义资源的机制来扩展Kubernetes API,并将运维技术融入到应用程序特定的控制器中,以创建、配置和管理复杂的有状态应用程序实例。通过使用Operator,可以像使用Kubernetes的内置资源(如Deployment、ReplicaSet等)一样,通过声明性配置来创建、配置和管理复杂的有状态应用程序。

引入运算符:将操作知识融入软件中

运算符
https://coreos.com/operators/

作为Operator的实现示例,可以创建、配置和管理etcd集群的etcd Operator,以及创建、配置和管理Prometheus集群的Prometheus Operator。

etcd运维人员
https://github.com/coreos/etcd-operator

Prometheus运算符

部署一个 NATS 运算员

不论如何,我将在GKE上创建一个Kubernetes集群。

$ gcloud container clusters create nats-cluster \
    --zone asia-northeast1-a

为了允许自己的用户进行授权,将拥有cluster-admin权限。
虽然NATS操作员的说明文件中没有提到此步骤,但在GKE的情况下,似乎需要执行该步骤。

问题#36
https://github.com/nats-io/nats-operator/issues/36

$ kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
clusterrolebinding "cluster-admin-binding" created

将Operator部署。Operator作为Kubernetes上的Pod运行。
在此清单中,它将部署到名为nats-io的Namespace中。

$ kubectl apply -f https://raw.githubusercontent.com/nats-io/nats-operator/master/example/deployment-rbac.yaml
namespace "nats-io" created
serviceaccount "nats-operator" created
deployment "nats-operator" created
clusterrolebinding "nats-io:nats-operator-binding" created
clusterrole "nats-io:nats-operator" created

已部署了代表NATS集群的自定义资源和其控制器Operator。

$ kubectl -n nats-io get crd
NAME                   AGE
natsclusters.nats.io   10s
$ kubectl -n nats-io get pod
NAME                            READY     STATUS    RESTARTS   AGE
nats-operator-8df7578c4-5cb2t   1/1       Running   0          5s

创建由3个节点组成的NATS集群。
可以使用名为NatsCluster的自定义资源声明性地创建、配置和管理NATS集群。方便!

$ echo '
apiVersion: "nats.io/v1alpha2"
kind: "NatsCluster"
metadata:
  name: "example-nats-cluster"
spec:
  size: 3
  version: "1.1.0"
' | kubectl -n nats-io apply -f -
natscluster "example-nats-cluster" created

确认 NATS 集群已创建。

$ kubectl -n nats-io get natsclusters
NAME                   AGE
example-nats-cluster   10s
$ kubectl -n nats-io get pod
NAME                            READY     STATUS    RESTARTS   AGE
nats-46m7xr10zr                 1/1       Running   0          42s
nats-operator-8df7578c4-5cb2t   1/1       Running   0          2m
nats-tjrt32ggsh                 1/1       Running   0          32s
nats-tv9q9x0xrk                 1/1       Running   0          22s

确认适用于NAT集群的服务。
NATS客户端可以通过NatsCluster自定义资源中预先定义的example-nats-cluster名称来访问NATS集群。

$ kubectl -n nats-io get svc
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
example-nats-cluster        ClusterIP   10.47.246.213   <none>        4222/TCP            1m
example-nats-cluster-mgmt   ClusterIP   None            <none>        6222/TCP,8222/TCP   1m

考试

为NATS订阅者启动容器。

$ kubectl -n nats-io run -i --tty nats-sub --image=golang --restart=Never

If you don't see a command prompt, try pressing enter.

root@nats-sub:/go

为了测试,我们将准备公式的Github存储库中的订阅者示例程序。

root@nats-sub:/go# wget https://raw.githubusercontent.com/nats-io/go-nats/master/examples/nats-sub.go
root@nats-sub:/go# go get "github.com/nats-io/go-nats"

我会从订阅者那里订阅到hoge主题。

root@nats-sub:/go# go run nats-sub.go -s nats://example-nats-cluster:4222 hoge
Listening on [hoge]

从另一个控制台启动NATS发布者的容器。

$ kubectl -n nats-io run -i --tty nats-pub --image=golang --restart=Never

If you don't see a command prompt, try pressing enter.

root@nats-sub:/go

与订阅者类似,我们会在官方的Github代码库中提供示例发布者程序的代码。

root@nats-pub:/go# wget https://raw.githubusercontent.com/nats-io/go-nats/master/examples/nats-pub.go
root@nats-pub:/go# go get "github.com/nats-io/go-nats"

从发布者发布一条消息到hoge主题。

root@nats-pub:/go# go run nats-pub.go -s nats://example-nats-cluster:4222 hoge hello
Published [hoge] : 'hello'

在订阅者端,您可以按照以下方式接收消息。

[#1] Received on [hoge]: 'hello'

结束了

请编写以下内容的中文同义句,只需要一种选项:

参考

探索 NATS Pub Sub
https://nats.io/documentation/tutorials/nats-pub-sub/
探索 NATS Pub Sub
https://nats.io/documentation/tutorials/nats-pub-sub/

广告
将在 10 秒后关闭
bannerAds