我想尝试在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/