ASK集群无需管理节点,无需进行节点的安全维护等运维操作,满足您对应用托管的免运维诉求,让您关注在应用而非底层基础设施管理。本文介绍如何通过ASK部署在线Web应用,实现应用免运维托管。
背景信息
ASK支持标准Kubernetes的语义和API,您可以一键创建Deployment、StatefulSet、Jobs、Service、Ingress或CRD等资源,也可以使用Helm部署各种Kubernetes生态应用。
操作步骤
- 通过kubectl工具连接集群。
- 使用以下样例创建名为nginx.yaml的YAML文件。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 80
protocol: TCP
selector:
app: nginx
type: LoadBalancer
---
apiVersion: apps/v1 #对于不同的K8s版本这里需要使用不同的对应版本。
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
cpu: "2"
memory: "4Gi"
说明 K8s版本和Deployment的
apiVersion对应关系如下:
- K8s 1.6版本之前:
extensions/v1beta1
- K8s 1.6版本到1.9版本之间:
apps/v1beta1
- K8s 1.9版本之后:
apps/v1
- 执行以下命令,部署Nginx示例应用。
kubectl apply -f nginx.yaml
预期输出:
service/nginx-service created
deployment.apps/nginx-deploy created
- 查看Pod和Serivce状态,并通过SLB IP访问Nginx应用。
- 执行以下命令,查看Pod状态。
kubectl get pod
预期输出:
nginx-deploy-55d8dcf755-bxk8n 1/1 Running 0 36s
nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 36s
- 执行以下命令,查看Serivce状态。
kubectl get svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.**.*.* <none> 443/TCP 10d
nginx-service LoadBalancer 172.19.*.*** 47.57.**.** 80:32278/TCP 39s
- 执行以下命令,通过SLB IP访问Nginx应用。
curl 47.57.**.**
预期输出:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
- 扩容Deployment。
- 执行以下命令,查看Deployment。
kubectl get deploy
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deploy 2/2 2 2 9m32s
- 执行以下命令,扩容Deployment。
kubectl scale deploy nginx-deploy --replicas=10
预期输出:
deployment.extensions/nginx-deploy scaled
- 执行以下命令,查看扩容后的Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
nginx-deploy-55d8dcf755-8jlz2 1/1 Running 0 39s
nginx-deploy-55d8dcf755-9jbzk 1/1 Running 0 39s
nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 38s
nginx-deploy-55d8dcf755-bxk8n 1/1 Running 0 10m
nginx-deploy-55d8dcf755-cn6x9 1/1 Running 0 38s
nginx-deploy-55d8dcf755-jsqjn 1/1 Running 0 38s
nginx-deploy-55d8dcf755-lhp8l 1/1 Running 0 38s
nginx-deploy-55d8dcf755-r2clb 1/1 Running 0 38s
nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 10m
nginx-deploy-55d8dcf755-xspnt 1/1 Running 0 38s
- 配置HPA,可以让应用随着负载压力自动进行弹性扩容。当应用的CPU负载增高时,将水平扩容出更多的Pod副本。
- 执行以下命令,将应用副本缩容到1个。
kubectl scale deploy nginx-deploy --replicas=1
预期输出:
deployment.extensions/nginx-deploy scaled
- 执行以下命令,查看Pod。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 16m
- 执行以下命令,配置HPA。
kubectl autoscale deployment nginx-deploy --cpu-percent=50 --min=1 --max=10
预期输出:
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled
- 执行以下命令,查看HPA。
kubectl get hpa
预期输出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx-deploy Deployment/nginx-deploy 0%/30% 1 10 1 35s