• 沒有找到結果。

其实怎么使用优雅删除,kubernetes已经在基层做好建设。Kubectl delete:根据 resource名或label删除resource。例如:

kubectl delete po rc-nginx-btv4j kubectl delete po -lapp=nginx-2

当Kubernetes通知node执行docker stop命令,docker会先向容器中PID为1的进程发送 系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的

超时时间(Pod中的terminationGracePeriodSeconds参数值,默认30s),会继续发送 SIGKILL的系统信号强行kill掉进程。

您可以使用--grace-period=<seconds>来覆盖的默认值。

kubectl delete po rc-nginx-btv4j --grace-period=60

要强制删除资源,需指定--force flag,且设置周期为0。如果执行强制删除Pod,则调 度程序会在节点释放这些Pod之前将新的Pod放在这些节点上,并使之前Pod立即被逐 出。

如下示例表示将强制立马删除pod:

kubectl delete po rc-nginx-btv4j --grace-period=0 --force

须知

执行delete命令时不会检查资源版本,如果在执行delete操作时有人进行了更新操作,

那么更新操作将连同资源一起被删除。

5.7 容器网络带宽限制

背景

同一个节点上的容器会共用主机网络带宽,对容器的网络带宽进行限制,可以有效避 免容器之间相互干扰,提升容器间的网络稳定性。

适用场景

所有工作负载类型均支持。

约束与限制

● v1.13.10及以上版本且网络模式为容器隧道网络的集群支持此功能。

● v1.17版本的集群暂不支持此功能。

操作步骤

步骤1 编辑工作负载yaml文件。

vi deployment.yaml

根据需要在spec.template.metadata.annotations中设置工作负载实例的网络带宽,

限制容器的网络流量,网络带宽限制字段详解请参见表5-1。

未设置默认不限制。

示例如下:

apiVersion: apps/v1 kind: Deployment metadata:

name: nginx spec:

replicas: 1

selector:

kubernetes.io/ingress-bandwidth: 100M # 出方向网络带宽

kubernetes.io/ingress-bandwidth 工作负载实例入方向网络带宽

取值范围:1k-1P,带宽如果设置大于 32G,实际带宽将等于32G

可选

kubernetes.io/egress-bandwidth 工作负载实例出方向网络带宽

取值范围:1k-1P,带宽如果设置大于 32G,实际带宽将等于32G

可选

步骤2 创建工作负载。

kubectl create -f deployment.yaml 命令行终端显示如下类似信息:

deployment.apps/nginx created

----结束

5.8 使用 hostAliases 配置 Pod /etc/hosts

使用场景

DNS配置或其他选项不合理时,可以向pod的“/etc/hosts”文件中添加条目,使用 hostAliases在pod级别覆盖对主机名的解析。

操作步骤

步骤1 使用kubectl连接集群。

步骤2 创建hostaliases-pod.yaml文件。

vi hostaliases-pod.yaml

Yaml中加粗字段为镜像及镜像版本,可根据实际需求进行修改:

apiVersion: v1 kind: Pod metadata:

name: hostaliases-pod spec:

hostAliases:

- ip: 127.0.0.1 containers:

- name: cat-hosts imagePullSecrets:

- name: default-secret

5-2 pod 字段说明

参数名 是否必选 参数解释

apiVersion 是 api版本号。

kind 是 创建的对象类别。

metadata 是 资源对象的元数据定义。

name 是 Pod的名称。

spec 是 spec是集合类的元素类型,pod的主体

部分都在spec中给出。具体请参见表 5-3。

5-3 spec 数据结构说明

参数名 是否必选 参数解释

hostAliases 是 主机别名。

containers 是 具体请参见表5-4。

5-4 containers 数据结构说明

参数名 是否必选 参数解释

name 是 容器名称。

参数名 是否必选 参数解释

image 是 容器镜像名称。

lifecycle 否 生命周期。

步骤3 创建pod。

kubectl create -f hostaliases-pod.yaml 命令行终端显示如下信息表明pod已创建。

pod/hostaliases-pod created

步骤4 查看pod状态。

kubectl get pod hostaliases-pod

pod状态显示为Running,表示pod已创建成功。

NAME READY STATUS RESTARTS AGE hostaliases-pod 1/1 Running 0 16m

步骤5 查看配置的hostAliases是否正常,执行如下命令:

docker ps |grep hostaliases-pod docker exec -ti 容器ID /bin/sh

----结束

5.9 CCE 容器中域名解析的最佳实践

本文档重点介绍在CCE容器中如何配置域名解析。

服务

● 在创建相应的后端工作负载(Deployment或ReplicaSet),以及在需要访问它的 任何工作负载之前创建服务。 当Kubernetes启动容器时,它提供指向启动容器时

正在运行的所有服务的环境变量。 例如,如果存在名为foo的服务,则所有容器 将在其初始环境中获得以下变量。

FOO_SERVICE_HOST=<the host the Service is running on>

FOO_SERVICE_PORT=<the port the Service is running on>

这确实意味着在顺序上的要求 - 必须在Pod本身被创建之前创建Pod想要访问的任 何Service, 否则环境变量将不会生效。DNS没有此限制。

● 一个可选(当前CCE集群为必选)的集群插件是DNS服务器。DNS服务器为新的 Services监视Kubernetes API,并为每个Services创建一组DNS记录。 如果在整个 集群中启用了DNS,则所有Pods应该能够自动对Services进行名称解析。

● 除非绝对必要,否则不要为Pod指定hostPort。 将Pod绑定到hostPort时,它会限 制Pod可以调度的位置数,因为每个<hostIP, hostPort, protocol>组合必须是唯一 的。 如果您没有明确指定hostIP和protocol,Kubernetes将使用0.0.0.0作为默认 hostIP和TCP作为默认protocol。

如果您只需要访问端口以进行调试,则可以使用apiserver proxy或kubectl port-forward。

如果您明确需要在节点上公开Pod的端口,请在使用hostPort之前考虑使用NodePort 服务。

● 避免使用hostNetwork,原因与hostPort相同。

● 当您不需要kube-proxy负载均衡时,使用无头服务headless-services(ClusterIP被 设置为None)以便于服务发现。