步骤 | 操作 | 代码示例
-------|---------|----------
1 | 创建Deployment | ```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: app-pod
template:
metadata:
labels:
app: app-pod
spec:
containers:
- name: app-container
image: example/app:latest
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 5
```
2 | 创建Service | ```yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: app-pod
```
3 | 创建Ingress | ```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
```
4 | 创建HorizontalPodAutoscaler | ```yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app-deployment
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 50
```
接下来,我会对每一步进行解释,并给出相应的代码示例。
第一步,我们需要创建一个Deployment来部署我们的应用。Deployment是Kubernetes中一种对象,用来管理Pod的创建和更新。在这个Deployment中,我们设置了replicas为3,即会创建3个Pod实例;selector指定了要控制的Pod的标签;template指定了Pod的模板。在template中,我们定义了一个容器app-container,镜像为example/app:latest,并且设置了livenessProbe和readinessProbe来进行自动探活。
第二步,我们需要创建一个Service来暴露我们的应用。Service是Kubernetes中一种对象,用来将Pod暴露为网络服务。在这个Service中,我们将80端口映射到了Pod的8080端口,并通过selector指定了要转发流量的Pod标签。
第三步,我们需要创建一个Ingress来将外部流量路由到我们的应用。Ingress是Kubernetes中一种对象,用来管理应用的访问策略。在这个Ingress中,我们设置了example.com为访问域名,并将所有流量都转发到app-service上。
第四步,我们可以创建一个HorizontalPodAutoscaler来自动水平扩展我们的应用。HorizontalPodAutoscaler是Kubernetes中一种对象,用来根据应用的负载情况自动调整Pod的数量。在这个HorizontalPodAutoscaler中,我们将目标对象设置为app-deployment,最小副本数为2,最大副本数为10,并设置目标CPU利用率为50%。
通过以上四步,我们就实现了kubernetes自动探活的功能。Deployment负责管理Pod的创建和更新,Service负责暴露应用,Ingress负责流量转发,HorizontalPodAutoscaler负责根据负载情况自动调整Pod的数量。我们可以通过以上示例代码来实现这四步操作,将其保存为yaml文件,并通过kubectl apply命令来创建相应的Kubernetes对象。