产品简介

下载操作手册

产品概述

容器服务 Kubernetes 版(CCK),提供高性能可伸缩的容器应用管理能力,支持Kubernetes社区原生应用和工具。简化集群的搭建和扩容等运维类工作,整合首云虚拟化(裸金属)、存储、网络和安全能力,打造云端的容器化应用运行环境

使用须知


目前开放节点:北京A/B/C/E/H,广州A,上海A,无锡A,香港A,台北A,达拉斯A/G/J,洛杉矶A,东京A,首尔A,新加坡A,法兰克福A/B

每个集群最多200个节点

架构图

  • 整体架构图

架构介绍:

  • ⼀键构建:整合⾸云计算、⽹络、存储资源
  • ⽆缝整合:整合⾸云现有多个产品:VM、VDC、CDN、HAProxy、OSS
  • GIC集成:开发⾸云的Kubernetes dashboard
  • 存储⽅案:⾃研针对⾸云的CSI,Flex Volume存储插件;设计出⾸云NAS存储⽅案
  • ⾃动伸缩:⾃研针对⾸云的Auto scaler;⽀持master和worker扩缩容
  • 镜像服务:基于Harbor⾃研⾸云的镜像服务;⽀持内⽹访问;⽀持异地同步
  • 监控⽅案:⼀键集成Kube-Prometheus,覆盖K8S所有组件和应⽤监控
  • ⽇志⽅案:⼀键集成EFK⽇志组件,⽀持node,k8s 组件,pod的⽇志查看

 

  • 计算

  • 网络

  • 存储

集群管理

1.简介

首云支持

集群管理操作,包括集群创建、删除和控制台访问集群

2.使用须知

需通过首云集群管理页面进行上述操作

3.操作说明

创建集群

    • 进入集群页面 -> 右上角点击创建集群

    • 设置集群名称 -> 选择虚拟数据中心 -> 选择集群私网ip网段 -> 选择计费方式-> 设置master节点 -> 设置worker节点 -> 选择HA配置 -> 选择集群公网ip -> 设置集群ssh登录密码 -> 确认无误后点击确认

image.png

image.png

image.png

image.png

 

    • 进入集群页面 -> 查看创建的集群,状态为正常代表创建成功,状态为错误会显示错误信息

 

删除集群

    • 进入集群页面 -> 选择要删除的集群,点击操作列下的删除 

    • 仔细阅读提示后,点击确认执行删除

image.png

 


节点管理

1.简介

首云支持

集群节点的手动管理,包括节点的增加、删除和设置节点是否可调度操作

2.使用须知

需通过首云集群管理页面进行上述操作

3.操作说明

添加master节点

    • 进入集群页面 -> 选择需要操作的集群 -> 点击集群扩容,或在节点列表页面->点击右上角创建节点按钮

image.png

    • 核对集群ID -> 选择增加节点类型为master -> 选择计算类型与规格 -> 添加云盘(可不选)-> 设置添加数量 -> 输入登录用户密码 -> 核对无误后,点击确定进行添加 

image.png

image.png

    • 进入节点查看页面 -> 选择对应集群,新添加节点状态由创建中 -> 正常代表添加成功

 

添加worker节点

    • 进入集群页面 -> 选择需要操作的集群 -> 点击集群扩容,或在节点管理页面->点击右上角添加节点按钮。


    • 核对集群ID -> 选择增加节点类型为worker -> 选择计算类型与规格 -> 添加云盘(可不选)-> 设置添加数量 -> 输入登录用户密码 -> 核对无误后,点击确定进行添加 

image.png

image.png

 

    • 点击对应集群操作列下的节点管理入口,新添加节点状态由创建中 -> 正常代表添加成功

删除worker节点(master节点不可移除)

    • 进入节点管理页面 -> 选择对应集群,选择要删除的worker节点 -> 点击删除

image.png

    • 点击删除后,仔细阅读提示后,没问题点击确认执行删除操作

image.png

    • 进入节点查看页面 -> 选择对应集群,删除节点状态由删除中 -> 节点消失代表删除成功

image.png

设置节点调度

    • 进入节点查看页面 -> 选择对应集群 -> 选择要设置的节点 -> 设置是否可调度

image.png

    • 仔细阅读提示,没问题后点击确认

image.png

    • 进入节点查看页面 -> 选择对应集群 -> 查看设置是否成功

image.png

 


 

存储管理

简介

首云提供了NAS文件存储服务,并且针对Kubernetes集群提供了自研的存储驱动的支持

操作说明

 

  • 创建文件存储 NAS
    • 选择文件存储NAS后,选择右上的新建按钮可以创建一块新的NAS存储
    • 在新页面中,依次选择可用区,输入名称,选择类型和容量,最后单击确定
    • 在该页面,可以看到所配置的存储的价格
    • 可以用去的选择要和容器集群所在区域一致,不同区域的集群和存储间不能挂载和访问

  • 创建挂载点
    • 新创建的NAS盘,需要挂载后才能使用
    • 在挂载窗口中,请选择需要挂载的集群,此处的集群仅显示和该NAS所在区域相同的容器集群
    • 挂载成功后,会显示私网IP
    • 挂载过程可能用时较长,3-5分钟

  • 挂载NAS盘到本地机器
    • 对于已经挂载好的NAS盘,该集群内的任何一台计算资源(master和worker)均可访问
    • ssh登录一台集群
    • 创建一个新的目录: mkdir ~/nas
    • 挂载NAS盘到本地:
      sudo mount -v -t nfs -o "vers=4,noresvport" < NAS盘挂载点的私网IP >:/nfsshare ~/nas
    • 挂载后,/nas 目录即为NAS盘的所有内容,此时可以对NAS盘进行操作
    • 使用后,执行下述命令即可卸载本次挂载:sudo umount /nas
  • NAS盘扩容
    • 在文件存储NAS页面点击扩容,即可对该盘进行在线扩容
    • 在新页面中,选择容量并确定即可完成扩容
    • 目前只支持扩容操作,不可缩容

  • 卸载NAS盘
    • 对于已挂载的NAS盘,可以从集群中卸载,卸载后的NAS盘可以挂在到同一区域下的其他集群使用
    • NAS盘一旦卸载,会导致该集群内所有依赖该存储的POD的PV皆不可用,请谨慎操作
    • 卸载需要邮箱验证

  • 删除NAS盘
    • 对于已经卸载的NAS盘,可以永久删除
    • 删除后的NAS盘,所有数据均会被删除,且无法找回,请谨慎操作
    • 删除需要手机或邮箱验证

    (手动)创建块存储

      • 点击块存储->创建

    image.png

      • 跳转到创建块存储页面
      • 由于块存储需要挂载在集群中的节点上,因此块存储磁盘必须创建在和集群在同一可用区且和集群中的节点在同一机柜组中,控制台先会判断可用区中是否有可用的机柜组,若没有则会提示如下图,且不允许创建:

    image.png

      • 若有可用的空间,依次选择机柜组->编辑块存储名->选择类型->选择块存储容量->选择IOPS(将会支持3000,5000,7500,10000)->确认无误后点击确认,完成创建

    image.png

      • 创建成功后,该存储状态会显示为ok

     

    此时我们创建的块存储仅是一块磁盘,需要我们进入挂载节点的控制台使用命令手动格式化、分区、创建文件系统,并挂载到指定的本地目录;

    (自动)创建块存储

    说明:创建存储类sc时,选择块存储存储类型,控制台会自动创建一块块存储并为该块存储建立文件系统

     

    • 在创建存储类前,需要先手动添加存储驱动,

    点击导入yaml文件以下yaml文件安装驱动:

    image.png

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: cds-csi-sa
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: cds-csi-cluster-role
    rules:
    - apiGroups:
      - ""
      resources:
      - secrets
      verbs:
      - get
      - list
    - apiGroups:
      - ""
      resources:
      - persistentvolumes
      verbs:
      - get
      - list
      - watch
      - update
      - create
      - delete
    - apiGroups:
      - ""
      resources:
      - persistentvolumeclaims
      verbs:
      - get
      - list
      - watch
      - update
    - apiGroups:
      - storage.k8s.io
      resources:
      - storageclasses
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - storage.k8s.io
      resources:
      - csinodes
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - events
      verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
    - apiGroups:
      - ""
      resources:
      - endpoints
      verbs:
      - get
      - watch
      - list
      - delete
      - update
      - create
    - apiGroups:
      - ""
      resources:
      - configmaps
      verbs:
      - get
      - watch
      - list
      - delete
      - update
      - create
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - csi.storage.k8s.io
      resources:
      - csinodeinfos
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - storage.k8s.io
      resources:
      - volumeattachments
      verbs:
      - get
      - list
      - watch
      - update
    - apiGroups:
      - snapshot.storage.k8s.io
      resources:
      - volumesnapshotclasses
      verbs:
      - get
      - list
      - watch
    - apiGroups:
      - snapshot.storage.k8s.io
      resources:
      - volumesnapshotcontents
      verbs:
      - create
      - get
      - list
      - watch
      - update
      - delete
    - apiGroups:
      - snapshot.storage.k8s.io
      resources:
      - volumesnapshots
      verbs:
      - get
      - list
      - watch
      - update
    - apiGroups:
      - apiextensions.k8s.io
      resources:
      - customresourcedefinitions
      verbs:
      - create
      - list
      - watch
      - delete
    - apiGroups:
      - coordination.k8s.io
      resources:
      - leases
      verbs:
      - get
      - watch
      - list
      - delete
      - update
      - create
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: cds-csi-cluster-role-bind
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cds-csi-cluster-role
    subjects:
    - kind: ServiceAccount
      name: cds-csi-sa
      namespace: kube-system
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: csi-provisioner
      name: csi-provisioner
      namespace: kube-system
    spec:
      ports:
      - name: healthz
        port: 9808
      selector:
        type: csi-provisioner
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: block-csi-cds-controller
      namespace: kube-system
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: block-csi-cds-controller
      serviceName: csi-provisioner
      template:
        metadata:
          labels:
            app: block-csi-cds-controller
            type: csi-provisioner
        spec:
          containers:
          - args:
            - --endpoint=$(CSI_ENDPOINT)
            - --v=5
            - --driver=block.csi.cds.net
            env:
            - name: CSI_ENDPOINT
              value: unix://socketDir/csi.sock
            - name: ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  key: access_key_id
                  name: cck-secrets
            - name: ACCESS_KEY_SECRET
              valueFrom:
                secretKeyRef:
                  key: access_key_secret
                  name: cck-secrets
            - name: CDS_OVERSEA
              valueFrom:
                configMapKeyRef:
                  key: oversea
                  name: cds-properties
            image: capitalonline/cds-csi-driver:v2.0.0
            imagePullPolicy: Always
            livenessProbe:
              exec:
                command:
                - sh
                - -c
                - ps -ef | grep cds-csi-driver | grep block.csi.cds.net | grep -v grep
              failureThreshold: 8
              initialDelaySeconds: 15
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 15
            name: csi-controller-server
            resources:
              limits:
                cpu: 100m
                memory: 100Mi
              requests:
                cpu: 100m
                memory: 100Mi
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: /var/log/
              name: host-log
            - mountPath: /socketDir/
              name: socket-dir
            - mountPath: /host/etc
              name: etc
          - args:
            - --csi-address=$(ADDRESS)
            - --v=5
            env:
            - name: ADDRESS
              value: /socketDir/csi.sock
            image: capitalonline/csi-provisioner:v1.5.0
            name: csi-provisioner
            volumeMounts:
            - mountPath: /socketDir
              name: socket-dir
          - args:
            - --csi-address=/csi/csi.sock
            image: capitalonline/csi-livenessprobe:v2.0.0
            name: liveness-probe
            volumeMounts:
            - mountPath: /csi
              name: socket-dir
          - args:
            - --csi-address=$(ADDRESS)
            - --v=5
            - --leader-election=true
            - --leader-election-type=leases
            env:
            - name: ADDRESS
              value: /var/lib/csi/sockets/pluginproxy/csi.sock
            image: quay.io/k8scsi/csi-attacher:v1.2.0
            name: csi-attacher
            volumeMounts:
            - mountPath: /var/lib/csi/sockets/pluginproxy/
              name: socket-dir
          nodeSelector:
            beta.kubernetes.io/os: linux
          priorityClassName: system-cluster-critical
          serviceAccount: cds-csi-sa
          tolerations:
          - key: CriticalAddonsOnly
            operator: Exists
          - key: null
            operator: Exists
          volumes:
          - emptyDir: {}
            name: socket-dir
          - hostPath:
              path: /var/log/
            name: host-log
          - hostPath:
              path: /etc
            name: etc
      updateStrategy:
        type: RollingUpdate
    ---
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: block-csi-cds-node
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: block-csi-cds-node
      template:
        metadata:
          labels:
            app: block-csi-cds-node
        spec:
          containers:
          - args:
            - --endpoint=$(CSI_ENDPOINT)
            - --v=5
            - --driver=block.csi.cds.net
            env:
            - name: CSI_ENDPOINT
              value: unix://var/lib/kubelet/plugins/block.csi.cds.net/csi.sock
            - name: ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  key: access_key_id
                  name: cck-secrets
            - name: ACCESS_KEY_SECRET
              valueFrom:
                secretKeyRef:
                  key: access_key_secret
                  name: cck-secrets
            - name: CDS_OVERSEA
              valueFrom:
                configMapKeyRef:
                  key: oversea
                  name: cds-properties
            image: capitalonline/cds-csi-driver:v2.0.0
            imagePullPolicy: Always
            name: block-csi-node-server
            securityContext:
              allowPrivilegeEscalation: true
              capabilities:
                add:
                - SYS_ADMIN
              privileged: true
            volumeMounts:
            - mountPath: /var/lib/kubelet/
              mountPropagation: Bidirectional
              name: kubelet-dir
            - mountPath: /var/log/
              name: host-log
            - mountPath: /host/etc
              name: etc
            - mountPath: /proc
              name: node-proc
            - mountPath: /dev
              name: host-dev
          - args:
            - --v=5
            - --csi-address=$(ADDRESS)
            - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)
            env:
            - name: ADDRESS
              value: /var/lib/kubelet/plugins/block.csi.cds.net/csi.sock
            - name: DRIVER_REG_SOCK_PATH
              value: /var/lib/kubelet/plugins/block.csi.cds.net/csi.sock
            image: capitalonline/csi-node-driver-registrar:v1.2.0
            imagePullPolicy: Always
            lifecycle:
              preStop:
                exec:
                  command:
                  - /bin/sh
                  - -c
                  - rm -rf /registration/block.csi.cds.net /registration/block.csi.cds.net-reg.sock
            name: block-driver-registrar
            volumeMounts:
            - mountPath: /var/lib/kubelet/
              name: kubelet-dir
            - mountPath: /registration/
              name: registration-dir
          - args:
            - --csi-address=/var/lib/kubelet/plugins/block.csi.cds.net/csi.sock
            - --health-port=9810
            image: capitalonline/csi-livenessprobe:v2.0.0
            name: block-liveness-probe
            volumeMounts:
            - mountPath: /var/lib/kubelet/
              name: kubelet-dir
          hostNetwork: true
          hostPID: true
          priorityClassName: system-node-critical
          serviceAccount: cds-csi-sa
          tolerations:
          - operator: Exists
          volumes:
          - hostPath:
              path: /var/lib/kubelet
              type: Directory
            name: kubelet-dir
          - hostPath:
              path: /var/lib/kubelet/plugins_registry
              type: DirectoryOrCreate
            name: registration-dir
          - hostPath:
              path: /var/log/
            name: host-log
          - hostPath:
              path: /etc
            name: etc
          - hostPath:
              path: /proc
            name: node-proc
          - hostPath:
              path: /dev
            name: host-dev
      updateStrategy:
        type: RollingUpdate
    ---
    apiVersion: storage.k8s.io/v1beta1
    kind: CSIDriver
    metadata:
      name: block.csi.cds.net
    spec:
      attachRequired: true
      • 点击存储类->右上角创建按钮,创建块存储类型的存储类,具体操作见创建块存储存储类

    image.png

      • 创建成功后,还需创建存储声明,具体操作见 创建存储声明 ,创建应用时,添加持久卷选择创建的存储声明,注:尽量使用标签,或者设置节点亲和性将pod调度到挂载了块存储的节点上,若挂载到其他节点上,pod便起不来。当应用启动后,使用存储时,存储会根据存储声明动态绑定存储卷,此时便会自动创建出一块块存储,且这块块存储上只和该存储卷绑定,即存储卷和块存储时1对1的关系。

     

    挂载块存储

      • 在某块存储操作中点击挂载->选择集群->选择要挂在的主机节点

    image.png

      • 挂载成功后,块存储状态会显示为mounted,节点栏显示了挂载的节点。

    image.png

    卸载块存储

      • 在某块存储操作下点击卸载,在弹出的对话框中·输入对应的块存储名称

               image.png

      • 确认后,该块存储状态为updating,卸载成功后状态显示为ok

    image.png

    删除块存储

      • 在该块存储操作下点击删除,同样需要输入资源名称进行身份验证

    image.png

      • 确认后该块存储状态显示为deleting,删除成功后该块存储将不再出现在块存储列表

    image.png

     

  • 创建文件存储类型存储类

      • 点击存储->存储类->新建存储类,可以在弹出的对话框中新建一个使用NAS盘的存储类
      • 创建存储类的参数如下配置:
        • 存储类名称:配置该存储类的名称,当创建pvc时,需要引用该名称
        • 选择集群:选择配置存储类到哪个容器集群
        • 存储类型:选择所支持的存储类型,目前支持文件存储,块存储,本地存储
        • 挂载方式:支持subpath和filesystem两种挂载方式,选择subpath方式时,需要提前创建NAS盘,使得多个存储卷共享该块NAS盘,选择filesystem方式,不需要提前创建NAS盘,此时NAS盘会被自动创建,且一个存储卷对应一块NAS盘
        • NAS云盘:已创建并且挂在到该集群的NAS盘,可添加多块NAS盘
        • 阈值:该阈值为设置该存储类(SC)中云盘的使用量临界阈值。存储卷(PV)只会创建在[使用量<阈值]的NAS云盘上,若没有符合条件的NAS云盘,存储卷(PV)将不会被自动创建。阈值为空时,则存储类(SC)创建存储卷(PV)不进行NAS云盘使用量检查。
        • mode: pv使用文件夹的mode,一般选择755777
        • 存储卷回收策略:Retain,PVC被删除后,保留对应的PV;Delete,PVC被删除后,删除对应的PV
        • 数据保留策略:当PV被删除后,如果数据保留策略为true,则归档相关数据,归档名称为archived-原pv使用目录名称-时间戳; 如果为false,则直接删除该pv所使用的数据

            image.png

    创建块存储存储类

      • 点击存储类->右上角创建按钮

    image.png

      • 跳转到存储类创建页面,创建存储类的参数如下配置:
        • 选择集群:选择配置存储类到哪个容器集群
        • 存储类型:选择所支持的存储类型,此时我们选择块存储
        • 操作系统:为自动创建的块存储建立文件系统,以挂存储卷
        • 硬盘类型:选择磁盘类型,支持性能型和高IO型,目前支持高IO型的可用区有:北京1,北京5,达拉斯7,达拉斯10,东京1,法兰克福1,广州1,上海1,首尔1,台北1,无锡1,香港1,新加坡1,印度1
        • IOPS:性能型IOPS为3000,高IO型磁盘可选5000,7500,10000
        • 绑定格式:仅支持延迟绑定
        • 标签选择器:选择可用的存储群集

    image.png

    创建本地存储存储类

      • 点击存储类->右上角创建按钮

    image.png

      • 跳转到存储类创建页面,创建存储类的参数如下配置:
        • 选择集群:选择配置存储类到哪个容器集群
        • 存储类型:选择所支持的存储类型,此时我们选择块存储

    image.png

     

  • 删除存储类

  • 查看存储类
    • 在存储类列表中,点击详情,可以查看存储类相应信息
    • 可以在基本信息和yaml文件中切换不同的显示方式

  • 查看存储卷列表
    • 点击存储->存储卷,然后从集群选择下拉列表中,可以查看所选的集群中所有的存储卷(PV)

  • 创建文件存储存储卷

      • 点击集群->存储卷->新建存储存储卷,可以在弹出的对话框中新建一个使用NAS盘的存储卷
      • 创建存储类的参数如下配置:
        • 选择集群:选择配置存储类到哪个容器集群
        • 存储类型:选择所支持的存储类型,支持NAS文件存储,对象存储,本地存储(同块存储)
        • 存储对象:已创建并且挂在到该集群的NAS盘
        • server-ip: 系统会自动读取NAS盘的挂载点IP
        • path:NAS盘对应的远端挂在目录,默认为/nfsshare
        • mode: pv使用文件夹的mode,一般选择755777
        • 存储卷名称:配置该存储类的名称,当创建pvc时,需要引用该名称
        • 容量:所要创建存储卷的大小,单位GB
        • 访问模式:ReadWirteMany:可以多个节点同时读写,ReadWriteOnce:仅单个节点读写
        • 标签:可以添加自定义的标签

                image.png

    创建本地存储(块存储)存储卷

    说明:当手动创建的块存储被挂载到一个本地目录后,其创建存储卷就相当于创建本地存储卷

      • 点击集群->存储卷->新建存储存储卷,可以在弹出的对话框中新建一个使用NAS盘的存储卷
      • 创建存储类的参数如下配置:
        • 选择集群:选择配置存储类到哪个容器集群
        • 存储类型:选择所支持的存储类型,支持NAS文件存储,对象存储,本地存储(同块存储)
        • 标签选择器:对节点进行筛选,一般使用默认取值即可
        • path:编辑挂载路径,块存储的路径为手动创建时挂载的本地目录
        • mode: pv使用文件夹的mode,一般选择755777
        • 存储类名称:首云 k8s 集群中,默认提供名字为 cds-local-default-sc 的 local-storage StorageClass 提供延迟绑定功能,建议使用 local pv 时,直接使用默认的 local-storage StorageClass 即可,无需自行额外创建
        • 容量:所要创建存储卷的大小,单位GB
        • 访问模式:ReadWirteMany:可以多个节点同时读写,ReadWriteOnce:仅单个节点读写
        • 标签:可以添加自定义的标签

                image.png

  • 查看存储卷详情
    • 点击单个存储卷的详情,即可查看该存储卷的详细信息
    • 可以在基本信息和yaml文件中切换不同的显示方式

  • 删除存储卷

应用管理

简介

首云支持创建无状态(Deployment)和有状态(StatefulSet)应用,并提供相应的容器组管理

前提条件

创建一个 Kubernetes 集群。详情请参见集群管理->创建集群。

操作说明

 

  • 创建无状态(Deployment)应用
    • 在容器服务菜单下,单击左侧导航栏中的应用>无状态,选择所需的命名空间(默认为deafult),然后单击页面右上角的创建。

    • 设置应用名称、集群 、命名空间、副本数量(即应用包含的 Pod 数量)、标签和注解。然后单击下一步进入容器配置页面

    • 设置容器配置
      i. 基本配置
      • 镜像名称:填写所用镜像名称,本例中为hello-world。格式为domain/imagename。
      • 镜像版本:填写所需镜像版本,如不指定,默认为latest。
      • 最小申请:为该应用所需最小资源额度,包括 CPU 和内存两种资源。该资源由容器独占,以防资源不足而被其他服务或进程争占资源,导致应用不可用。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
      • 最大申请:可指定该应用所能使用的最大资源额度,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
      • nit Container:勾选该项,表示创建一个 Init Container,在主容器启动前执行,进行初始化工作,详情参考https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。
      • 添加容器:支持添加多个容器

      ii. 可选配置
      • 端口映射:配置所启动容器使用的协议(支持TCP和UDP)、端口
      • 环境变量:配置所启动容器所需的环境变量(key/value的形式)

      • 健康检查和就绪检查:支持健康检查(liveness)和就绪检查(Readiness)。健康检查用于检测何时重启容器;就绪检查用于确定容器是否已经就绪,且可以接受流量。更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。

        请求类型 配置说明
        HTTP/HTTPS

        即向容器发送一个 HTTPget 请求,支持的参数包括:

        • 路径:访问 HTTP server 的路径。
        • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
        • HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。
        • 运行多久后开始检测(秒):即 initialDelaySeconds,容器启动后第一次执行检测时需要等待多少秒,默认为 3 秒。
        • 检查间隔(秒):即 periodSeconds,指执行检查的时间间隔,默认为 10 秒,最小为 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
        TCP

        即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

        • 路径:访问 HTTP server 的路径。
        • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
        • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。
        • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。
        • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
        命令行

        通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

        • 命令行:用于检测容器健康情况的探测命令。
        • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。
        • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。
        • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
      • 生命周期:为容器的生命周期配置容器启动执行、启动后处理和停止前处理。具体参见 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。
        • 启动执行:为容器设置预启动命令和参数。
        • 启动后处理:为容器设置启动后的命令。
        • 停止前处理:为容器设置预结束命令。
      • 数据卷:支持配置临时卷和持久卷。
            • 临时卷:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录四种存储卷类型,将对应的挂载源挂载到容器路径中。更多信息参见volumes
            • 持久卷:挂载源为该集群可用存储卷(PVC),详情参见左侧菜单栏集群->存储卷
      iii. 完成容器配置后,单击下一步。
      iv. 进行高级设置。
      • 可选:水平伸缩。您可勾选是否开启水平伸缩,为了满足应用在不同负载下的需求,容器服务支持容器组(Pod)的弹性伸缩,即根据容器 CPU 和内存资源占用情况自动调整容器副本数量。
        • 指标:可选 CPU 使用量和内存使用量,需要和设置的所需资源类型相同。
        • 触发条件:资源使用率的百分比,超过设置的Pod request值,容器开始扩容。
        • 最大副本数:该 Deployment 可扩容的副本(即容器组Pod)数量上限。
        • 最小副本数:该 Deployment 可缩容的副本(即容器组Pod)数量下限。

        注:若要启用水平伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。参见容器基本配置环节。

      • 可选:升级方式。升级方式包括滚动升级(rollingupdate)和替换升级(recreate),详细请参见https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
        • 不可使用Pod最大数量:用于指定 Deployment在更新过程中不可用状态的Pod数量的百分比上限
        • 超过期望的Pod数量:用于指定在Deployment 更新Pod的过程中Pod总数超过Pod期望副本数的百分比上限

      • 可选:Pod标签和注解。设置容器组的标签和注解。可用于Pod的调度设置。

      • 可选:调度设置(亲和性调度依赖节点和 Pod 标签,您可使用内置的标签进行调度;也可预先为节点、Pod 配置相关的标签)
        • 节点亲和性。通过已有节点 Node 的标签(键)、操作符和标签值(值)进行设置。
          • 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,效果与 NodeSelector 相同。您可以定义多条硬约束规则,但只需满足其中一条。
          • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。您可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。
          • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

        • 应用亲和性。通过节点上运行的 Pod 的标签(键)、操作符和标签值(值)进行设置,支持硬约束和软约束。决定应用的 Pod 可以和哪些 Pod 部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。
          • 必须满足,即硬约束,一定要满足,对应requiredDuringSchedulingIgnoredDuringExecution,Pod 的亲和性调度必须要满足后续定义的约束条件。
            • 命名空间:该策略是依据 Pod 的 Label 进行调度,所以会受到命名空间的约束。
            • 拓扑域:即 topologyKey,指定调度时作用域,这是通过 Node 节点的标签来实现的。
            • 选择器:单击选择器右侧的添加按钮,可添加多条硬约束规则。
          • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。Pod 的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。
          • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

        • 设置应用非亲和性调度。决定应用的 Pod 不与哪些 Pod 部署在同一拓扑域。应用非亲和性调度的场景包括:
          • 将一个服务的 Pod 分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。
          • 给予 Pod 一个节点的独占访问权限来保证资源隔离,保证不会有其它 Pod 来分享节点资源。
          • 把可能会相互影响的服务的 Pod 分散在不同的主机上。

          说明:应用非亲和性调度的设置方式与亲和性调度相同,但相同的调度规则代表的意思不同,请按需进行选择。

        • 设置调度容忍(Toleration)。与节点设置的污点(Taints)配套使用,且Pod的Toleration声明中的key和effect需要与Taint的设置保持一致。详情参见节点管理,https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

      v. 点击创建
      在应用->无状态可看到创建成功的应用。

      查看详情

          • 点击详情,可看到该应用的详情页面。
      • 应用伸缩

            • 点击伸缩,可修改当前应用的副本数量。
      • 编辑更改

            • 点击编辑,可修改该应用的yaml文件,点击确认即可生效。
      • 点击移除,可删除该应用。
  • 创建有状态(StatefulSet)应用
    • 特性,详情参见https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/

       

      应用场景 说明
      稳定的持久化存储 基于PVC实现数据的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据
      稳定的网络标志 基于Headless Service(即没有Cluster IP的Service)来实现,即Pod重新调度后其PodName和HostName不变
      有序部署,有序扩展 即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
    • 在容器服务菜单下,单击左侧导航栏中的应用>有状态,选择所需的命名空间(默认为deafult),然后单击页面右上角的创建。

    • 设置应用名称、集群 、命名空间、副本数量(即应用包含的 Pod 数量)、标签和注解。然后单击下一步进入容器配置页面

    • 设置容器配置
      i. 基本配置
      • 镜像名称:填写所用镜像名称,本例中为mysql。格式为domain/imagename。
      • 镜像版本:填写所需镜像版本,本例中为5.7。如不指定,默认为latest。
      • 最小申请:为该应用所需最小资源额度,包括 CPU 和内存两种资源。该资源由容器独占,以防资源不足而被其他服务或进程争占资源,导致应用不可用。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
      • 最大申请:可指定该应用所能使用的最大资源额度,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
      • Init Container:勾选该项,表示创建一个 Init Container,在主容器启动前执行,进行初始化工作,详情参考https://kubernetes.io/docs/concepts/workloads/pods/init-containers/。
      • 添加容器:支持添加多个容器

      ii. 可选配置
      • 端口映射:配置所启动容器使用的协议(支持TCP和UDP)、端口
      • 环境变量:配置所启动容器所需的环境变量(key/value的形式)

      • 健康检查和就绪检查:支持健康检查(liveness)和就绪检查(Readiness)。健康检查用于检测何时重启容器;就绪检查用于确定容器是否已经就绪,且可以接受流量。更多信息,请参见https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes。

        请求类型 配置说明
        HTTP/HTTPS

        即向容器发送一个 HTTPget 请求,支持的参数包括:

        • 路径:访问 HTTP server 的路径。
        • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
        • HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。
        • 运行多久后开始检测(秒):即 initialDelaySeconds,容器启动后第一次执行检测时需要等待多少秒,默认为 3 秒。
        • 检查间隔(秒):即 periodSeconds,指执行检查的时间间隔,默认为 10 秒,最小为 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
        TCP

        即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

        • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
        • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。
        • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。
        • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
        命令行

        通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

        • 命令行:用于检测容器健康情况的探测命令。
        • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。
        • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。
        • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
        • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
      • 生命周期:为容器的生命周期配置容器启动执行、启动后处理和停止前处理。具体参见 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。
        • 启动执行:为容器设置预启动命令和参数。
        • 启动后处理:为容器设置启动后的命令。
        • 停止前处理:为容器设置预结束命令。
      • 数据卷:支持配置临时卷和持久卷。
            • 临时卷:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录四种存储卷类型,将对应的挂载源挂载到容器路径中。更多信息参见volumes
            • 持久卷:挂载源为该集群可用存储卷(PVC),详情参见左侧菜单栏集群->存储卷
      iii. 完成容器配置后,单击下一步。
      iv. 进行高级设置。
      • 可选:水平伸缩。您可勾选是否开启水平伸缩,为了满足应用在不同负载下的需求,容器服务支持容器组(Pod)的弹性伸缩,即根据容器 CPU 和内存资源占用情况自动调整容器副本数量。
        • 指标:可选 CPU 使用量和内存使用量,需要和设置的所需资源类型相同。
        • 触发条件:资源使用率的百分比,超过设置的Pod request值,容器开始扩容。
        • 最大副本数:该 Deployment 可扩容的副本(即容器组Pod)数量上限。
        • 最小副本数:该 Deployment 可缩容的副本(即容器组Pod)数量下限。

        注:若要启用水平伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。参见容器基本配置环节。

      • 可选:升级方式。升级方式包括滚动升级(rollingupdate)和替换升级(recreate),详细请参见https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
        • 不可使用Pod最大数量:用于指定 Deployment在更新过程中不可用状态的Pod数量的百分比上限
        • 超过期望的Pod数量:用于指定在Deployment 更新Pod的过程中Pod总数超过Pod期望副本数的百分比上限

      • 可选:Pod标签和注解。设置容器组的标签和注解。可用于Pod的调度设置。

      • 可选:调度设置(亲和性调度依赖节点和 Pod 标签,您可使用内置的标签进行调度;也可预先为节点、Pod 配置相关的标签)
        • 节点亲和性。通过已有节点 Node 的标签(键)、操作符和标签值(值)进行设置。
          • 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,效果与 NodeSelector 相同。您可以定义多条硬约束规则,但只需满足其中一条。
          • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。您可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。
          • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

        • 应用亲和性。通过节点上运行的 Pod 的标签(键)、操作符和标签值(值)进行设置,支持硬约束和软约束。决定应用的 Pod 可以和哪些 Pod 部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。
          • 必须满足,即硬约束,一定要满足,对应requiredDuringSchedulingIgnoredDuringExecution,Pod 的亲和性调度必须要满足后续定义的约束条件。
            • 命名空间:该策略是依据 Pod 的 Label 进行调度,所以会受到命名空间的约束。
            • 拓扑域:即 topologyKey,指定调度时作用域,这是通过 Node 节点的标签来实现的。
            • 选择器:单击选择器右侧的添加按钮,可添加多条硬约束规则。
          • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。Pod 的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。
          • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

        • 设置应用非亲和性调度。决定应用的 Pod 不与哪些 Pod 部署在同一拓扑域。应用非亲和性调度的场景包括:
          • 将一个服务的 Pod 分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。
          • 给予 Pod 一个节点的独占访问权限来保证资源隔离,保证不会有其它 Pod 来分享节点资源。
          • 把可能会相互影响的服务的 Pod 分散在不同的主机上。

          说明:应用非亲和性调度的设置方式与亲和性调度相同,但相同的调度规则代表的意思不同,请按需进行选择。

        • 设置调度容忍(Toleration)。与节点设置的污点(Taints)配套使用,且Pod的Toleration声明中的key和effect需要与Taint的设置保持一致。详情参见节点管理,https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

      v. 点击创建
      • 在应用->有状态可看到创建成功的应用。

      • 点击详情,可看到该应用的详情页面。

      • 点击伸缩,可修改当前应用的副本数量。

      • 点击编辑,可修改该应用的yaml文件。

      • 点击移除,可删除该应用。
      • 进入master节点控制台,可查看创建成功的mysql应用。

  • 查看容器组(应用->容器组)
    • 该页面可以看到集群对应命名空间下的Pod

    • 点击详情,可以查看该容器的详情

      创建守护进程集(DaemonSet)应用

      应用场景

         确保所有(或部分)Node节点上运行Pod的副本,随着新的Node呗添加到集群中的同时,会将Pod添加到新Node上,随着节点从集群中删除,垃圾收集器也会将删除这些Pod,其主要可用于集群存储,日志收集和节点监控。

      a) 在容器服务菜单下,单击左侧导航栏中的应用>守护进程集,选择所需的命名空间(默认为deafult),然后单击页面右上角的创建

      image.png

      b) 设置应用名称集群命名空间标签注解。然后单击下一步进入容器配置页面

      image.png

      c) 设置容器配置

      i. 基本配置

          • 镜像名称:填写所用镜像名称,本例中为k8s.gcr.io/fluentd-elasticsearch:1.20。格式为domain/imagename。
          • 镜像版本:填写所需镜像版本,本例中不指定。如不指定,默认为latest。
          • 最小申请:为该应用所需最小资源额度,包括 CPU 和内存两种资源。该资源由容器独占,以防资源不足而被其他服务或进程争占资源,导致应用不可用。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • 最大申请:可指定该应用所能使用的最大资源额度,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • Init Container:勾选该项,表示创建一个 Init Container,在主容器启动前执行,进行初始化工作,详情参考https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
          • 添加容器:支持添加多个容器

                     image.png

      ii. 可选配置

          • 端口映射:配置所启动容器使用的协议(支持TCP和UDP)、端口
          • 环境变量:配置所启动容器所需的环境变量(key/value的形式)

      image.png

                       image.png

       

       

      请求类型

      配置说明

      HTTP/HTTPS

      即向容器发送一个 HTTPget 请求,支持的参数包括:

      • 路径:访问 HTTP server 的路径。
      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。
      • 运行多久后开始检测(秒):即 initialDelaySeconds,容器启动后第一次执行检测时需要等待多少秒,默认为 3 秒。
      • 检查间隔(秒):即 periodSeconds,指执行检查的时间间隔,默认为 10 秒,最小为 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      TCP

      即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      命令行

      通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

      • 命令行:用于检测容器健康情况的探测命令。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
            • 启动执行:为容器设置预启动命令和参数。
            • 启动后处理:为容器设置启动后的命令。
            • 停止前处理:为容器设置预结束命令。
          • 数据卷:支持配置临时卷和持久卷。
            • 临时卷:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录四种存储卷类型,将对应的挂载源挂载到容器路径中。更多信息参见volumes
            • 持久卷:挂载源为该集群可用存储卷(PVC),详情参见左侧菜单栏集群->存储卷

                  image.png

      iii. 完成容器配置后,单击下一步。

      iv. 进行高级设置

          • 可选:水平伸缩。您可勾选是否开启水平伸缩,为了满足应用在不同负载下的需求,容器服务支持容器组(Pod)的弹性伸缩,即根据容器 CPU 和内存资源占用情况自动调整容器副本数量。
            • 指标:可选 CPU 使用量和内存使用量,需要和设置的所需资源类型相同。
            • 触发条件:资源使用率的百分比,超过设置的Pod request值,容器开始扩容。
            • 最大副本数:该 Deployment 可扩容的副本(即容器组Pod)数量上限。
            • 最小副本数:该 Deployment 可缩容的副本(即容器组Pod)数量下限。

      注:若要启用水平伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。参见容器基本配置环节。              

            • 不可使用Pod最大数量:用于指定 Deployment在更新过程中不可用状态的Pod数量的百分比上限
            • 超过期望的Pod数量:用于指定在Deployment 更新Pod的过程中Pod总数超过Pod期望副本数的百分比上限

      image.png

          • 可选:Pod标签和注解。设置容器组的标签和注解。可用于Pod的调度设置。

                       image.png

          • 可选:调度设置(亲和性调度依赖节点和 Pod 标签,您可使用内置的标签进行调度;也可预先为节点、Pod 配置相关的标签
            • 节点亲和性。通过已有节点 Node 的标签(键)、操作符和标签值(值)进行设置。
              • 必须满足,即硬约束,一定要满足,对应 requiredDuringSchedulingIgnoredDuringExecution,效果与 NodeSelector 相同。您可以定义多条硬约束规则,但只需满足其中一条。
              • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。您可为软约束规则设定权重,具体调度时,若存在多个符合条件的节点,权重最大的节点会被优先调度。您可定义多条软约束规则,但必须满足全部约束,才会进行调度。
              • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

                                   image.png

            • 应用亲和性。通过节点上运行的 Pod 的标签(键)、操作符和标签值(值)进行设置,支持硬约束和软约束决定应用的 Pod 可以和哪些 Pod 部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。
              • 必须满足,即硬约束,一定要满足,对应requiredDuringSchedulingIgnoredDuringExecution,Pod 的亲和性调度必须要满足后续定义的约束条件。
                • 命名空间:该策略是依据 Pod 的 Label 进行调度,所以会受到命名空间的约束。
                • 拓扑域:即 topologyKey,指定调度时作用域,这是通过 Node 节点的标签来实现的。
                • 选择器:单击选择器右侧的添加按钮,可添加多条硬约束规则。
              • 尽量满足,即软约束,不一定满足,对应 preferredDuringSchedulingIgnoredDuringExecution。Pod 的亲和性调度会尽量满足后续定义的约束条件。对于软约束规则,您可配置每条规则的权重,其他配置规则与硬约束规则相同。
              • 约束条件(操作符):包括 In, NotIn, Exists, DoesNotExist

                             image.png

                             image.png

            • 设置应用非亲和性调度。决定应用的 Pod 不与哪些 Pod 部署在同一拓扑域。应用非亲和性调度的场景包括:
              • 将一个服务的 Pod 分散部署到不同的拓扑域(如不同主机)中,提高服务本身的稳定性。
              • 给予 Pod 一个节点的独占访问权限来保证资源隔离,保证不会有其它 Pod 来分享节点资源。
              • 把可能会相互影响的服务的 Pod 分散在不同的主机上。

      说明:应用非亲和性调度的设置方式与亲和性调度相同,但相同的调度规则代表的意思不同,请按需进行选择。

                             image.png

       

          • 应用->有状态可看到创建成功的应用。

      image.png

       

      创建任务

      背景说明

         任务(Job)负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

      Kubernetes支持以下几种Job:

      • 非并行Job:通常创建一个Pod直至其成功结束。
      • 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束。
      • 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功。
      • 固定结束次数的并行Job:同时设置.spec.completions.spec.Parallelism,多个Pod同时处理工作队列。

      a) 在容器服务菜单下,单击左侧导航栏中的应用>任务,选择所需的命名空间(默认为deafult),然后单击页面右上角的创建

      image.png

      b) 设置应用名称集群命名空间标签注解。然后单击下一步进入容器配置页面

      image.png

      c) 设置容器配置

      i. 基本配置

          • 镜像名称:填写所用镜像名称,本例中为k8s.gcr.io/fluentd-elasticsearch:1.20。格式为domain/imagename。
          • 镜像版本:填写所需镜像版本,本例中不指定。如不指定,默认为latest。
          • 最小申请:为该应用所需最小资源额度,包括 CPU 和内存两种资源。该资源由容器独占,以防资源不足而被其他服务或进程争占资源,导致应用不可用。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • 最大申请:可指定该应用所能使用的最大资源额度,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • Init Container:勾选该项,表示创建一个 Init Container,在主容器启动前执行,进行初始化工作,详情参考https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
          • 添加容器:支持添加多个容器

                     image.png

      ii. 可选配置

          • 端口映射:配置所启动容器使用的协议(支持TCP和UDP)、端口
          • 环境变量:配置所启动容器所需的环境变量(key/value的形式)

      image.png

                       image.png

       

       

      请求类型

      配置说明

      HTTP/HTTPS

      即向容器发送一个 HTTPget 请求,支持的参数包括:

      • 路径:访问 HTTP server 的路径。
      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。
      • 运行多久后开始检测(秒):即 initialDelaySeconds,容器启动后第一次执行检测时需要等待多少秒,默认为 3 秒。
      • 检查间隔(秒):即 periodSeconds,指执行检查的时间间隔,默认为 10 秒,最小为 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      TCP

      即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      命令行

      通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

      • 命令行:用于检测容器健康情况的探测命令。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
            • 启动执行:为容器设置预启动命令和参数。
            • 启动后处理:为容器设置启动后的命令。
            • 停止前处理:为容器设置预结束命令。
          • 数据卷:支持配置临时卷和持久卷。
            • 临时卷:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录四种存储卷类型,将对应的挂载源挂载到容器路径中。更多信息参见volumes
            • 持久卷:挂载源为该集群可用存储卷(PVC),详情参见左侧菜单栏集群->存储卷

                  image.png

      iii. 完成容器配置后,单击下一步。

      iv. 进行高级设置

          • 成功运行的Pod数量:completions,保证多少Pod运行成功结束
          • 并行运行的Pod数量:Parallelism,指定可以并行多少任务
          • 超时时间:设定如果任务启动失败超时多久重试
          • 重试次数:一次任务最多重试次数
          • 重启策略:若任务失败,是否重启任务

      image.png

       

      创建定时任务

      背景说明

         任务(Job)负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

      Kubernetes支持以下几种Job:

      • 非并行Job:通常创建一个Pod直至其成功结束。
      • 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束。
      • 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功。
      • 固定结束次数的并行Job:同时设置.spec.completions.spec.Parallelism,多个Pod同时处理工作队列。

      a) 在容器服务菜单下,单击左侧导航栏中的应用>任务,选择所需的命名空间(默认为deafult),然后单击页面右上角的创建

      image.png

      b) 设置应用名称集群命名空间标签注解。然后单击下一步进入容器配置页面

      image.png

      c) 设置容器配置

      i. 基本配置

          • 镜像名称:填写所用镜像名称,本例中为k8s.gcr.io/fluentd-elasticsearch:1.20。格式为domain/imagename。
          • 镜像版本:填写所需镜像版本,本例中不指定。如不指定,默认为latest。
          • 最小申请:为该应用所需最小资源额度,包括 CPU 和内存两种资源。该资源由容器独占,以防资源不足而被其他服务或进程争占资源,导致应用不可用。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • 最大申请:可指定该应用所能使用的最大资源额度,包括 CPU 和内存两种资源,防止占用过多资源。其中,CPU 资源的单位为 Core(即一个核)、内存的单位为 MiB。
          • Init Container:勾选该项,表示创建一个 Init Container,在主容器启动前执行,进行初始化工作,详情参考https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
          • 添加容器:支持添加多个容器

                     image.png

      ii. 可选配置

          • 端口映射:配置所启动容器使用的协议(支持TCP和UDP)、端口
          • 环境变量:配置所启动容器所需的环境变量(key/value的形式)

      image.png

                       image.png

       

       

      请求类型

      配置说明

      HTTP/HTTPS

      即向容器发送一个 HTTPget 请求,支持的参数包括:

      • 路径:访问 HTTP server 的路径。
      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • HTTP 头:即 HTTPHeaders,HTTP 请求中自定义的请求头,HTTP 允许重复的 header。支持键值对的配置方式。
      • 运行多久后开始检测(秒):即 initialDelaySeconds,容器启动后第一次执行检测时需要等待多少秒,默认为 3 秒。
      • 检查间隔(秒):即 periodSeconds,指执行检查的时间间隔,默认为 10 秒,最小为 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      TCP

      即向容器发送一个 TCP Socket,kubelet 将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:

      • 端口:容器暴露的访问端口或端口名,端口号必须介于 1~65535。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 15 秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为 1 秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。

      命令行

      通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:

      • 命令行:用于检测容器健康情况的探测命令。
      • 延迟探测时间(秒):即 initialDelaySeconds,容器启动后第一次执行探测时需要等待多少秒,默认为 5秒。
      • 执行探测频率(秒):即 periodSeconds,指执行探测的时间间隔,默认为 10 秒,最小为1秒。
      • 超时时间(秒):即 timeoutSeconds,探测超时时间。默认 1 秒,最小 1 秒。
      • 不健康阈值:探测成功后,最少连续探测失败多少次才被认定为失败。默认是 3,最小值是 1。
            • 启动执行:为容器设置预启动命令和参数。
            • 启动后处理:为容器设置启动后的命令。
            • 停止前处理:为容器设置预结束命令。
          • 数据卷:支持配置临时卷和持久卷。
            • 临时卷:支持主机目录(hostpath)、配置项(configmap)、保密字典(secret)和临时目录四种存储卷类型,将对应的挂载源挂载到容器路径中。更多信息参见volumes
            • 持久卷:挂载源为该集群可用存储卷(PVC),详情参见左侧菜单栏集群->存储卷

                  image.png

      iii. 完成容器配置后,单击下一步。

      iv. 进行高级设置

          • 定时规则:设定固定时间启动任务,生效时间为UTC时间
          • 并发策略:谁定任务是否允许并发
          • 任务记录:设置保留成功的任务数及失败的任务数
          • 成功运行的Pod数量:completions,保证多少Pod运行成功结束
          • 并行运行的Pod数量:Parallelism,指定可以并行多少任务
          • 超时时间:设定如果任务启动失败超时多久重试
          • 重试次数:一次任务最多重试次数
          • 重启策略:若任务失败,是否重启任务

      image.png

       

       


       

网络管理

简介

本文介绍首云容器服务Kubernetes支持的网络类型。
首云支持ClusterIp
ClusterIp 是 Kubernetes 中默认的服务类型 (ServiceType),选择此种类型,对应的 Service 将被分配一个集群内部的 IP 地址,只能在集群内部被访问。
NodePort
在每台 Node 的固定端口上暴露服务,选择 NodePort 的服务类型,集群会自动创建一个 ClusterIp 类型的服务,负责处理Node接收到的外部流量。集群外部的 Client 可以通过:的方式访问该服务。

操作说明

 

  • 创建服务

    1.在容器集群菜单下,单击左侧导航栏中的服务与路由 > 服务,进入服务列表页面。

    2.选择所需的集群和命名空间,单击页面右上角的创建服务


3.在弹出的创建服务对话框中,进行配置。

  • 名称:输入服务的名称,本例中为hello。
  • 类型:选择服务类型,即服务访问的方式。包括:
    • ClusterIP :指通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType。
    • NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个 NodePort 服务。
  • 关联:选择服务要绑定的后端对象o。若不进行关联部署,则不会创建相关的 Endpoints 对象,您可自己进行绑定。
  • 外部流量策略:可选值为Local或Cluster。
    说明:服务类型为NodePort时,才能设置外部流量策略。
  • 端口映射:添加服务端口和容器端口,容器端口需要与后端的 Pod 中暴露的容器端口一致。
  • 注解:为该服务添加一个注解(annotation)。
  • 标签:您可为该服务添加一个标签,标识该服务。

  • 查看服务

    在容器集群菜单下,单击左侧导航栏中的服务与路由 > 服务,进入服务列表页面。

  • 编辑服务

    1.在容器集群菜单下,单击左侧导航栏中的服务与路由 > 服务,进入服务列表页面。

    2.选择集群和命名空间,选择所需的服务(本示例中选择hello),单击右侧的编辑


   3.在弹出的更新对话框中,进行配置修改,然后单击确认

  • 删除服务

        1.在容器集群菜单下,单击左侧导航栏中的服务与路由 > 服务,进入服务列表页面。

        2.选择集群和命名空间,选择所需的服务(本示例中选择 hello),单击右侧的


      3.在弹出的对话框中点击确认,即可删除服务。

  • 创建路由

    1.在容器集群菜单下,单击左侧导航栏中的服务与路由 >路由,进入路由列表页面。

    2.选择所需的集群和命名空间,单击页面右上角的创建路由

   3.在弹出的路由创建对话框中对路由规则进行配置。

路由规则是指授权入站到达集群服务的规则,支持 http/https 规则,配置项包括域名、服务名称、服务端口、服务路径、注解和标签等。


 4.最后单击确认,返回路由列表。等待一段时间,可以看到一条路由。

  • 编辑路由

        1.在容器集群菜单下,单击左侧导航栏中的服务与路由 >路由,进入路由列表页面。

        2.选择集群和命名空间,选择所需的路由(本示例中选择hello),单击右侧的编辑


   3.在弹出的对话框中,对路由的相关参数进行变更,然后单击确认,完成编辑

  • 移除路由

    1.在容器集群菜单下,单击左侧导航栏中的服务与路由 >路由,进入路由列表页面。

    2.选择集群和命名空间,选择所需的路由(本示例中选择hello),单击右侧的移除


3.在弹出的对话框中点击确认,即可删除路由。

监控管理

简介

Prometheus是一套开源的系统监控报警框架,它具有灵活的数据模型:监控数据由值、时间戳、标签;源数据记录在标签中,支持采集时对标签进行修改,从而使得其具有强大的扩展能力。

操作说明

 

  • 开启监控

    说明:集群创建后监控服务需要手动开启,开启过程如下:

    上述步骤完成后,等待集群更新,更新完成后,集群状态显示正常后可查看使用监控。
     

    • 在集群界面找到要开启监控的集群,点击右侧更多,会有开启监控的功能,如下图:



    • 点击开启监控后,会提示选择监控所需的pv,如下图:
          
  • 创建此过程按照提示可能需要创建NAS存储或SC,PVC等,可参考上文存储管理
  • 点击确定,页面上方会显示会显示创建任务已下发的提示,同时集群状态转变为更新,如下图:

  • 概览页监控查看以及资源介绍
    • 选择集群,选择集群命名空间

    • 监控仪表盘说明
      • 应用状态

           

        i. Container:
        • Running:容器处于正在运行状态的容器个数
        • Waiting:容器处于初始状态的容器个数
        • Terminated:容器处于结束运行时状态的容器个数
        ii. Pod(可在左侧功能栏应用/容器组查看详细信息):
        • Running:该Pod被绑定至一个节点,且该Pod内的所有容器均成功创建。
        • Pending:K8s已经创建该Pod,但还没有进入运行状态,如Pod未完成调度,或正在拉取镜像等。
        • Succeeded:Pod中所有容器都已成功终止,并且不会被重启。
        • Failed:Pod中所有容器都已经终止,且至少有一个容器异常终止。
        • Unknow:k8s的master节点与worker可能存在通信故障,无法确定Pod状态。
        iii. Deployment(无状态应用,可在左侧功能栏应用/无状态查看详细信息):
        • True:Deployment处于正常(Complete)状态的个数
        • False:Deployment处于(Failed)状态的个数
        • Unknown:Deployment状态未知的个数
        iv. Statefulset(有状态应用,可在左侧功能栏应用/有状态查看详细信息):
        • True:有状态应处于正常的个数
        • False:有状态应用处于异常的个数
      • 节点状态(可在左侧功能栏集群/节点查看详细信息)

        i. 就绪:当前处于就绪(可用)状态的节点(包括master节点和worker节点)。

        ii. 不可调度:显示Worker节点处于不可调度的节点数量。

        iii. PID压力:显示PID资源不足的节点个数。

        iv. 内存压力:显示内存过低的节点个数。

        v. 磁盘压力:显示磁盘容量低的节点个数。

      • 资源监控

        i. CPU:显示当前集群的CPU总量,已使用,使用率。

        ii. 内存:显示当前集群的内存总量,已使用,使用率。(单位: GiB)

        iii. 文件系统使用统计:显示当前集群文件存储总量,已使用,使用率。(单位: GiB)

      • 组件状态

        i. etcd:分布式键值存储系统,用于保存集群状态数据,比如Pod,Service等对象信息。

        ii. Kube-scheduler:运行在Master节点上,调度器的职责主要是为新创建的pod在集群中寻找合适的node,并将pod调度到Node上。

        iii. Kubectl: kubectl 是 Kubernetes 的命令行工具,是 Kubernetes 用户和管理员必备的管理工具。

  • 查看详细监控
    • 点击集群的更多按键,之前的开启监控转变为查看监控,如图:

    • 点击查看Grafana可将prometheus监控抓取的监控数据转化为可视化的各类仪表盘进行显示
      • 点击查看Grafana

      • 跳转至Grafana登录首页

      • 登录进首页后,即可查看相关仪表盘(折磨默认配置prometheus数据库作为数据源,无需用户自己配置数据源)

      • 点击Nodes查看仪表盘,这里默认数据源已关联至prometheus,用户无需操作,可查看当前集群对应实例

      • 左侧导航为Grafana功能栏,功能丰富,可自定义仪表盘等操作。
      • 右上角为其他功能,如全屏,分享,打星,设置当前仪表盘显示时间范围,刷新当前仪表盘等功能

      • 自定义仪表盘,点击左侧功能导航栏的+,点击Dashboard,页面转换为下图右侧NewPanel

      • 点击上图右侧中的AddQuery,跳转至设置仪表盘主界面

        上图中查询数据源选择prometheus,Metrics里输入PormQL表达式(为prometheus监控系统中用于检索监控数据的查询语言),还可以设置其他比如图例,抓取时间等。可以添加多个查询,点击上图右侧AddQuery,操作同上。在通用配置里可以设置该仪表盘名称,最后点击右上方左侧功能按钮保存。

      • 如图为上述步骤创建的简单仪表盘

      • 方便仪表盘管理,用户可创建文件夹,在该文件夹下创建仪表盘

        步骤前面自定义仪表盘相同

        选择其他样式的仪表盘

        这里以Gauge类型仪表盘为例,设置完成后如下图右侧