使用Rancher在Kubernetes上部署EMQ X叢集
本文描述如何通過Rancher2.0部署kubernetes叢集,並將EMQ X部署到kubernetes叢集上
實驗環境:
- 公有云環境:AWS EC2
- 作業系統:ubuntu 16.04
- Docker version:18.09.0
通過Rancher部署kubernetes叢集
Rancher的安裝以及部署kubernetes叢集的步驟推薦直接按照快速入門執行。
建立Rancher Api金鑰
EMQ X通過訪問kube-apiserver來實現自動叢集功能,在Rancher中,Rancher對kube-apiserver做了一層代理,在訪問kube-apiserver的時候必須提供用於向Rancher進行身份驗證的API金鑰。參考使用者手冊建立並儲存API Key。本實驗中建立的Access Key為:
token-dksbl
,Secret Key為:
pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz
,組合成的Token為:
token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz
下載並配置kubectl
- 下載並安裝kubectl
- 進入Rancher叢集頁面,點選Kubeconfig檔案。
將kubeconfig檔案儲存到
~/.kube/config
執行
kubectl cluster-info
驗證配置是否成功
$ kubectl cluster-infoKubernetes master is running at https://13.125.244.172/k8s/clusters/c-vvgjq
KubeDNS is running at https://13.125.244.172/k8s/clusters/c-vvgjq/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
訪問kube-apiserver
EMQ X通過訪問kube-apiserver來實現自動叢集,kube-apiserver的地址可以檢視
~/.ssh/config
檔案或者執行
kubectl cluster-info
獲取,本實驗中kube-apiserver的地址為:
https://13.125.244.172/k8s/clusters/c-vvgjq
。
直接訪問kube-apiserver,可以看到會報錯需要認證。
$ curl -k https://13.125.244.172/k8s/clusters/c-vvgjq{"type":"error","status":"401","message":"must authenticate"}
在頭部加上Authorization認證則可以正常訪問
$ curl -k -H 'Authorization: Bearer token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz' https://13.125.244.172/k8s/clusters/c-vvgjq
編輯emqx.yaml
在Kubernetes 上安裝 EMQ X 系列文章之二 :EMQ X 自動叢集一文中分享了EMQ X部署kubernetes叢集的yaml檔案如下,在Rancher上部署EMQ X叢集的話需要稍加改動。
$cat emqx.yaml
apiVersion: v1
kind: Service
metadata:
name: emqx
spec:
ports:
- port: 32333
nodePort: 32333
targetPort: emqx-dashboard
protocol: TCP
selector:
app: emqx
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: emqx
labels:
app: emqx
spec:
replicas: 2
template:
metadata:
labels:
app: emqx
spec:
containers:
- name: emqx
image: emqx/emqx:latest
ports:
- name: emqx-dashboard
containerPort: 18083
env:
- name: EMQX_CLUSTER__DISCOVERY
value: k8s
- name: EMQX_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__APISERVER
value: http://172.31.19.161:8080
- name: EMQX_CLUSTER__K8S__NAMESPACE
value: default
- name: EMQX_CLUSTER__K8S__SERVICE_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__ADDRESS_TYPE
value: ip
- name: EMQX_CLUSTER__K8S__APP_NAME
value: emqx
tty: true
EMQ X可以讀取
/var/run/secrets/kubernetes.io/serviceaccount/token
檔案中的內容組合Authorization認證訪問kube-apiserver,所以只需要把Rancher的API Token通過Secret掛載到容器中就可以了。
Secret解決了密碼、token、金鑰等敏感資料的配置問題,而不需要把這些敏感資料暴露到映象或者Pod Spec中。Secret可以以Volume或者環境變數的方式使用。
Secret有三種型別:
- Service Account :用來訪問Kubernetes API,由Kubernetes自動建立,並且會自動掛載到Pod的
/run/secrets/kubernetes.io/serviceaccount
目錄中;- Opaque :base64編碼格式的Secret,用來儲存密碼、金鑰等;
- kubernetes.io/dockerconfigjson :用來儲存私有docker registry的認證資訊。
首先對API Token做base64編碼
$ echo -n token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz | base64 -w 0dG9rZW4tZGtzYmw6cHNoaGhmNWNwOGQ1djV4N2J6amRtODJxZnJ3Z3g3ZjJiemtzbnI3NDhqNDJ4bWJ2dmtsYmR6
在yaml檔案中建立Secret
$vim emqx.yamlapiVersion: v1
kind: Secret
metadata:
name: emqx-secret
type: Opaque
data:
token: dG9rZW4tcGI2MjU6eDZ2eGJ0Y2NmdG1waGpseHR3NGNjdGN2d2txdzk5aDJzYmhxNHFtaDh4c2ZnbXd6dzJ0d2Rw
---
......
修改Deployment,將環境變數中的
EMQX_CLUSTER__K8S__APISERVER
改為Rancher的Kube-apiserver的地址,增加volumeMounts
$vim emqx.yaml......
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: emqx
labels:
app: emqx
spec:
replicas: 2
template:
metadata:
labels:
app: emqx
spec:
volumes:
- name: emqx-secret
secret:
secretName: emqx-secret
containers:
- name: emqx
image: emqx/emqx:latest
ports:
- name: emqx-dashboard
containerPort: 18083
- name: emqx-http
containerPort: 8083
- name: emqx-mqtt
containerPort: 1883
env:
- name: EMQX_CLUSTER__DISCOVERY
value: k8s
- name: EMQX_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__APISERVER
value: https://13.125.244.172/k8s/clusters/c-vvgjq
- name: EMQX_CLUSTER__K8S__NAMESPACE
value: default
- name: EMQX_CLUSTER__K8S__SERVICE_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__ADDRESS_TYPE
value: ip
- name: EMQX_CLUSTER__K8S__APP_NAME
value: emqx
tty: true
volumeMounts:
- name: emqx-secret
mountPath: "/var/run/secrets/kubernetes.io/serviceaccount"
readOnly: true
部署EMQ X
檢視修改後的emqx.yaml
$cat emqx.yamlapiVersion: v1
kind: Secret
metadata:
name: emqx-secret
type: Opaque
data:
token: dG9rZW4tcGI2MjU6eDZ2eGJ0Y2NmdG1waGpseHR3NGNjdGN2d2txdzk5aDJzYmhxNHFtaDh4c2ZnbXd6dzJ0d2Rw
---
apiVersion: v1
kind: Service
metadata:
name: emqx
spec:
ports:
- port: 32333
nodePort: 32333
targetPort: emqx-dashboard
protocol: TCP
selector:
app: emqx
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: emqx
labels:
app: emqx
spec:
replicas: 2
template:
metadata:
labels:
app: emqx
spec:
volumes:
- name: emqx-secret
secret:
secretName: emqx-secret
containers:
- name: emqx
image: emqx/emqx:latest
ports:
- name: emqx-dashboard
containerPort: 18083
- name: emqx-http
containerPort: 8083
- name: emqx-mqtt
containerPort: 1883
env:
- name: EMQX_CLUSTER__DISCOVERY
value: k8s
- name: EMQX_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__APISERVER
value: https://13.125.244.172/k8s/clusters/c-vvgjq
- name: EMQX_CLUSTER__K8S__NAMESPACE
value: default
- name: EMQX_CLUSTER__K8S__SERVICE_NAME
value: emqx
- name: EMQX_CLUSTER__K8S__ADDRESS_TYPE
value: ip
- name: EMQX_CLUSTER__K8S__APP_NAME
value: emqx
tty: true
volumeMounts:
- name: emqx-secret
mountPath: "/var/run/secrets/kubernetes.io/serviceaccount"
readOnly: true
部署EMQ X
$ kubectl create -f emqx.yamlsecret/emqx-secret created
service/emqx created
deployment.extensions/emqx created
檢視狀態
$ kubectl get podsNAME READY STATUS RESTARTS AGE
emqx-67b5fcf4d-gwzfn 1/1 Running 0 36s
emqx-67b5fcf4d-rb7m6 1/1 Running 0 36s
叢集成功
$ kubectl exec emqx-67b5fcf4d-gwzfn /opt/emqx/bin/emqx_ctl cluster statusCluster status: [{running_nodes,['emqx@10.42.1.24','emqx@10.42.2.19']}]
使用Rancher Dashboard部署EMQ X(可選)
刪除剛剛部署的EMQ X
$ kubectl delete -f emqx.yamlsecret "emqx-secret" deleted
service "emqx" deleted
deployment.extensions "emqx" deleted
進入Rancher叢集工作負載頁面,點選匯入YAML
在匯入頁面將emqx.yaml檔案的內容複製進去!
點選匯入,等待匯入成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69958136/viewspace-2669983/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes 上安裝 EMQ X 系列文章之三 :使用 Helm 管理、部署 EMQ X 叢集MQ
- 使用 Terraform 在 AWS 上快速部署 MQTT 叢集ORMMQQT
- 使用Gardener在GoogleCloudPlatform上建立Kubernetes叢集GoCloudUDPPlatform
- 使用Gardener在Google Cloud Platform上建立Kubernetes叢集GoCloudPlatform
- 使用 Terraform 在阿里雲上快速部署 MQTT 叢集ORM阿里MQQT
- Rancher 系列文章-在騰訊雲的 K3S 上安裝高可用 Rancher 叢集
- 容器化 | 在 Kubernetes 上部署 RadonDB MySQL 叢集MySql
- Kubernetes 叢集搭建(上)
- Kubernetes部署叢集Mysql服務MySql
- 在華為雲 OSC 上快速部署 EMQX MQTT 叢集MQQT
- Rancher2.1從搭建叢集到pipeline部署專案
- 使用 Kubeadm+Containerd 部署一個 Kubernetes 叢集AI
- Rancher系列文章-Rancher v2.6使用指令碼實現匯入叢集指令碼
- Kubernetes 部署 Nebula 圖資料庫叢集資料庫
- 基於containerd 部署 kubernetes 1.28叢集AI
- 在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建
- 使用 MQTTLens 接入 EMQ X CloudMQQTCloud
- 使用docker部署hadoop叢集DockerHadoop
- PostgreSQL-HA 高可用叢集在 Rainbond 上的部署方案SQLAI
- Nginx + Docker 手動叢集方式執行 EMQNginxDockerMQ
- 在大規模 Kubernetes 叢集上實現高 SLO 的方法
- Ubuntu上kubeadm安裝Kubernetes叢集Ubuntu
- 從零開始建立 EMQ X MQTT 伺服器的 K8S 叢集MQQT伺服器K8S
- 在 AWS EKS 上部署 EMQX MQTT 叢集MQQT
- 容器化 | 在 KubeSphere 中部署 MySQL 叢集MySql
- 使用 MQTTBox 接入 EMQ X CloudMQQTCloud
- Kubernetes實戰:高可用叢集的搭建和部署
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- Kubernetes(k8s)部署redis-cluster叢集K8SRedis
- 在Rainbond上部署高可用Apollo叢集AI
- 實踐展示openEuler部署Kubernetes 1.29.4版本叢集
- 使用 MQTT.fx 接入 EMQ X CloudMQQTCloud
- 使用 MQTT Explorer 接入 EMQ X CloudMQQTCloud
- 1.還不會部署高可用的kubernetes叢集?看我手把手教你使用二進位制部署v1.23.6的K8S叢集實踐(上)K8S
- RabbitMQ系列(五)使用Docker部署RabbitMQ叢集MQDocker
- 多雲部署又添新「雲」,EMQ X Cloud 正式支援騰訊雲部署MQCloud
- 使用 Kind 搭建你的本地 Kubernetes 叢集
- 使用Kubeadm搭建高可用Kubernetes叢集