Macbook M3 单机部署k8s+RocketMQ

223 阅读3分钟

说明

Macbook M3是较新的电脑,配置也高,部署一整套开发环境是可能的。现在很多的软件都有了arm64v8的镜像,因此使用k8s进行各个软件的部署和管理是非常方便的。 目前网上没有完整的指南,在摸索并验证完成后,记录下此文,希望能帮到大家。

前置条件

安装好Docker Desktop;

安装k8s

按照官网的说明指南,完成k8s安装(不要使用第三方网站的文章指南,很可能因为过时导致安装失败)。

1.安装 kubectl

brew install kubectl

2.安装 dashboard

helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

这里创建了命令空间,请注意后面都会用到:

kubernetes-dashboard

3.创建server account

kubectl --namespace kubernetes-dashboard create serviceaccount k8s-linechain

4.创建用户的访问Token(每次登录都需要创建,过期后也需要创建新的)

kubectl --namespace kubernetes-dashboard create token k8s-linechain

5.授权访问账户k8s-linechain管理角色

kubectl create clusterrolebinding k8s-linechain --serviceaccount=kubernetes-dashboard:k8s-linechain --clusterrole=cluster-admin

附其它的一些有用的删除命令,对于重新创建账户有用:

delete sever account

kubectl --namespace kubernetes-dashboard delete serviceaccount k8s-linechain

delete authroize

kubectl delete clusterrolebinding k8s-linechain

6.启动 dashboard

kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443

打开浏览器,输入以下url地址,可以打开登录界面: https://localhost:8443/ 登录使用令牌,请使用以下命令创建令牌:

kubectl --namespace kubernetes-dashboard create token k8s-linechain

使用 k8s 创建应用RocketMQ

主要需要创建namesrv,broker,console,以及它们对应的服务。 因为是单机部署,每个服务使用NodePort对外开放访问。

登录进k8s dashboard

正常创建完成后,访问以下地址,可进入k8s控制台:

https://localhost:8443/

image.png

打开控制台,使用以下命令创建令牌:

kubectl --namespace kubernetes-dashboard create token k8s-linechain

将得到的令牌拷贝到上面的界面上的bearer token输入框,点击Sign in,即可登录进去:

image.png 按照下面的yml创建应用即可。

namesrv

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: rocketmq-namesrv
  name: rocketmq-namesrv
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-namesrv
  template:
    metadata:
      labels:
        app: rocketmq-namesrv
    spec:
      containers:
      - image: ahahavip/rocketmq:4.9.4-arm64
        name: rockermq-namesrv
        command: ["/bin/sh","mqnamesrv"]
        ports:
        - containerPort: 9876
          name: tcp-9876
          protocol: TCP

namesrv-server

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmq-dialevoneid
  name: rocketmq-dialevoneid
  namespace: default
spec:
  type: NodePort
  ports:
  - name: tcp-9876
    port: 9876
    protocol: TCP
    targetPort: 9876
    nodePort: 30001
  selector:
    app: rocketmq-namesrv

console

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: rocketmq-dashboard
  name: rocketmq-dashboard
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-dashboard
  template:
    metadata:
      labels:
        app: rocketmq-dashboard
    spec:
      containers:
      - env:
        - name: JAVA_OPTS
          value: -Drocketmq.namesrv.addr=rocketmq-dialevoneid:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false   #注意替换此处namesrv svc的名称
        image: candice0630/rocketmq-console-ng:2.0
        name: rocketmq-dashboard

console server

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmq-dashboard
  name: rocketmq-dashboard
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    nodePort: 30005
  selector:
    app: rocketmq-dashboard

broker

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: rocketmq-broker
  name: rocketmq-broker
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-broker
  template:
    metadata:
      labels:
        app: rocketmq-broker
    spec:
      containers:
      - env:
        - name: NAMESRV_ADDR
          value: rocketmq-dialevoneid:9876
        image: ahahavip/rocketmq:4.9.4-arm64
        command: ["/bin/sh","mqbroker"]
        name: rocketmq-broker
        ports:
        - containerPort: 10909
          name: tcp-10909
          protocol: TCP
        - containerPort: 10911
          name: tcp-10911
          protocol: TCP
        - containerPort: 10912
          name: tcp-10912
          protocol: TCP

broker server

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmq-broker
  name: rocketmq-broker
  namespace: default
spec:
  type: NodePort
  ports:
  - name: broker-port1
    port: 10909
    targetPort: 10909
    nodePort: 30002
  - name: broker-port2
    port: 10911
    targetPort: 10911
    nodePort: 30003
  - name: broker-port3
    port: 10912
    targetPort: 10912
    nodePort: 30004
  selector:
    app: rocketmq-broker