kubectl-sae工具快速入门

本文介绍kubectl-sae工具的使用方法和常用命令,帮助您快速入门并实现一些常见的业务需求。

前提条件

已安装kubectl-sae工具,并配置AccessKey ID、AccessKey Secret、应用部署地域,详见安装与配置kubectl-sae工具

管理命名空间

kubectl-sae工具支持创建、查看、删除命名空间,不支持更新命名空间。

创建命名空间

  1. 编写文件名为namespace.yaml的文件,示例文件的内容如下,其中包含命名空间的配置信息。

    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
        sae.aliyun.com/vpc-id: ${vpc-id} # 请将${vpc-id}替换为命名空间关联的VPC ID,格式为vpc-xxxxxxxxxxxxxxxxxxxxx
      name: ${namespace} # 请将${namespace}替换为命名空间名称
    spec: {}
  2. namespace.yaml文件所在路径执行以下命令,实现创建命名空间。

    kubectl-sae apply -f namespace.yaml

查看命名空间

执行以下命令,查看指定应用部署地域下已有的命名空间。

kubectl-sae get ns

输出示例如下:

NAME        STATUS   REGION
default     Active   cn-beijing
testns      Active   cn-beijing

字段解释如下:

字段

说明

NAME

命名空间的名称,default 表示默认命名空间。

STATUS

命名空间的状态,Active 表示可用。

REGION

命名空间所在地域。

删除命名空间

执行以下命令,删除指定命名空间。

kubectl-sae delete ns ${namespace}
# ${namespace}为命名空间的名称

管理应用

kubectl-sae工具支持创建、查看、更新、删除应用。

创建应用

  1. 编写文件名为deployment.yaml的文件,示例文件的内容如下,其中包含应用的配置信息。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ${deployment-name} # 请将${deployment-name}替换为您的应用名称
    spec:
      replicas: 2 # 表示应用实例的数量
      selector:
        matchLabels:
          sae.aliyun.com/app-name: ${deployment-name} # 请将${deployment-name}替换为您的应用名称
      template:
        metadata:
          labels:
            sae.aliyun.com/app-name: ${deployment-name} # 请将${deployment-name}替换为您的应用名称
        spec:
          containers:
          - name: main # 建议将containers的名称固定设置为main,避免冲突。
            image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 # 本例以部署nginx镜像为例
  2. deployment.yaml文件所在路径执行以下命令,实现在默认命名空间下创建应用。

    kubectl-sae apply -f deployment.yaml
  3. 执行以下命令,查看已创建的应用的信息。当输出结果中STATE值为RUNNING时,表示应用正在运行。

    kubectl-sae get deployment ${deployment-name}
    # ${deployment-name}为应用名称
  4. 执行以下命令,查看已创建的应用的实例信息。

    kubectl-sae get pods -l sae.aliyun.com/app-name=${deployment-name}
    # ${deployment-name}为应用名称

查看应用列表

执行以下命令,查看指定命名空间下已有的应用。

kubectl-sae get deployment -n ${namespace} 
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

输出示例如下:

NAME              READY   AVAILABLE   TYPE        STATE     LANGUAGE   AGE
test-yaml   	  3/3     3           Image   	  RUNNING   java       6d1h
sc-c              2/2     2           Image       RUNNING   java       13d
sc-b              2/2     2           Image       RUNNING   java       13d
sc-a              1/1     1           Image       RUNNING   java       13d

字段解释如下:

字段

说明

NAME

应用的名称。

READY

已准备就绪的应用实例数 / 期望部署的目标实例数,准备就绪是指已通过Readiness探针检查。

AVAILABLE

当前正在运行的应用实例数。

TYPE

应用的部署方式,Image表示通过镜像部署。

STATE

应用的状态,Running表示应用正在运行。

LANGUAGE

应用的技术栈语言。

AGE

应用的存在时长。

查看应用详情

kubectl-sae工具支持使用getdescribe命令查看应用详情。

通过get命令查看应用配置信息

执行以下命令,查看应用的配置信息。

kubectl-sae get deployment ${deployment-name} -o yaml -n ${namespace}
# ${deployment-name}为应用名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

通过describe命令查看应用详情

执行以下命令,查看应用详情。

kubectl-sae describe deployment ${deployment-name} -n ${namespace}
# ${deployment-name}为应用名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

更新应用

kubectl-sae工具支持使用scaleeditapply命令更新应用。

通过scale命令实现应用手动扩缩容

执行以下命令,实现应用手动扩缩容。

kubectl-sae scale deployment ${deployment-name} -n ${namespace} --replicas=${pod-num}
# ${deployment-name}为应用名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
# ${pod-num}为期望的应用实例数

通过edit命令在线编辑应用配置信息

  1. 执行以下命令,将会以YAML文件的形式打开指定应用的配置信息。

    kubectl-sae edit deployment ${deployment-name} -n ${namespace}
    # ${deployment-name}为应用名称
    # ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
  2. 在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。

通过apply命令实现按照YAML配置文件更新应用

修改已部署的应用的配置文件deployment.yaml,在配置文件所在路径执行以下命令,实现应用配置信息的变更。

kubectl-sae apply -f deployment.yaml

删除应用

执行以下命令,删除指定应用。

kubectl-sae delete deployment ${deployment-name} -n ${namespace}
# ${deployment-name}为应用名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

管理负载均衡SLB

负载均衡SLB对应Kubernetes的service资源类型。kubectl-sae工具支持创建、查看、更新、解绑负载均衡SLB。

为应用创建新的负载均衡SLB

  1. 编写文件名为svc.yaml的文件,示例文件的内容如下,其中包含负载均衡SLB的配置信息。

    apiVersion: v1
    kind: Service
    metadata:
      name: internet-${deployment-name} # 请将${deployment-name}替换为您的应用名称
      # internet表示设置公网访问的SLB,如果需要设置私网访问的SLB,请将其替换为intranet
    spec:
      ports:
      - name: port-80
        port: 80 # 表示用户访问应用的端口,请根据实际需求替换
        protocol: TCP
        targetPort: 80 # 表示容器中对外提供服务的端口,请根据实际需求替换
      selector:
        sae.aliyun.com/app-name: ${deployment-name} # 请将${deployment-name}替换为您的应用名称
  2. svc.yaml文件所在路径执行以下命令,实现为应用创建新的负载均衡SLB。

    kubectl-sae apply -f svc.yaml

将应用绑定到已有的负载均衡SLB

  1. 编写文件名为svc.yaml的文件,示例文件的内容如下,其中包含负载均衡SLB的配置信息。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        sae.aliyun.com/loadbalancer-id: ${your-slb-id} # 请将${your-slb-id}替换为您的SLB ID
      name: internet-${deployment-name} # 请将${deployment-name}替换为您的应用名称
      # internet表示设置公网访问的SLB,如果需要设置私网访问的SLB,请将其替换为intranet
    spec:
      ports:
      - name: port-80
        port: 80 # 表示用户访问应用的端口,请根据实际需求替换
        protocol: TCP
        targetPort: 80 # 表示容器中对外提供服务的端口,请根据实际需求替换
      selector:
        sae.aliyun.com/app-name: ${deployment-name} # 请将${deployment-name}替换为您的应用名称
  2. svc.yaml文件所在路径执行以下命令,实现将应用绑定到已有的负载均衡SLB。

    kubectl-sae apply -f svc.yaml

查看负载均衡SLB列表

执行以下命令,查看已有的负载均衡SLB列表。

kubectl-sae get service -l sae.aliyun.com/app-name=${deployment-name} -n ${namespace}
# ${deployment-name}为应用的名称,如果不通过-l参数指定应用名称,则默认显示所有应用绑定的负载均衡SLB
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

输出示例如下:

NAME               TYPE         EXTERNAL-IP    PORT(S)   BOUND     AGE
internet-myapp   LoadBalancer   xxx.x.xx.xx    80/TCP    myapp    6d20h
intranet-myapp   LoadBalancer   xx.xx.xxx.xx   80/TCP    myapp    4d1h

字段解释如下:

字段

说明

NAME

Service的名称,格式为${公网/私网类型}-${应用名称}

对于${公网/私网类型},internet表示公网类型,intranet表示私网类型。

TYPE

Service的类型,LoadBalancer表示负载均衡SLB。

EXTERNAL-IP

负载均衡SLB的IP地址。

PORT(S)

负载均衡SLB的端口映射信息。

BOUND

负载均衡SLB绑定的应用名称。

AGE

Service的存在时长。

查看负载均衡SLB详情

执行以下命令,查看负载均衡SLB的配置信息。

kubectl-sae get service ${service-name} -n ${namespace} -o yaml
# ${service-name}为service名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

更新负载均衡SLB

kubectl-sae工具支持使用editapply命令更新负载均衡SLB。

通过edit命令在线编辑负载均衡SLB配置信息

  1. 执行以下命令,将会以YAML文件的形式打开指定负载均衡SLB的配置信息。

    kubectl-sae edit service ${service-name} -n ${namespace}
    # ${service-name}为service名称
    # ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
  2. 在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。

通过apply命令实现按照YAML配置文件更新负载均衡SLB

修改已有的负载均衡SLB的配置文件svc.yaml。在配置文件所在路径执行以下命令,实现负载均衡SLB配置信息的变更。

kubectl-sae apply -f svc.yaml

解绑负载均衡SLB

执行以下命令,解绑指定的负载均衡SLB。

kubectl-sae delete service ${service-name} -n ${namespace}
# ${service-name}为service名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

管理ConfigMap

kubectl-sae工具支持创建、查看、更新、删除ConfigMap。ConfigMap可以作为容器的环境变量被引用,或作为文件挂载到容器中。

创建ConfigMap

  1. 编写文件名为cm.yaml的文件,示例文件的内容如下,其中包含ConfigMap的配置信息。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database-configmap # 表示ConfigMap的名称
      namespace: default # 表示ConfigMap所在的命名空间
    data: #表示ConfigMap中包含的键值对信息
      database: mysql
      database_uri: mysql://localhost:2309
  2. cm.yaml文件所在路径执行以下命令,实现在默认命名空间下创建名称为database-configmap的ConfigMap。

    kubectl-sae apply -f cm.yaml

查看地域下ConfigMap列表

执行以下命令,查看地域下已有的ConfigMap列表。

kubectl-sae get configmap -A

输出示例如下:

NAMESPACE   NAME            DATA   AGE
default     nacos           1      69d
test        test-config     2      10d

字段解释如下:

字段

说明

NAMESPACE

ConfigMap所在的命名空间。

NAME

ConfigMap的名称。

DATA

ConfigMap中数据条目数。

AGE

ConfigMap的存在时长。

查看命名空间下ConfigMap列表

执行以下命令,查看命名空间下已有的ConfigMap列表。

kubectl-sae get configmap -n ${namespace}
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

查看ConfigMap具体配置

执行以下命令,查看指定ConfigMap的具体配置。

kubectl-sae get cm ${cm-name} -n ${namespace} -o yaml 
# ${cm-name}为ConfigMap的名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间

引用ConfigMap作为容器环境变量

以下示例文件展示了引用ConfigMap作为容器环境变量的方法。引用方式分为部分引用和全部引用,请根据您的需求进行选择。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-configmap
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      sae.aliyun.com/app-name: test-configmap
  template:
    metadata:
      creationTimestamp: null
      labels:
        sae.aliyun.com/app-name: test-configmap
    spec:
      containers:
      - args:
        - /home/admin/start.sh
        command:
        - /bin/bash
        env: ### 以下为部分引用的示例
        - name: database # 表示容器中的环境变量名
          valueFrom:
            configMapKeyRef: # 表示环境变量的值引用database-configmap中的database值
              key: database
              name: database-configmap
        envFrom: ### 以下为全部引用的示例
        - configMapRef: # 表示全部引用other-configmap中的键值对作为容器中的环境变量
            name: other-configmap
        name: main
        image: registry.cn-shenzhen.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0
        imagePullPolicy: Always
        resources:
          limits:
            cpu: "2"
            memory: 4Gi
          requests:
            cpu: "2"
            memory: 4Gi
      restartPolicy: Always
      terminationGracePeriodSeconds: 10

将ConfigMap作为文件挂载到容器中

以下示例文件展示了将ConfigMap作为文件挂载到容器中的方法。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-configmap
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      sae.aliyun.com/app-name: test-configmap
  template:
    metadata:
      labels:
        sae.aliyun.com/app-name: test-configmap
    spec:
      containers:
      - args:
        - /home/admin/start.sh
        command:
        - /bin/bash
        name: main
        image: registry.cn-shenzhen.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0
        imagePullPolicy: Always
        resources:
          limits:
            cpu: "2"
            memory: 4Gi
          requests:
            cpu: "2"
            memory: 4Gi
        volumeMounts:
          - mountPath: /tmp/nacos # 表示ConfigMap文件的挂载路径
            name: my-volume # 表示挂载的volume名称为my-volume
      volumes: # 表示基于nacos-configmap声明my-volume
      - configMap:
          name: nacos-configmap
        name: my-volume
      restartPolicy: Always
      terminationGracePeriodSeconds: 10

更新ConfigMap

kubectl-sae工具支持使用editapply命令更新ConfigMap。

通过edit命令在线编辑ConfigMap

  1. 执行以下命令,将会以YAML文件的形式打开指定ConfigMap的配置信息。

    kubectl-sae edit cm ${cm-name} -n ${namespace}
    # ${cm-name}为ConfigMap名称
    # ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间
  2. 在打开的YAML文件中按需修改配置信息,保存并关闭文件,等待配置信息变更完成。

通过apply命令实现按照YAML配置文件更新ConfigMap

修改已有的ConfigMap的配置文件cm.yaml。在配置文件所在路径执行以下命令,实现ConfigMap配置信息的变更。

kubectl-sae apply -f cm.yaml

删除ConfigMap

执行以下命令,删除指定的ConfigMap。

kubectl-sae delete cm ${cm-name} -n ${namespace}
# ${cm-name}为ConfigMap名称
# ${namespace}为命名空间的名称,如果不通过-n参数指定命名空间,则默认使用default命名空间