1. 项目介绍
项目介绍内容直接贴出官方的,官网的介绍比我介绍的好,直接贴过来了:
2. 部署到k8s集群
2.1. 项目分析
- 官方提供了docker镜像,可以直接使用
- 官方的docker部署命令
docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8080:8080 -v ${PWD}/data:/app/data -d imaegoo/twikoo
,我们进行分析
- 需要指定环境变量
TWIKOO_THROTTLE
和挂载数据卷/app/data
- 容器内服务端口为8080
2.2. 配置清单
2.2.1 首先指定命名空间
这里我们直接创建一个twikoo
命名空间
1 2 3 4 5
| --- apiVersion: v1 kind: Namespace metadata: name: twikoo
|
2.2.2 创建Deployment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| --- apiVersion: apps/v1 kind: Deployment metadata: name: twikoo-deployment namespace: twikoo spec: replicas: 1 selector: matchLabels: app: twikoo template: metadata: labels: app: twikoo spec: nodeSelector: twikoo: enable containers: - name: twikoo image: imaegoo/twikoo imagePullPolicy: IfNotPresent env: - name: TWIKOO_THROTTLE value: "1000" ports: - containerPort: 8080 volumeMounts: - name: data-volume mountPath: /app/data volumes: - name: data-volume hostPath: path: /mnt/twikoo/data ---
|
- 指定了
replicas: 1
表示只创建一个pod
- app的标签为
app: twikoo
- 指定了
nodeSelector: twikoo: enable
表示只在拥有twikoo: enable
标签的节点上创建pod
- 指定了环境变量
TWIKOO_THROTTLE
的值为1000
- 指定了容器内的端口为
8080
- 挂载了一个名为
data-volume
的数据卷,挂载到了容器内的/app/data
目录
- 指定了
hostPath: /mnt/twikoo/data
表示将宿主机的/mnt/twikoo/data
目录挂载到了data-volume
数据卷
- 镜像拉取策略为
IfNotPresent
,表示如果本地没有镜像就拉取,如果有就不拉取
2.2.3 创建Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| --- apiVersion: v1 kind: Service metadata: name: twikoo namespace: twikoo spec: selector: app: twikoo ports: - name: http port: 8080 targetPort: 8080 type: ClusterIP ---
|
- 指定了
selector: app: twikoo
表示将app: twikoo
的pod加入到service中
- 指定了端口
8080
- 指定了
type: ClusterIP
表示创建一个ClusterIP
类型的service
ClusterIP
类型的service只能在集群内部访问,但我可以配置ingress来让外部访问
ClusterIP
类型的service的访问端口为8080
ClusterIP
类型的service的访问地址为twikoo.twikoo.svc.cluster.local
2.2.4 创建Ingress
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: {} name: twikoo.gucat.vip namespace: twikoo spec: ingressClassName: nginx rules: - host: twikoo.gucat.vip http: paths: - backend: service: name: twikoo port: number: 8080 path: / pathType: Prefix ---
|
- 指定了
ingressClassName: nginx
表示使用ingress-nginx作为ingress
- 配置了
host: twikoo.gucat.vip
表示访问twikoo.gucat.vip
域名时,将请求转发到twikoo
service
- tls没有配置在这里,我是在ingress-nginx的配置文件中配置的默认证书,该证书是泛域名证书,可以支持所有的子域名
2.3 部署twikoo到k8s集群
2.3.1 部署服务
1 2 3 4 5
| sudo mkdir -p /mnt/twikoo/data kubectl apply -f namespace.yaml kubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl apply -f ingress.yaml
|
2.3.2 查看服务
1
| kubectl get all -n twikoo
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@k8s-master1 ~] NAME READY STATUS RESTARTS AGE pod/twikoo-deployment-5d8bd749b-5djhx 1/1 Running 0 30h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/twikoo ClusterIP 100.55.77.238 <none> 8080/TCP 3d4h
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/twikoo-deployment 1/1 1 1 3d4h
NAME DESIRED CURRENT READY AGE replicaset.apps/twikoo-deployment-5d8bd749b 1 1 1 30h replicaset.apps/twikoo-deployment-d459f49bf 0 0 0 3d4h
|
🎉🎉🎉至此twikoo成功部署到了kubernetes集群中👏👏👏
在Kubernetes K8S集群中部署Twikoo评论系统的详细配置清单