给出一份k8s资源清单用于部署springboot项目,并且外网可以访问,支持高可用,给出3套方案
时间: 2023-08-21 22:04:17 浏览: 139
好的,下面是三种部署方案:
方案一:使用Deployment和Service
1.编写Deployment YAML文件,例如:
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: your-image-name
ports:
- containerPort: 8080
```
2.编写Service YAML文件,例如:
```
apiVersion: v1
kind: Service
metadata:
name: springboot-app
spec:
selector:
app: springboot-app
ports:
- name: http
port: 80
targetPort: 8080
type: LoadBalancer
```
3.将上述两个文件分别通过 kubectl apply 命令部署到 Kubernetes 集群中即可。Service 中的 type: LoadBalancer 表示是一个 LoadBalancer 类型的 Service,可以通过外部 IP 访问到应用。
方案二:使用StatefulSet和Service
1.编写StatefulSet YAML文件,例如:
```
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
serviceName: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: your-image-name
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: data
```
2.编写Service YAML文件,例如:
```
apiVersion: v1
kind: Service
metadata:
name: springboot-app
spec:
selector:
app: springboot-app
ports:
- name: http
port: 80
targetPort: 8080
type: LoadBalancer
```
3.创建一个 PersistentVolumeClaim,用于存储应用的数据:
```
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```
4.将上述三个文件分别通过 kubectl apply 命令部署到 Kubernetes 集群中即可。StatefulSet 会创建出来两个有序的 Pod,Service 中的 type: LoadBalancer 表示是一个 LoadBalancer 类型的 Service,可以通过外部 IP 访问到应用。
方案三:使用Deployment和Ingress
1.编写Deployment YAML文件,例如:
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: your-image-name
ports:
- containerPort: 8080
```
2.编写Service YAML文件,例如:
```
apiVersion: v1
kind: Service
metadata:
name: springboot-app
spec:
selector:
app: springboot-app
ports:
- name: http
port: 80
targetPort: 8080
type: ClusterIP
```
3.编写Ingress YAML文件,例如:
```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: springboot-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: your-domain-name.com
http:
paths:
- path: /springboot
pathType: Prefix
backend:
service:
name: springboot-app
port:
name: http
```
4.将上述三个文件分别通过 kubectl apply 命令部署到 Kubernetes 集群中即可。Ingress 可以将外部流量路由到指定的 Service 上,Service 可以将请求转发到 Pod 中的容器。需要注意的是,Ingress 需要一个 Ingress Controller 来执行具体的路由操作,需要先部署一个 Ingress Controller 才能使用 Ingress。
阅读全文