应用管理
- 1: 命名空间
- 2: 工作负载
- 2.1: Deployment
- 2.2: StatefulSet
- 2.3: DaomonSet
- 2.4: Job
- 2.5: CronJob
- 2.6: TApp
- 2.7: 工作负载的请求与限制
- 3: 服务
- 4: 配置管理
- 5: 存储
- 5.1: PV和PVC
- 5.2: StorageClass
- 6: 事件
- 7: 日志
1 - 命名空间
Namespaces 是 Kubernetes 在同一个集群中进行逻辑环境划分的对象, 您可以通过 Namespaces 进行管理多个团队多个项目的划分。在 Namespaces 下,Kubernetes 对象的名称必须唯一。您可以通过资源配额进行可用资源的分配,还可以进行不同 Namespaces 网络的访问控制。
使用方法
- 通过 TKEStack 控制台使用:TKEStack 控制台提供 Namespaces 的增删改查功能。
- 【业务管理】平台下不支持对命名空间的直接操作,需在【平台管理】下【业务管理】中指定业务通过“创建业务下的命名空间”来实现。
- 通过 Kubectl 使用:更多详情可查看 Kubernetes 官网文档。
相关知识
通过 ResourceQuota 设置 Namespaces 资源的使用配额
一个命名空间下可以拥有多个 ResourceQuota 资源,每个 ResourceQuota 可以设置每个 Namespace 资源的使用约束。可以设置 Namespaces 资源的使用约束如下:
- 计算资源的配额,例如 CPU、内存。
- 存储资源的配额,例如请求存储的总存储。
- Kubernetes 对象的计数,例如 Deployment 个数配额。
不同的 Kubernetes 版本,ResourceQuota 支持的配额设置略有差异,更多详情可查看 Kubernetes ResourceQuota 官方文档。 ResourceQuota 的示例如下所示:
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
namespace: default
spec:
hard:
configmaps: "10" ## 最多10个 ConfigMap
replicationcontrollers: "20" ## 最多20个 replicationcontroller
secrets: "10" ## 最多10个 secret
services: "10" ## 最多10个 service
services.loadbalancers: "2" ## 最多2个 Loadbanlacer 模式的 service
cpu: "1000" ## 该 Namespaces 下最多使用1000个 CPU 的资源
memory: 200Gi ## 该 Namespaces 下最多使用200Gi的内存
2 - 工作负载
工作负载
2.1 - Deployment
Deployment 声明了 Pod 的模板和控制 Pod 的运行策略,适用于部署无状态的应用程序。您可以根据业务需求,对 Deployment 中运行的 Pod 的副本数、调度策略、更新策略等进行声明。
Deployment 控制台操作指引
创建 Deployment
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建Deployment的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【Deployment】管理页面。如下图所示:
- 单击【新建】,进入 “新建Workload” 页面。根据实际需求,设置 Deployment 参数。关键参数信息如下,其中必填项为工作负载名、实例内容器的名称和镜像:
- 工作负载名:输入自定义名称。
- 标签:给工作负载添加标签
- 命名空间:根据实际需求进行选择。
- 类型:选择【Deployment(可扩展的部署 Pod)】。
- 数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
- 临时目录:主机上的一个临时目录,生命周期和Pod一致
- 主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
- NFS盘:挂载外部NFS到Pod,用户需要指定相应NFS地址,格式:127.0.0.1:/data
- ConfigMap:用户在业务Namespace下创建的ConfigMap
- Secret:用户在业务namespace下创建的Secret
- PVC:用户在业务namespace下创建的PVC
- 实例内容器:根据实际需求,为 Deployment 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义
- 镜像:根据实际需求进行选择
镜像版本(Tag):根据实际需求进行填写,不填默认为
latest
CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性(建议使用默认值)
GPU限制:如容器内需要使用GPU,此处填GPU需求
环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
新增变量:自己设定变量键值对
引用ConfigMap/Secret:引用已有键值对
高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
- 实例数量:根据实际需求选择调节方式,设置实例数量。
- 手动调节:直接设定实例个数
- 自动调节:根据设定的触发条件自动调节实例个数,目前支持根据CPU、内存利用率和利用量出入带宽等调节实例个数
- 定时调节:根据Crontab 语法周期性设置实例个数
- imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
- 节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
- 注释(Annotations):给Deployment添加相应Annotation,如用户信息等
- 网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
- Service:勾选【启用】按钮,配置负载端口访问
服务访问方式:选择是【仅在集群内部访问】该负载还是集群外部通过【主机端口访问】该负载
- 仅在集群内访问:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离
- 主机端口访问:提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node
- Headless Service:不创建用于集群内访问的ClusterIP,访问Service名称时返回后端Pods IP地址,用于适配自有的服务发现机制。解析域名时返回相应 Pod IP 而不是 Cluster IP
端口映射:输入负载要暴露的端口并指定通信协议类型(容器和服务端口建议都使用80)
Session Affinity: 点击【显示高级设置】出现,会话保持,设置会话保持后,会根据请求IP把请求转发给这个IP之前访问过的Pod。默认None,按需使用
单击【创建Workload】,完成创建。如下图所示:
当“运行/期望Pod数量”相等时,即表示 Deployment 下的所有 Pod 已创建完成。
更新 Deployment
更新 YAML
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要更新的【业务】下相应的【命名空间】,展开【工作负载】列表,进入【Deployment】管理页面。如下图所示:
- 在需要更新 YAML 的 Deployment 行中,单击【更多】>【编辑YAML】,进入“更新 Deployment” 页面。如下图所示:
- 在 “更新Deployment” 页面,编辑 YAML,单击【完成】,即可更新 YAML。如下图所示:
回滚 Deployment
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择要变更的业务下相应的【命名空间】,展开【工作负载】列表,进入【 Deployment】 管理页面,点击进入要回滚的 Deployment 详情页面,单击【修订历史】。如下图所示:
- 选择合适版本进行回顾。
- 在弹出的 “回滚资源” 提示框中,单击【确定】即可完成回滚。
调整 Pod 数量
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择要变更的业务下相应的命名空间,展开工作负载列表,进入 Deployment 管理页面。
- 点击 Deployment 列表操作栏的【更新实例数量】按钮。如下图所示:
- 根据实际需求调整 Pod 数量,单击【更新实例数目】即可完成调整。
查看Deployment监控数据
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】,。
- 选择要变更的业务下相应的【命名空间】,点击进入 【Deployment】 管理页面。
- 单击【监控】按钮,在弹出的工作负载监控页面选择工作负载查看监控信息。如下图所示:
Kubectl 操作 Deployment 指引
YAML 示例
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- kind:标识 Deployment 资源类型。
- metadata:Deployment 的名称、Namespace、Label 等基本信息。
- metadata.annotations:对 Deployment 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
- spec.replicas:Deployment 管理的 Pod 数量。
- spec.selector:Deployment 管理 Seletor 选中的 Pod 的 Label。
- spec.template:Deployment 管理的 Pod 的详细模板配置。
更多参数详情可查看 Kubernetes Deployment 官方文档。
Kubectl 创建 Deployment
参考 YAML 示例,准备 Deployment YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 Deployment YAML 文件。
kubectl create -f 【Deployment YAML 文件名称】
例如,创建一个文件名为 nginx.Yaml 的 Deployment YAML 文件,则执行以下命令:
kubectl create -f nginx.yaml
执行以下命令,验证创建是否成功。
kubectl get deployments
返回类似以下信息,即表示创建成功。
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE first-workload 1 1 1 0 6h ng 1 1 1 1 42m
Kubectl 更新 Deployment
通过 Kubectl 更新 Deployment 有以下三种方法。其中,方法一 和 方法二 均支持 Recreate 和 RollingUpdate 两种更新策略。
- Recreate 更新策略为先销毁全部 Pod,再重新创建 Deployment。
- RollingUpdate 更新策略为滚动更新策略,逐个更新 Deployment 的 Pod。RollingUpdate 还支持暂停、设置更新时间间隔等。
方法一
执行以下命令,更新 Deployment。
kubectl edit deployment/【name】
此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 Deployment 参数。
方法二
执行以下命令,更新指定容器的镜像。
kubectl set image deployment/【name】 【containerName】=【image:tag】
建议保持 Deployment 的其他参数不变,业务更新时,仅更新容器镜像。
方法三
执行以下命令,滚动更新指定资源。
kubectl rolling-update 【NAME】 -f 【FILE】
更多滚动更新可参见 滚动更新说明。
Kubectl 回滚 Deployment
执行以下命令,查看 Deployment 的更新历史。
kubectl rollout history deployment/【name】
执行以下命令,查看指定版本详情。
kubectl rollout history deployment/【name】 --revision=【REVISION】
执行以下命令,回滚到前一个版本。
kubectl rollout undo deployment/【name】
如需指定回滚版本号,可执行以下命令。
kubectl rollout undo deployment/【name】 --to-revision=【REVISION】
Kubectl 调整 Pod 数量
手动更新 Pod 数量
执行以下命令,手动更新 Pod 数量。
kubectl scale deployment 【NAME】 --replicas=【NUMBER】
自动更新 Pod 数量
前提条件
开启集群中的 HPA 功能。TKE 创建的集群默认开启 HPA 功能。
操作步骤
执行以下命令,设置 Deployment 的自动扩缩容。
kubectl autoscale deployment 【NAME】 --min=10 --max=15 --cpu-percent=80
Kubectl 删除 Deployment
执行以下命令,删除 Deployment。
kubectl delete deployment 【NAME】
2.2 - StatefulSet
StatefulSet 主要用于管理有状态的应用,创建的 Pod 拥有根据规范创建的持久型标识符。Pod 迁移或销毁重启后,标识符仍会保留。 在需要持久化存储时,您可以通过标识符对存储卷进行一一对应。如果应用程序不需要持久的标识符,建议您使用 Deployment 部署应用程序。
StatefulSet 控制台操作指引
创建 StatefulSet
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建StatefulSet的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【StatefulSet】管理页面。如下图所示:
单击【新建】,进入 “新建Workload” 页面。根据实际需求,设置 StatefulSet 参数。
关键参数信息如下,其中必填项为工作负载名、实例内容器的名称和镜像:
- 工作负载名:输入自定义名称。
- 标签:给工作负载添加标签
- 命名空间:根据实际需求进行选择。
- 类型:选择【StatefulSet】。
- 数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
- 临时目录:主机上的一个临时目录,生命周期和Pod一致
- 主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
- NFS盘:挂载外部NFS到Pod,用户需要指定相应NFS地址,格式:127.0.0.1:/data
- ConfigMap:用户在业务Namespace下创建的ConfigMap
- Secret:用户在业务namespace下创建的Secret
- PVC:用户在业务namespace下创建的PVC
- 实例内容器:根据实际需求,为 StatefulSet的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义
- 镜像:根据实际需求进行选择
- 镜像版本(Tag):根据实际需求进行填写,不填默认为
latest
- CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性(建议使用默认值)
- GPU限制:如容器内需要使用GPU,此处填GPU需求
- 环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
- 新增变量:自己设定变量键值对
- 引用ConfigMap/Secret:引用已有键值对
- 高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
- 镜像版本(Tag):根据实际需求进行填写,不填默认为
- 实例数量:根据实际需求选择调节方式,设置实例数量。
- 手动调节:直接设定实例个数
- 自动调节:根据设定的触发条件自动调节实例个数,目前支持根据CPU、内存利用率和利用量出入带宽等调节实例个数
- 定时调节:根据Crontab 语法周期性设置实例个数
- imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
- 节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
- 注释(Annotations):给StatefulSet添加相应Annotation,如用户信息等
- 网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
- Service:勾选【启用】按钮,配置负载端口访问
注意:如果不勾选【启用】则不会创建Service
服务访问方式:选择是【仅在集群内部访问】该负载还是集群外部通过【主机端口访问】该负载
- 仅在集群内访问:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离
- 主机端口访问:提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node
- Headless Service:不创建用于集群内访问的ClusterIP,访问Service名称时返回后端Pods IP地址,用于适配自有的服务发现机制。解析域名时返回相应 Pod IP 而不是 Cluster IP
端口映射:输入负载要暴露的端口并指定通信协议类型(容器和服务端口建议都使用80)
Session Affinity: 点击【显示高级设置】出现,会话保持,设置会话保持后,会根据请求IP把请求转发给这个IP之前访问过的Pod。默认None,按需使用
单击【创建Workload】,完成创建。
更新 StatefulSet
更新 YAML
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要更新的【业务】下相应的【命名空间】,展开【工作负载】列表,进入【StatefulSet】管理页面。
- 在需要更新 YAML 的 StatefulSet 行中,选择【更多】>【编辑YAML】,进入更新 StatefulSet 页面。
- 在 “更新StatefulSet” 页面编辑 YAML,并单击【完成】即可更新 YAML。
Kubectl 操作 StatefulSet 指引
YAML 示例
apiVersion: v1
kind: Service ## 创建一个 Headless Service,用于控制网络域
metadata:
name: nginx
namespace: default
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet ### 创建一个 Nginx的StatefulSet
metadata:
name: web
namespace: default
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "cbs"
resources:
requests:
storage: 10Gi
- kind:标识 StatefulSet 资源类型。
- metadata:StatefulSet 的名称、Label等基本信息。
- metadata.annotations:对 StatefulSet 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
- spec.template:StatefulSet 管理的 Pod 的详细模板配置。
- spec.volumeClaimTemplates:提供创建 PVC&PV 的模板。
更多参数详情可查看 Kubernetes StatefulSet 官方文档。
创建 StatefulSet
参考 YAML 示例,准备 StatefulSet YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 StatefulSet YAML 文件。
kubectl create -f StatefulSet YAML 文件名称
例如,创建一个文件名为 web.yaml 的 StatefulSet YAML 文件,则执行以下命令:
kubectl create -f web.yaml
执行以下命令,验证创建是否成功。
kubectl get StatefulSet
返回类似以下信息,即表示创建成功。
NAME DESIRED CURRENT AGE test 1 1 10s
更新 StatefulSet
执行以下命令,查看 StatefulSet 的更新策略类型。
kubectl get ds/<daemonset-name> -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}'
StatefulSet 有以下两种更新策略类型:
- OnDelete:默认更新策略。该更新策略在更新 StatefulSet 后,需手动删除旧的 StatefulSet Pod 才会创建新的 StatefulSet Pod。
- RollingUpdate:支持 Kubernetes 1.7或更高版本。该更新策略在更新 StatefulSet 模板后,旧的 StatefulSet Pod 将被终止,并且以滚动更新方式创建新的 StatefulSet Pod(Kubernetes 1.7或更高版本)。
方法一
执行以下命令,更新 StatefulSet。
kubectl edit StatefulSet/[name]
此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 StatefulSet 参数。
方法二
执行以下命令,更新指定容器的镜像。
kubectl patch statefulset <NAME> --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"<newImage>"}]'
建议保持 StatefulSet 的其他参数不变,业务更新时,仅更新容器镜像。
如果更新的 StatefulSet 是滚动更新方式的策略,可执行以下命令查看更新状态:
kubectl rollout status sts/<StatefulSet-name>
删除 StatefulSet
执行以下命令,删除 StatefulSet。
kubectl delete StatefulSet [NAME] --cascade=false
–cascade=false 参数表示 Kubernetes 仅删除 StatefulSet,且不删除任何 Pod。如需删除 Pod,则执行以下命令:
kubectl delete StatefulSet [NAME]
更多 StatefulSet 相关操作可查看 Kubernetes官方指引。
2.3 - DaomonSet
DaomonSet
DaemonSet 主要用于部署常驻集群内的后台程序,例如节点的日志采集。DaemonSet 保证在所有或部分节点上均运行指定的 Pod。 新节点添加到集群内时,也会有自动部署 Pod;节点被移除集群后,Pod 将自动回收。
调度说明
若配置了 Pod 的 nodeSelector 或 affinity 参数,DaemonSet 管理的 Pod 将按照指定的调度规则调度。若未配置 Pod 的 nodeSelector 或 affinity 参数,则将在所有的节点上部署 Pod。
DaemonSet 控制台操作指引
创建 DaemonSet
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建DaemonSet的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【DaemonSet】管理页面。如下图所示:
单击【新建】,进入 “新建Workload” 页面。
根据实际需求,设置 DaemonSet 参数。关键参数信息如下:
- 工作负载名:输入自定义名称。
- 标签:给工作负载添加标签
- 命名空间:根据实际需求进行选择。
- 类型:选择【DaemonSet】。
- 数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
- 临时目录:主机上的一个临时目录,生命周期和Pod一致
- 主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
- NFS盘:挂载外部NFS到Pod,用户需要指定相应NFS地址,格式:127.0.0.1:/data
- ConfigMap:用户在业务Namespace下创建的ConfigMap
- Secret:用户在业务namespace下创建的Secret
- PVC:用户在业务namespace下创建的PVC
- 实例内容器:根据实际需求,为 DaemonSet 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义。
- 镜像:根据实际需求进行选择。
- 镜像版本(Tag):根据实际需求进行填写。
- CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。
- GPU限制:如容器内需要使用GPU,此处填GPU需求
- 环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
新增变量:自己设定变量键值对
引用ConfigMap/Secret:引用已有键值对
高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
- imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
- 节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
- 注释(Annotations):给DaemonSet添加相应Annotation,如用户信息等
- 网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
单击【创建Workload】,完成创建。
更新 DaemonSet
更新 YAML
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要更新的【业务】下相应的命名空间,展开【工作负载】列表,进入【DaemonSet】管理页面。
- 在需要更新 YAML 的 DaemonSet 行中,选择【更多】>【编辑YAML】,进入更新 DaemonSet 页面。
- 在 “更新DaemonSet” 页面编辑 YAML,并单击【完成】即可更新 YAML。
Kubectl 操作 DaemonSet 指引
YAML 示例
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: k8s.gcr.io/fluentd-elasticsearch:1.20
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
!以上 YAML 示例引用于
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset
, 创建时可能存在容器镜像拉取不成功的情况,仅用于本文介绍 DaemonSet 的组成。
- kind:标识 DaemonSet 资源类型。
- metadata:DaemonSet 的名称、Label等基本信息。
- metadata.annotations:DaemonSet 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
- spec.template:DaemonSet 管理的 Pod 的详细模板配置。
更多可查看 Kubernetes DaemonSet 官方文档。
Kubectl 创建 DaemonSet
参考 YAML 示例,准备 DaemonSet YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 DaemonSet YAML 文件。
kubectl create -f DaemonSet YAML 文件名称
例如,创建一个文件名为 fluentd-elasticsearch.yaml 的 DaemonSet YAML 文件,则执行以下命令:
kubectl create -f fluentd-elasticsearch.yaml
执行以下命令,验证创建是否成功。
kubectl get DaemonSet
返回类似以下信息,即表示创建成功。
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE frontend 0 0 0 0 0 app=frontend-node 16d
Kubectl 更新 DaemonSet
执行以下命令,查看 DaemonSet 的更新策略类型。
kubectl get ds/<daemonset-name> -o go-template='{{.spec.updateStrategy.type}}{{"\n"}}'
DaemonSet 有以下两种更新策略类型:
- OnDelete:默认更新策略。该更新策略在更新 DaemonSet 后,需手动删除旧的 DaemonSet Pod 才会创建新的DaemonSet Pod。
- RollingUpdate:支持 Kubernetes 1.6或更高版本。该更新策略在更新 DaemonSet 模板后,旧的 DaemonSet Pod 将被终止,并且以滚动更新方式创建新的 DaemonSet Pod。
方法一
执行以下命令,更新 DaemonSet。
kubectl edit DaemonSet/[name]
此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 DaemonSet 参数。
方法二
执行以下命令,更新指定容器的镜像。
kubectl set image ds/[daemonset-name][container-name]=[container-new-image]
建议保持 DaemonSet 的其他参数不变,业务更新时,仅更新容器镜像。
Kubectl 回滚 DaemonSet
执行以下命令,查看 DaemonSet 的更新历史。
kubectl rollout history daemonset /[name]
执行以下命令,查看指定版本详情。
kubectl rollout history daemonset /[name] --revision=[REVISION]
执行以下命令,回滚到前一个版本。
kubectl rollout undo daemonset /[name]
如需指定回滚版本号,可执行以下命令。
kubectl rollout undo daemonset /[name] --to-revision=[REVISION]
Kubectl 删除 DaemonSet
执行以下命令,删除 DaemonSet。
kubectl delete DaemonSet [NAME]
2.4 - Job
Job
Job 控制器会创建 1-N 个 Pod,这些 Pod 按照运行规则运行,直至运行结束。Job 可用于批量计算、数据分析等场景。通过设置重复执行次数、并行度、重启策略等满足业务述求。 Job 执行完成后,不再创建新的 Pod,也不会删除 Pod,您可在 “日志” 中查看已完成的 Pod 的日志。如果您删除了 Job,Job 创建的 Pod 也会同时被删除,将查看不到该 Job 创建的 Pod 的日志。
Job 控制台操作指引
创建 Job
登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
选择需要创建 Job 的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【 Job】 管理页面。
单击【新建】,进入 “新建Workload” 页面。如下图所示:
根据实际需求,设置 Job 参数。关键参数信息如下:
工作负载名:输入自定义名称。
标签:给工作负载添加标签
命名空间:根据实际需求进行选择。
类型:选择【Job(单次任务)】。
Job设置
- 重复执行次数:Job 管理的 Pod 需要重复执行的次数。
- 并行度:Job 并行执行的 Pod 数量。
- 失败重启策略:Pod下容器异常推出后的重启策略。
- Never:不重启容器,直至 Pod 下所有容器退出。
- OnFailure:Pod 继续运行,容器将重新启动。
数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
临时目录:主机上的一个临时目录,生命周期和Pod一致
主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
NFS盘:挂载外部 NFS 到 Pod,用户需要指定相应 NFS 地址,格式:127.0.0.1:/data
ConfigMap:用户在业务Namespace下创建的ConfigMap
Secret:用户在业务namespace下创建的Secret
PVC:用户在业务namespace下创建的PVC
实例内容器:根据实际需求,为 Job 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义。
- 镜像:根据实际需求进行选择。
- 镜像版本(Tag):根据实际需求进行填写。
- CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。
- GPU限制:如容器内需要使用GPU,此处填GPU需求
- 环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
新增变量:自己设定变量键值对
引用ConfigMap/Secret:引用已有键值对
高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
注释(Annotations):给Pod添加相应Annotation,如用户信息等
网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
单击【创建Workload】,完成创建。
查看 Job 状态
登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
选择需要创建 Job 的业务下相应的【命名空间】,展开【工作负载】下拉项,进入【 Job 】管理页面。
单击需要查看状态的【 Job 名称】,即可查看 Job 详情。
删除 Job
Job 执行完成后,不再创建新的 Pod,也不会删除 Pod,您可在【业务管理】控制台下的【应用管理】下的 【日志】 中查看已完成的 Pod 的日志。如果您删除了 Job,Job 创建的 Pod 也会同时被删除,将查看不到该 Job 创建的 Pod 的日志。
Kubectl 操作 Job 指引
YAML 示例
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
completions: 2
parallelism: 2
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
- kind:标识 Job 资源类型。
- metadata:Job 的名称、Label等基本信息。
- metadata.annotations:Job 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
- spec.completions:Job 管理的 Pod 重复执行次数。
- spec.parallelism:Job 并行执行的 Pod 数。
- spec.template:Job 管理的 Pod 的详细模板配置。
创建 Job
参考 YAML 示例,准备 Job YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
创建 Job YAML 文件。
kubectl create -f Job YAML 文件名称
例如,创建一个文件名为 pi.yaml 的 Job YAML 文件,则执行以下命令:
kubectl create -f pi.yaml
执行以下命令,验证创建是否成功。
kubectl get job
返回类似以下信息,即表示创建成功。
NAME DESIRED SUCCESSFUL AGE job 1 0 1m
删除 Job
执行以下命令,删除 Job。
kubectl delete job [NAME]
2.5 - CronJob
CronJob
一个 CronJob 对象类似于 crontab(cron table)文件中的一行。它根据指定的预定计划周期性地运行一个 Job,格式可以参考 Cron。 Cron 格式说明如下:
# 文件格式说明
# ——分钟(0 - 59)
# | ——小时(0 - 23)
# | | ——日(1 - 31)
# | | | ——月(1 - 12)
# | | | | ——星期(0 - 6)
# | | | | |
# * * * * *
CronJob 控制台操作指引
创建 CronJob
登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
选择需要创建CronJob的业务下相应的【命名空间】,展开【工作负载】下拉项,进入【CronJob】管理页面。如下图所示:
单击【创建】按钮,进入 新建Workload页面。
根据实际需求,设置 CronJob 参数。关键参数信息如下:
- 工作负载名:输入自定义名称。
- 标签:给工作负载添加标签
- 命名空间:根据实际需求进行选择。
- 类型:选择【CronJob(按照Cron的计划定时运行)】。
- 执行策略:根据 Cron 格式设置任务的定期执行策略。
- Job设置
- 重复执行次数:Job 管理的 Pod 需要重复执行的次数。
- 并行度:Job 并行执行的 Pod 数量。
- 失败重启策略:Pod下容器异常推出后的重启策略。
- Never:不重启容器,直至 Pod 下所有容器退出。
- OnFailure:Pod 继续运行,容器将重新启动。
- 数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
- 临时目录:主机上的一个临时目录,生命周期和Pod一致
- 主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
- NFS盘:挂载外部NFS到Pod,用户需要指定相应NFS地址,格式:127.0.0.1:/data
- ConfigMap:用户在业务Namespace下创建的ConfigMap
- Secret:用户在业务namespace下创建的Secret
- PVC:用户在业务namespace下创建的PVC
- 实例内容器:根据实际需求,为 CronJob 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义。
- 镜像:根据实际需求进行选择。
- 镜像版本(Tag):根据实际需求进行填写。
- CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。
- GPU限制:如容器内需要使用GPU,此处填GPU需求
- 环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
新增变量:自己设定变量键值对
引用ConfigMap/Secret:引用已有键值对
高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
- imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
- 节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
- 注释(Annotations):给Pod添加相应Annotation,如用户信息等
- 网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
单击【创建Workload】,完成创建。
查看 CronJob 状态
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建CronJob的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【CronJob】管理页面。
- 单击需要查看状态的 CronJob 名称,即可查看 CronJob 详情。
Kubectl 操作 CronJob 指引
YAML 示例
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
- kind:标识 CronJob 资源类型。
- metadata:CronJob 的名称、Label等基本信息。
- metadata.annotations:对 CronJob 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
- spec.schedule:CronJob 执行的 Cron 的策略。
- spec.jobTemplate:Cron 执行的 Job 模板。
创建 CronJob
方法一
参考 YAML 示例,准备 CronJob YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 CronJob YAML 文件。
kubectl create -f CronJob YAML 文件名称
例如,创建一个文件名为 cronjob.yaml 的 CronJob YAML 文件,则执行以下命令:
kubectl create -f cronjob.yaml
方法二
通过执行
kubectl run
命令,快速创建一个 CronJob。例如,快速创建一个不需要写完整配置信息的 CronJob,则执行以下命令:
kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello"
执行以下命令,验证创建是否成功。
kubectl get cronjob [NAME]
返回类似以下信息,即表示创建成功。
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob * * * * * False 0 <none> 15s
删除 CronJob
!
- 执行此删除命令前,请确认是否存在正在创建的 Job,否则执行该命令将终止正在创建的 Job。
- 执行此删除命令时,已创建的 Job 和已完成的 Job 均不会被终止或删除。
- 如需删除 CronJob 创建的 Job,请手动删除。
执行以下命令,删除 CronJob。
kubectl delete cronjob [NAME]
2.6 - TApp
TApp
Kubernetes现有应用类型(如:Deployment、StatefulSet等)无法满足很多非微服务应用的需求,比如:操作(升级、停止等)应用中的指定pod、应用支持多版本的pod。如果要将这些应用改造为适合于这些workload的应用,需要花费很大精力,这将使大多数用户望而却步。
为解决上述复杂应用管理场景,TKEStack基于Kubernetes CRD开发了一种新的应用类型TAPP,它是一种通用类型的workload,同时支持service和batch类型作业,满足绝大部分应用场景,它能让用户更好的将应用迁移到Kubernetes集群。
查询TApp可查看更多相关信息
TApp控制台操作指引
创建 TApp
注意:使用前提,在【扩展组件】安装TApp
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建TApp的【业务】下相应的【命名空间】,展开【工作负载】下拉项,进入【TApp】管理页面。如下图所示:
单击【新建】,进入 “新建Workload” 页面。根据实际需求,设置 TApp 参数。关键参数信息如下,其中必填项为工作负载名、实例内容器的名称和镜像:
- 工作负载名:输入自定义名称。
- 标签:给工作负载添加标签
- 命名空间:根据实际需求进行选择。
- 类型:选择【TApp】。
- 节点异常策略
- 迁移,调度策略与Deployment一致,Pod会迁移到新的节点
- 不迁移,调度策略与StatefulSel一致,异常pod不会被迁移
- 数据卷:根据需求,为负载添加数据卷为容器提供存,目前支持临时路径、主机路径、云硬盘数据卷、文件存储NFS、配置文件、PVC,还需挂载到容器的指定路径中
- 临时目录:主机上的一个临时目录,生命周期和Pod一致
- 主机路径:主机上的真实路径,可以重复使用,不会随Pod一起销毁
- NFS盘:挂载外部NFS到Pod,用户需要指定相应NFS地址,格式:127.0.0.1:/data
- ConfigMap:用户在业务Namespace下创建的ConfigMap
- Secret:用户在业务namespace下创建的Secret
- PVC:用户在业务namespace下创建的PVC
- 实例内容器:根据实际需求,为 TApp 的一个 Pod 设置一个或多个不同的容器。
- 名称:自定义
- 镜像:根据实际需求进行选择
镜像版本(Tag):根据实际需求进行填写,不填默认为
latest
CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性(建议使用默认值)
GPU限制:如容器内需要使用GPU,此处填GPU需求
环境变量:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头
新增变量:自己设定变量键值对
引用ConfigMap/Secret:引用已有键值对
高级设置:可设置 “工作目录”、“运行命令”、“运行参数”、“镜像更新策略”、“容器健康检查”和“特权级”等参数。这里介绍一下镜像更新策略。
镜像更新策略:提供以下3种策略,请按需选择
若不设置镜像拉取策略,当镜像版本为空或
latest
时,使用 Always 策略,否则使用 IfNotPresent 策略- Always:总是从远程拉取该镜像
- IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像
- Never:只使用本地镜像,若本地没有该镜像将报异常
- 实例数量:根据实际需求选择调节方式,设置实例数量。
- 手动调节:直接设定实例个数
- 自动调节:根据设定的触发条件自动调节实例个数,目前支持根据CPU、内存利用率和利用量出入带宽等调节实例个数
- 定时调节:根据Crontab 语法周期性设置实例个数
- imagePullSecrets:镜像拉取密钥,用于拉取用户的私有镜像
- 节点调度策略:根据配置的调度规则,将Pod调度到预期的节点。支持指定节点调度和条件选择调度
- 注释(Annotations):给TApp添加相应Annotation,如用户信息等
- 网络模式:选择Pod网络模式
- OverLay(虚拟网络):基于 IPIP 和 Host Gateway 的 Overlay 网络方案
- FloatingIP(浮动 IP):支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,支持 Pod 重启或迁移时 IP 不变
- NAT(端口映射):Kubernetes 原生 NAT 网络方案
- Host(主机网络):Kubernetes 原生 Host 网络方案
- Service:勾选【启用】按钮,配置负载端口访问
注意:如果不勾选【启用】则不会创建Service
服务访问方式:选择是【仅在集群内部访问】该负载还是集群外部通过【主机端口访问】该负载
- 仅在集群内访问:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离
- 主机端口访问:提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node
- Headless Service:不创建用于集群内访问的ClusterIP,访问Service名称时返回后端Pods IP地址,用于适配自有的服务发现机制。解析域名时返回相应 Pod IP 而不是 Cluster IP
端口映射:输入负载要暴露的端口并指定通信协议类型(容器和服务端口建议都使用80)
Session Affinity: 点击【显示高级设置】出现,会话保持,设置会话保持后,会根据请求IP把请求转发给这个IP之前访问过的Pod。默认None,按需使用
单击【创建Workload】,完成创建。如下图所示:
当“运行/期望Pod数量”相等时,即表示 TApp 下的所有 Pod 已创建完成。
更新 TApp
更新 YAML
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要更新的【业务】下相应的【命名空间】,展开【工作负载】列表,进入【TApp】管理页面。在需要更新 YAML 的 TApp 行中,单击【更多】>【编辑YAML】,进入“更新 TApp” 页面。如下图所示:
- 在 “更新TApp” 页面,编辑 YAML,单击【完成】,即可更新 YAML。如下图所示:
调整 Pod 数量
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择要变更的业务下相应的命名空间,展开工作负载列表,进入 TApp 管理页面。
- 点击 TApp 列表操作栏的【更新实例数量】按钮。如下图所示:
- 根据实际需求调整 Pod 数量,如3,单击页面下方的【更新实例数目】即可完成调整。
TApp特色功能-指定pod灰度升级
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择要变更的业务下相应的【命名空间】,展开【工作负载】列表,进入【 TApp】 管理页面,点击进入要灰度升级的 TApp名称。如下图所示:
- 如下图标签1所示,可选指定需要灰度升级的pod,然后点击下图中标签2 的【灰度升级】即可升级指定pod。
在弹出的 “回滚资源” 提示框中,单击【确定】即可完成回滚。
注意:此页面同时可完成指定Pod监控和删除
查询TApp可查看更多相关信息
2.7 - 工作负载的请求与限制
工作负载的请求与限制
Request:容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配资源量 >= 容器资源请求数时才允许将容器调度到该节点。但 Request 参数不限制容器的最大可使用资源值。 Limit: 容器能使用的资源最大值。
! 更多 Limit 和 Request 参数介绍,单击 查看详情。
CPU 限制说明
CPU 资源允许设置 CPU 请求和 CPU 限制的资源量,以核(U)为单位,允许为小数。
!
- CPU Request 作为调度时的依据,在创建时为该容器在节点上分配 CPU 使用资源,称为 “已分配 CPU” 资源。
- CPU Limit 限制容器 CPU 资源的上限,不设置表示不做限制(CPU Limit >= CPU Request)。
内存限制说明
内存资源只允许限制容器最大可使用内存量。以 MiB 为单位,允许为小数。
!
- 内存 Request 作为调度时的依据,在创建时为该容器在节点上分配内存,称为 “已分配内存” 资源。
- 内存资源为不可伸缩资源。当节点上所有容器使用内存均超量时,存在 OOM 的风险。因此不设置 Limit 时,默认 Limit = Request,保证容器的正常运作。
CPU 使用量和 CPU 使用率
- CPU 使用量为绝对值,表示实际使用的 CPU 的物理核数,CPU 资源请求和 CPU 资源限制的判断依据都是 CPU 使用量。
- CPU 使用率为相对值,表示 CPU 的使用量与 CPU 单核的比值(或者与节点上总 CPU 核数的比值)。
使用示例
一个简单的示例说明 Request 和 Limit 的作用,测试集群包括1个 4U4G 的节点、已经部署的两个 Pod ( Pod1,Pod2 ),每个 Pod 的资源设置为(CPU Requst,CPU Limit,Memory Requst,Memory Limit)=(1U,2U,1G,1G)。(1.0G = 1000MiB) 节点上 CPU 和内存的资源使用情况如下图所示: 已经分配的 CPU 资源为:1U(分配 Pod1) + 1U(分配 Pod2) = 2U,剩余可以分配的 CPU 资源为2U。 已经分配的内存资源为:1G(分配 Pod1) + 1G(分配 Pod2) = 2G,剩余可以分配的内存资源为2G。 所以该节点可以再部署一个 ( CPU Requst, Memory Requst ) =( 2U,2G )的 Pod 部署,或者部署2个(CPU Requst,Memory Requst) = (1U,1G) 的 Pod 部署。
在资源限制方面,每个 Pod1 和 Pod2 使用资源的上限为 ( 2U,1G ),即在资源空闲的情况下,Pod 使用 CPU 的量最大能达到2U。
服务资源限制推荐
CCS 会根据您当前容器镜像的历史负载来推荐 Request 与 Limit 值,使用推荐值会保证您的容器更加平稳的运行,大大减小出现异常的概率。
推荐算法: 我们首先会取出过去7天当前容器镜像分钟级别负载,并辅以百分位统计第95%的值来最终确定推荐的 Request,Limit 为 Request 的2倍。
Request = Percentile(实际负载[7d],0.95)
Limit = Request * 2
如果当前的样本数量(实际负载)不满足推荐计算的数量要求,我们会相应的扩大样本取值范围,尝试重新计算。例如,去掉镜像 tag,namespace,serviceName 等筛选条件。若经过多次计算后同样未能得到有效值,则推荐值为空。
推荐值为空: 在使用过程中,您会发现有部分值暂无推荐的情况,可能由于以下几点造成: 1. 当前数据并不满足计算的需求,我们需要待计算的样本数量(实际负载)大于1440个,即有一天的数据。 2. 推荐值小于您当前容器已经配置的 Request 或者 Limit。
! 1. 由于推荐值是根据历史负载来计算的,原则上,容器镜像运行真实业务的时间越长,推荐的值越准确。 2. 使用推荐值创建服务,可能会因为集群资源不足造成容器无法调度成功。在保存时,须确认当前集群的剩余资源。 3. 推荐值是建议值,您可以根据自己业务的实际情况做相应的调整。
3 - 服务
服务
3.1 - Service
Service 定义访问后端 Pod 的访问方式,并提供固定的虚拟访问 IP。您可以在 Service 中通过设置来访问后端的 Pod,不同访问方式的服务可提供不同网络能力。 腾讯云容器服务(TKE)提供以下四种服务访问方式:
访问方式 | 说明 |
---|---|
仅在集群内访问 |
|
主机端口访问 |
|
集群内进行 Service 访问时,建议不要通过负载均衡 IP 进行访问,以避免出现访问不通的情况。
一般情况下,4层负载均衡(LB)会绑定多台 Node 作为 real server(rs) ,使用时需要限制 client 和 rs 不能存在于同一台云服务器上,否则会有一定概率导致报文回环出不去。 当 Pod 去访问 LB 时,Pod 就是源 IP,当其传输到内网时 LB 也不会做 snat 处理将源 IP 转化成 Node IP,那么 LB 收到报文也就不能判断是从哪个 Node 发送的,LB 的避免回环策略也就不会生效,所有的 rs 都可能被转发。当转发到 client 所在的 Node 上时,LB 就无法收到回包,从而导致访问不通。
集群内访问时,支持Headless Service,解析服务名时直接返回对应Pod IP而不是Cluster IP,可以适配自有的服务发现机制。 两种访问方式均支持Session Affinity,设置会话保持后,会根据请求IP把请求转发给这个IP之前访问过的Pod.
Service 控制台操作指引
创建 Service
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建 Service 的【业务】下相应的【命名空间】,展开【服务】列表,进入【Service】管理页面。
- 单击【新建】,进入 “新建 Service” 页面。如下图所示:
- 根据实际需求,设置 Service 参数。关键参数信息如下:
- 服务名称:自定义。
- 命名空间:根据实际需求进行选择。
- 访问设置:请参考 简介 并根据实际需求进行设置。
- 单击【创建服务】,完成创建。
更新 Service
更新 YAML
- 登录TKEStack,切换到业务管理控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建Service的业务下相应的命名空间,展开服务列表,进入Service管理页面。
- 在需要更新 YAML 的 Service 行中,单击【编辑YAML】,进入更新 Service 页面。
- 在 “更新Service” 页面,编辑 YAML,单击【完成】,即可更新 YAML。
Kubectl 操作 Service 指引
YAML 示例
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer
- kind:标识 Service 资源类型。
- metadata:Service 的名称、Label等基本信息。
- spec.type:标识 Service 的被访问形式
- ClusterIP:在集群内部公开服务,可用于集群内部访问。
- NodePort:使用节点的端口映射到后端 Service,集群外可以通过节点 IP:NodePort 访问。
- LoadBalancer:使用腾讯云提供的负载均衡器公开服务,默认创建公网 CLB, 指定 annotations 可创建内网 CLB。
- ExternalName:将服务映射到 DNS,仅适用于 kube-dns1.7及更高版本。
创建 Service
参考 YAML 示例,准备 StatefulSet YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 Service YAML 文件。
kubectl create -f Service YAML 文件名称
例如,创建一个文件名为 my-service.yaml 的 Service YAML 文件,则执行以下命令:
kubectl create -f my-service.yaml
执行以下命令,验证创建是否成功。
kubectl get services
返回类似以下信息,即表示创建成功。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.16.255.1 <none> 443/TCP 38d
更新 Service
方法一
执行以下命令,更新 Service。
kubectl edit service/[name]
方法二
手动删除旧的 Service。
执行以下命令,重新创建 Service。
kubectl create/apply
删除 Service
执行以下命令,删除 Service。
kubectl delete service [NAME]
.params{margin-bottom:0px !important;}
3.2 - Ingress
Ingress 是允许访问到集群内 Service 的规则的集合,您可以通过配置转发规则,实现不同 URL 可以访问到集群内不同的 Service。
4 - 配置管理
配置管理
4.1 - ConfigMap
通过 ConfigMap 您可以将配置和运行的镜像进行解耦,使得应用程序有更强的移植性。ConfigMap 是有 key-value 类型的键值对,您可以通过控制台的 Kubectl 工具创建对应的 ConfigMap 对象,可以通过挂载数据卷、环境变量或在容器的运行命令中使用 ConfigMap。 ConfigMap 有两种使用方式,创建负载时做为数据卷挂载到容器和作为环境变量映射到容器。
ConfigMap 控制台操作指引
创建 ConfigMap
- 登录TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建ConfigMap的【业务】下相应的【命名空间】,展开【配置管理】列表,进入ConfigMap管理页面。
- 单击【新建】,进入 “新建ConfigMap” 页面。如下图所示:
- 根据实际需求,设置 ConfigMap 参数。关键参数信息如下:
- 名称:自定义。
- 命名空间:根据实际需求进行选择命名空间类型
- 定义变量名和变量值。
- 单击【创建ConfigMap】,完成创建。
更新 ConfigMap
登录TKEStack,切换到业务管理控制台,选择左侧导航栏中的【应用管理】。
选择需要创建ConfigMap的业务下相应的命名空间,展开配置管理列表,进入ConfigMap管理页面。
在需要更新 YAML 的 ConfigMap 行中,单击【编辑YAML】,进入更新 ConfigMap 页面。
在 “更新ConfigMap” 页面,编辑 YAML,单击【完成】,即可更新 YAML。
如需修改 key-values,编辑 YAML 中 data 的参数值,单击【完成】,即可完成更新。
Kubectl 操作 ConfigMap 指引
YAML 示例
apiVersion: v1
data:
key1: value1
key2: value2
key3: value3
kind: ConfigMap
metadata:
name: test-config
namespace: default
- data:ConfigMap 的数据,以 key-value 形式呈现。
- kind:标识 ConfigMap 资源类型。
- metadata:ConfigMap 的名称、Label等基本信息。
- metadata.annotations:ConfigMap 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
创建 ConfigMap
方式一:通过 YAML 示例文件方式创建
参考 YAML 示例,准备 ConfigMap YAML 文件。
安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
执行以下命令,创建 ConfigMap YAML 文件。
kubectl create -f ConfigMap YAML 文件名称
例如,创建一个文件名为 web.yaml 的 ConfigMap YAML 文件,则执行以下命令:
kubectl create -f web.yaml
执行以下命令,验证创建是否成功。
kubectl get configmap
返回类似以下信息,即表示创建成功。
NAME DATA AGE test 2 39d test-config 3 18d
方式二:通过执行命令方式创建
执行以下命令,在目录中创建 ConfigMap。
kubectl create configmap <map-name> <data-source>
- <map-name>:表示 ConfigMap 的名字。
- <data-source>:表示目录、文件或者字面值。
更多参数详情可参见 Kubernetes configMap 官方文档。
使用 ConfigMap
方式一:数据卷使用 ConfigMap 类型
YAML 示例如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
name: config-volume
mountPath: /etc/config
volumes:
name: config-volume
configMap:
name: test-config ## 设置 ConfigMap 来源
## items: ## 设置指定 ConfigMap 的 Key 挂载
## key: key1 ## 选择指定 Key
## path: keys ## 挂载到指定的子路径
restartPolicy: Never
方式二:环境变量中使用 ConfigMap 类型
YAML 示例如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
env:
- name: key1
valueFrom:
configMapKeyRef:
name: test-config ## 设置来源 ConfigMap 文件名
key: test-config.key1 ## 设置该环境变量的 Value 来源项
restartPolicy: Never
4.2 - Sercet
Sercet
Secret 可用于存储密码、令牌、密钥等敏感信息,降低直接对外暴露的风险。Secret 是 key-value 类型的键值对,您可以通过控制台的 Kubectl 工具创建对应的 Secret 对象,也可以通过挂载数据卷、环境变量或在容器的运行命令中使用 Secret。
Secret 控制台操作指引
创建 Secret
- 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】。
- 选择需要创建 Secret 的【业务】下相应的【命名空间】,展开【配置管理】列表,进入 Secret 管理页面。
- 单击【新建】,进入“新建 Secret ”页面。
- 在“新建 Secret ”页面,根据实际需求,进行如下参数设置。如下图所示:
- 名称:请输入自定义名称。
- Secret类型:提供【Opaque】和【Dockercfg】两种类型,请根据实际需求进行选择。
- Opaque:适用于保存秘钥证书和配置文件,Value 将以 base64 格式编码。
- Dockercfg:适用于保存私有 Docker Registry 的认证信息。
- 生效范围:提供以下两种范围,请根据实际需求进行选择。
- 存量所有命名空间:不包括 kube-system、kube-public 和后续增量命名空间。
- 指定命名空间:支持选择当前集群下一个或多个可用命名空间。
- 内容:根据不同的 Secret 类型,进行配置。
- 当 Secret 类型为【Opaque】时:根据实际需求,设置变量名和变量值。
- 当 Secret 类型为【Dockercfg】时:
仓库域名:请根据实际需求输入域名或 IP。
用户名:请根据实际需求输入第三方仓库的用户名。
密码:请根据实际需求设置第三方仓库的登录密码。
如果本次为首次登录系统,则会新建用户,相关信息写入
~/.dockercrg
文件中。
- 单击【创建 Secret】,即可完成创建。
使用 Secret
Secret 在 Workload中有三种使用场景: 1. 数据卷使用 Secret 类型 2. 环境变量中使用 Secret 类型 3. 使用第三方镜像仓库时引用
更新 Secret
登录 TKEStack,切换到业务管理控制台,选择左侧导航栏中的【应用管理】。
选择需要创建 Secret 的业务下相应的命名空间,展开配置管理列表,进入 Secret 管理页面。
在需要更新 YAML 的 Secret 行中,单击【编辑YAML】,进入更新 Secret 页面。
在“更新Secret”页面,编辑 YAML,并单击【完成】即可更新 YAML。
如需修改 key-values,则编辑 YAML 中 data 的参数值,并单击【完成】即可完成更新。
Kubectl 操作 Secret 指引
创建 Secret
方式一:通过指定文件创建 Secret
依次执行以下命令,获取 Pod 的用户名和密码。
$ echo -n 'username' > ./username.txt $ echo -n 'password' > ./password.txt
执行 Kubectl 命令,创建 Secret。
$ kubectl create secret generic test-secret --from-file=./username.txt --from-file=./password.txt secret "testSecret" created
执行以下命令,查看 Secret 详情。
kubectl describe secrets/ test-secret
方式二:YAML 文件手动创建
? 通过 YAML 手动创建 Secret,需提前将 Secret 的 data 进行 Base64 编码。
apiVersion: v1
kind: Secret
metadata:
name: test-secret
type: Opaque
data:
username: dXNlcm5hbWU= ## 由echo -n 'username' | base64生成
password: cGFzc3dvcmQ= ## 由echo -n 'password' | base64生成
使用 Secret
方式一: 数据卷使用 Secret 类型
YAML 示例如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
name: secret-volume
mountPath: /etc/config
volumes:
name: secret-volume
secret:
name: test-secret ## 设置 secret 来源
## items: ## 设置指定 secret的 Key 挂载
## key: username ## 选择指定 Key
## path: group/user ## 挂载到指定的子路径
## mode: 256 ## 设置文件权限
restartPolicy: Never
方式二: 环境变量中使用 Secret 类型
YAML 示例如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: test-secret ## 设置来源 Secret 文件名
key: username ## 设置该环境变量的 Value 来源项
restartPolicy: Never
方法三:使用第三方镜像仓库时引用
YAML 示例如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullSecrets:
- name: test-secret ## 设置来源 Secret 文件名
restartPolicy: Never
5 - 存储
存储
5.1 - PV和PVC
PersistentVolume(PV):集群内的存储资源。例如,节点是集群的资源。PV 独立于 Pod 的生命周期,根据不同的 StorageClass 类型创建不同类型的 PV。 PersistentVolumeClaim(PVC):集群内的存储请求。例如,PV 是 Pod 使用节点资源,PVC 则声明使用 PV 资源。当 PV 资源不足时,PVC 也可以动态创建 PV。
5.2 - StorageClass
StorageClass 描述存储的类型,集群管理员可以为集群定义不同的存储类别。可通过 StorageClass 配合 PersistentVolumeClaim 可以动态创建需要的存储资源。
6 - 事件
日志针对的是容器。包括了 Kuberntes 集群的运行容器的日志情况和各类资源的调度情况,对维护人员日常观察资源的变更以及定位问题均有帮助。
日志控制台操作指引
- 登录 TKEStack,切换到【业务管理】控制台,点击【应用管理】,选择【日志】。
- 进入“日志”页面。
- 可以按照不用的命名空间和资源类型进行筛选。
注意:Kubernetes 默认只将最近一个小时的事件存储在 ETCD 中,若想实现事件的持久化存储和查询操作
您可以参考 事件持久化 将事件导入外部存储,实现事件的持久化存储
7 - 日志
时间针对的是负载。Kubernetes Events 包括了 Kuberntes 集群的运行和各类资源的调度情况,对维护人员日常观察资源的变更以及定位问题均有帮助。
Event 控制台操作指引
- 登录 TKEStack,切换到【业务管理】控制台,点击【应用管理】中的【事件】,进入“事件”页面。
- 可以按照不用的命名空间和资源类型进行筛选。
您可以参考 日志采集 将日志导入外部存储,实现日志的高级管理。