首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes IP Masquerade Agent 用户指南
Kubernetes云管理控制器
Kubernetes安全地清空一个节点
Kubernetes保护集群
Kubernetes调试DNS问题
Kubernetes改变默认 StorageClass
Kubernetes更改PersistentVolume的回收策略
Kubernetes关键插件Pod的调度保证
Kubernetes静态加密Secret数据
Kubernetes开发云控制器管理器
Kubernetes控制节点上的CPU管理策略
Kubernetes控制节点上的拓扑管理策略
Kubernetes名字空间演练
Kubernetes配置API对象配额
启用/禁用 Kubernetes API
Kubernetes迁移多副本的控制面
Kubernetes升级集群
Kubernetes声明网络策略
Kubernetes使用CoreDNS进行服务发现
Kubernetes使用KMS驱动进行数据加密
使用Kubernetes API访问集群
Kubernetes使用NUMA感知的内存管理器
Kubernetes通过名字空间共享集群
Kubernetes通过配置文件设置Kubelet参数
为Kubernetes运行etcd集群
Kubernetes为节点发布扩展资源
Kubernetes限制存储使用量
Kubernetes验证已签名容器镜像
以非root用户身份运行Kubernetes节点组件
在Kubernetes集群中使用NodeLocal DNSCache
在Kubernetes集群中使用sysctl
Kubernetes在集群中使用级联删除
在运行中的集群上重新配置节点的 kubelet
Kubernetes自定义DNS服务
Kubernetes自动扩缩集群DNS服务
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(五)
小册名称:Kubernetes中文教程(五)
本页展示了如何在你的 Kubernetes 集群中启用和配置 DNS 服务的自动扩缩功能。 * 本指南假设你的节点使用 AMD64 或 Intel 64 CPU 架构 * 确保 [Kubernetes DNS] 已启用。 ## 确定是否 DNS 水平自动扩缩特性已经启用 在 kube-system 中列出集群中的 : ```shell kubectl get deployment --namespace=kube-system ``` 输出类似如下这样: ``` NAME READY UP-TO-DATE AVAILABLE AGE ... dns-autoscaler 1/1 1 1 ... ... ``` 如果在输出中看到 “dns-autoscaler”,说明 DNS 水平自动扩缩已经启用, 可以跳到[调优 DNS 自动扩缩参数]。 ## 获取 DNS Deployment 的名称 列出集群内 kube-system 命名空间中的 DNS Deployment: ```shell kubectl get deployment -l k8s-app=kube-dns --namespace=kube-system ``` 输出类似如下这样: ``` NAME READY UP-TO-DATE AVAILABLE AGE ... coredns 2/2 2 2 ... ... ``` 如果看不到 DNS 服务的 Deployment,你也可以通过名字来查找: ```shell kubectl get deployment --namespace=kube-system ``` 并在输出中寻找名称为 `coredns` 或 `kube-dns` 的 Deployment。 你的扩缩目标为: ``` Deployment/<your-deployment-name> ``` 其中 `<your-deployment-name>` 是 DNS Deployment 的名称。 例如,如果你的 DNS Deployment 名称是 `coredns`,则你的扩展目标是 Deployment/coredns。 CoreDNS 是 Kubernetes 的默认 DNS 服务。CoreDNS 设置标签 `k8s-app=kube-dns`, 以便能够在原来使用 `kube-dns` 的集群中工作。 ## 启用 DNS 水平自动扩缩 在本节,我们创建一个新的 Deployment。Deployment 中的 Pod 运行一个基于 `cluster-proportional-autoscaler-amd64` 镜像的容器。 创建文件 `dns-horizontal-autoscaler.yaml`,内容如下所示: 在文件中,将 `<SCALE_TARGET>` 替换成扩缩目标。 进入到包含配置文件的目录中,输入如下命令创建 Deployment: ```shell kubectl apply -f dns-horizontal-autoscaler.yaml ``` 一个成功的命令输出是: ``` deployment.apps/dns-autoscaler created ``` DNS 水平自动扩缩在已经启用了。 ## 调优 DNS 自动扩缩参数 验证 dns-autoscaler 是否存在: ```shell kubectl get configmap --namespace=kube-system ``` 输出类似于: ``` NAME DATA AGE ... dns-autoscaler 1 ... ... ``` 修改该 ConfigMap 中的数据: ```shell kubectl edit configmap dns-autoscaler --namespace=kube-system ``` 找到如下这行内容: ```yaml linear: '{"coresPerReplica":256,"min":1,"nodesPerReplica":16}' ``` 根据需要修改对应的字段。“min” 字段表明 DNS 后端的最小数量。 实际后端的数量通过使用如下公式来计算: ``` replicas = max , ceil ) ``` 注意 `coresPerReplica` 和 `nodesPerReplica` 的值都是浮点数。 背后的思想是,当一个集群使用具有很多核心的节点时,由 `coresPerReplica` 来控制。 当一个集群使用具有较少核心的节点时,由 `nodesPerReplica` 来控制。 其它的扩缩模式也是支持的,详情查看 [cluster-proportional-autoscaler]。 ## 禁用 DNS 水平自动扩缩 有几个可供调优的 DNS 水平自动扩缩选项。具体使用哪个选项因环境而异。 ### 选项 1:缩容 dns-autoscaler Deployment 至 0 个副本 该选项适用于所有场景。运行如下命令: ```shell kubectl scale deployment --replicas=0 dns-autoscaler --namespace=kube-system ``` 输出如下所示: ``` deployment.apps/dns-autoscaler scaled ``` 验证当前副本数为 0: ```shell kubectl get rs --namespace=kube-system ``` 输出内容中,在 DESIRED 和 CURRENT 列显示为 0: ``` NAME DESIRED CURRENT READY AGE ... dns-autoscaler-6b59789fc8 0 0 0 ... ... ``` ### 选项 2:删除 dns-autoscaler Deployment 如果 dns-autoscaler 为你所控制,也就说没有人会去重新创建它,可以选择此选项: ```shell kubectl delete deployment dns-autoscaler --namespace=kube-system ``` 输出内容如下所示: ``` deployment.apps "dns-autoscaler" deleted ``` ### 选项 3:从主控节点删除 dns-autoscaler 清单文件 如果 dns-autoscaler 在[插件管理器] 的控制之下,并且具有操作 master 节点的写权限,可以使用此选项。 登录到主控节点,删除对应的清单文件。 dns-autoscaler 对应的路径一般为: ``` /etc/kubernetes/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml ``` 当清单文件被删除后,插件管理器将删除 dns-autoscaler Deployment。 ## 理解 DNS 水平自动扩缩工作原理 * cluster-proportional-autoscaler 应用独立于 DNS 服务部署。 * autoscaler Pod 运行一个客户端,它通过轮询 Kubernetes API 服务器获取集群中节点和核心的数量。 * 系统会基于当前可调度的节点个数、核心数以及所给的扩缩参数,计算期望的副本数并应用到 DNS 后端。 * 扩缩参数和数据点会基于一个 ConfigMap 来提供给 autoscaler,它会在每次轮询时刷新它的参数表, 以与最近期望的扩缩参数保持一致。 * 扩缩参数是可以被修改的,而且不需要重建或重启 autoscaler Pod。 * autoscaler 提供了一个控制器接口来支持两种控制模式:*linear* 和 *ladder*。 ## * 阅读[为关键插件 Pod 提供的调度保障] * 进一步了解 [cluster-proportional-autoscaler 实现]
上一篇:
Kubernetes自定义DNS服务
该分类下的相关小册推荐:
Kubernets合辑14-日志收集
Kubernetes合辑1-安装Kubernetes
Kubernets合辑3-kubernetes介绍
Kubernets合辑12-配置中心
Kubernets合辑15-持续部署
云原生-K8S入门实战
Kubernets合辑8-权限控制
Kubernets合辑5-Pod控制器
Kubernets合辑4-kubernetes入门
Kubernetes中文教程(六)
Kubernets合辑2-部署Ingress
Kubernets合辑10-网络