您可以通过访问ACK One Fleet实例,向多个集群下发Deployment、Service和Ingress等Kubernetes原生资源,包括创建应用相关的Kubernetes原生资源、创建应用部署目标、创建应用等,实现多集群复制部署和查看应用状态。本文通过示例应用的部署介绍ACK One Fleet实例如何分发应用。
前提条件
已开启舰队管理功能。具体操作,请参见开启舰队管理功能。
舰队的Fleet实例已添加多个关联集群。具体操作,请参见添加关联集群。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已安装AMC命令行工具。具体操作,请参见AMC命令行帮助。
创建应用
- 执行以下命令创建命名空间。替换
<your-namespace>
为待创建的命名空间名称。kubectl create namespace <your-namespace>
使用以下内容,创建app-meta.yaml文件,包括应用相关的Kubernetes原生资源。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: demo name: demo namespace: demo spec: replicas: 1 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:red name: demo --- apiVersion: v1 kind: Secret metadata: name: demo namespace: demo labels: app: demo type: Opaque data: version: MQ== --- apiVersion: v1 kind: ConfigMap metadata: name: demo-1 namespace: demo labels: app: demo data: version: "1" --- apiVersion: v1 kind: Service metadata: name: demo namespace: demo labels: app: demo spec: selector: app: demo ports: - protocol: TCP port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: demo labels: app: demo spec: rules: - host: app.demo.example.com http: paths: - path: / pathType: Prefix backend: service: name: demo port: number: 80
执行以下命令,在Fleet实例上部署应用
demo
。kubectl apply -f app-meta.yaml
使用以下内容,创建app.yaml,定义开源KubeVela Application demo,实现多集群分发。
执行以下命令,查看Fleet实例管理的关联集群,确定应用分发的目标集群。
kubectl get managedclusters
预期输出:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE managedcluster-c5**** true True True 12d managedcluster-c1**** true True True 12d
选择对应目标集群,替换如下示例中的
<clusterid1>
和<clusterid2>
为待发布的目标集群ID。apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: demo namespace: demo annotations: app.oam.dev/publishVersion: version1 spec: components: - name: demo type: ref-objects properties: objects: - apiVersion: apps/v1 kind: Deployment name: demo - apiVersion: v1 kind: ConfigMap selector: app: demo - apiVersion: v1 kind: Secret name: demo - apiVersion: v1 kind: Service name: demo - apiVersion: networking.k8s.io/v1 kind: Ingress name: demo policies: - type: topology name: beijing-clusters properties: clusters: ["<clusterid1>", "<clusterid2>"] # 定义下发的目标集群,如需更新目标集群,可在此字段新增或修改。
参数
说明
annotations. app.oam.dev/publishVersion
应用的版本控制,当应用或应用引用的Kubernetes资源发生变化时,必须更新此字段,才能触发向目标集群的分发。
components. type: ref-objects
通过
apiVersion
、kind
和name
引用同命名空间下的Kubernetes资源,应用将下发这些资源到目标关联集群中。目前ACK One支持的应用Kubernetes资源包括
Deployment/apps/v1
、Secret/v1
、ConfigMap/v1
、Ingress/networking.k8s.io/v1
。如有分发其他资源的需求,请提交工单联系ACK One团队。
policies. type: topology
定义应用资源的下发目标。
policies. properties. clusters
目前支持通过关联集群ID定义下发目标,一个下发目标可以包含一个或多个集群。
执行以下命令,在Fleet实例上部署应用
demo
。kubectl apply -f app.yaml
查看应用部署状态。
kubectl get app demo -n demo
预期输出:
NAME COMPONENT TYPE PHASE HEALTHY STATUS AGE demo demo ref-objects running true 24m
查看应用的多集群部署详情,获取各Kubernetes资源在每个目标集群的部署状态。
kubectl get app demo -n demo -o yaml ...... status: appliedResources: - apiVersion: apps/v1 cluster: <clusterid1> creator: workflow kind: Deployment name: demo namespace: demo - apiVersion: v1 cluster: <clusterid1> creator: workflow kind: ConfigMap name: demo-1 namespace: demo - apiVersion: v1 cluster: <clusterid1> creator: workflow kind: Secret name: demo namespace: demo - apiVersion: networking.k8s.io/v1 cluster: <clusterid1> creator: workflow kind: Ingress name: demo namespace: demo - apiVersion: apps/v1 cluster: <clusterid2> creator: workflow kind: Deployment name: demo namespace: demo - apiVersion: v1 cluster: <clusterid2> creator: workflow kind: ConfigMap name: demo-1 namespace: demo - apiVersion: v1 cluster: <clusterid2> creator: workflow kind: Secret name: demo namespace: demo - apiVersion: networking.k8s.io/v1 cluster: <clusterid2> creator: workflow kind: Ingress name: demo namespace: demo
查看Kubernetes资源在某个集群上的运行状态。
替换其中
<clusterid1>
为待查看的目标集群ID。kubectl amc get deployment demo -n demo -m <clusterid1>
预期输出:
Run on ManagedCluster <clusterid1> NAME READY UP-TO-DATE AVAILABLE AGE demo 1/1 1 1 28m
kubectl amc get pod -n demo -m <clusterid1>
预期输出:
Run on ManagedCluster <clusterid1> NAME READY STATUS RESTARTS AGE demo-7c96b5bffd-**** 1/1 Running 0 30m
更新应用引用的Kubernetes资源
如需更新应用引用的Kubernetes资源,请参考如下步骤操作。
通过
kubectl apply
命令,修改创建应用步骤2中的Kubernetes资源。您可以对Kubernetes资源做任意的修改,例如Deployment的image、Service的Port,
ConfigMap. Secret
中配置数据的修改,任何修改都会被同步到目标集群中。通过
kubectl apply
命令,修改创建应用步骤4中的Application资源。需要修改annotations: app.oam.dev/publishVersion: version1
以触发所引用的Kubernetes资源向目标集群的下发。例如可以修改
app.oam.dev/publishVersion
为version2
。
删除应用
执行以下命令删除应用。删除后对应目标集群上的Kubernetes资源将被删除。
kubectl delete app demo -n demo