说明
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控制台:
打开控制台,使用以下命令创建令牌:
kubectl --namespace kubernetes-dashboard create token k8s-linechain
将得到的令牌拷贝到上面的界面上的bearer token输入框,点击Sign in,即可登录进去:
按照下面的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