1. 项目介绍

项目介绍内容直接贴出官方的,官网的介绍比我介绍的好,直接贴过来了:

2. 部署到k8s集群

2.1. 项目分析

  1. 官方提供了docker镜像,可以直接使用
  2. 官方的docker部署命令docker run --name twikoo -e TWIKOO_THROTTLE=1000 -p 8080:8080 -v ${PWD}/data:/app/data -d imaegoo/twikoo,我们进行分析
  3. 需要指定环境变量TWIKOO_THROTTLE和挂载数据卷/app/data
  4. 容器内服务端口为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
---
  1. 指定了replicas: 1表示只创建一个pod
  2. app的标签为app: twikoo
  3. 指定了nodeSelector: twikoo: enable表示只在拥有twikoo: enable标签的节点上创建pod
  4. 指定了环境变量TWIKOO_THROTTLE的值为1000
  5. 指定了容器内的端口为8080
  6. 挂载了一个名为data-volume的数据卷,挂载到了容器内的/app/data目录
  7. 指定了hostPath: /mnt/twikoo/data表示将宿主机的/mnt/twikoo/data目录挂载到了data-volume数据卷
  8. 镜像拉取策略为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
---
  1. 指定了selector: app: twikoo表示将app: twikoo的pod加入到service中
  2. 指定了端口8080
  3. 指定了type: ClusterIP表示创建一个ClusterIP类型的service
  4. ClusterIP类型的service只能在集群内部访问,但我可以配置ingress来让外部访问
  5. ClusterIP类型的service的访问端口为8080
  6. 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
---
  1. 指定了ingressClassName: nginx表示使用ingress-nginx作为ingress
  2. 配置了host: twikoo.gucat.vip表示访问twikoo.gucat.vip域名时,将请求转发到twikooservice
  3. 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 ~]# kubectl get all -n twikoo
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集群中👏👏👏