本文档旨在汇总和强调用户指南、快速开始文档和示例中的最佳实践。本文已上传到 kubernetes-handbook 中的第四章最佳实践章节,本文仅作归档,更新以 kubernetes-handbook 为准。

通用配置建议

  • 定义配置文件的时候,指定最新的稳定API版本(目前是V1)。

  • 在配置文件push到集群之前应该保存在版本控制系统中。这样当需要的时候能够快速回滚,必要的时候也可以快速的创建集群。

  • 使用YAML格式而不是JSON格式的配置文件。在大多数场景下它们都可以作为数据交换格式,但是YAML格式比起JSON更易读和配置。

  • 尽量将相关的对象放在同一个配置文件里。这样比分成多个文件更容易管理。参考 guestbook-all-in-one.yaml 文件中的配置(注意,尽管你可以在使用 kubectl 命令时指定配置文件目录,你也可以在配置文件目录下执行 kubectl create ——查看下面的详细信息)。

  • 为了简化和最小化配置,也为了防止错误发生,不要指定不必要的默认配置。例如,省略掉 ReplicationController 的selector和label,如果你希望它们跟 podTemplate 中的label一样的话,因为那些配置默认是 podTemplate 的label产生的。更多信息请查看 guestbook app 的yaml文件和 examples 。

  • 将资源对象的描述放在一个annotation中可以更好的内省。

裸奔的Pods vs Replication Controllers和 Jobs

如果有其他方式替代“裸奔的pod”(如没有绑定到 replication controller 上的pod),那么就使用其他选择。在node节点出现故障时,裸奔的pod不会被重新调度。Replication Controller总是会重新创建pod,除了明确指定了 restartPolicy: Never 的场景。 Job 也许是比较合适的选择。

Services

  • 通常最好在创建相关的 replication controllers 之前先创建 service (没有这个必要吧?)你也可以在创建Replication Controller的时候不指定replica数量(默认是1),创建service后,在通过Replication Controller来扩容。这样可以在扩容很多个replica之前先确认pod是正常的。

  • 除非时分必要的情况下(如运行一个node daemon),不要使用 hostPort (用来指定暴露在主机上的端口号)。当你给Pod绑定了一个 hostPort ,该pod可被调度到的主机的受限了,因为端口冲突。如果是为了调试目的来通过端口访问的话,你可以使用 kubectl proxy and apiserver proxy 或者 kubectl port-forward 。你可使用Service 来对外暴露服务。如果你确实需要将pod的端口暴露到主机上,考虑使用 NodePort service。

  • 跟 hostPort 一样的原因,避免使用 hostNetwork 。

  • 如果你不需要kube-proxy的负载均衡的话,可以考虑使用使用 headless services 。

使用Label

  • 定义 labels 来指定应用或Deployment的 semantic attributes 。例如,不是将label附加到一组pod来显式表示某些服务(例如, service:myservice ),或者显式地表示管理pod的replication controller(例如, controller:mycontroller ),附加label应该是标示语义属性的标签, 例如 {app:myapp,tier:frontend,phase:test,deployment:v3} 。 这将允许您选择适合上下文的对象组——例如,所有的”tier:frontend“pod的服务或app是“myapp”的所有“测试”阶段组件。 有关此方法的示例,请参阅 guestbook 应用程序。

    可以通过简单地从其service的选择器中省略特定于发行版本的标签,而不是更新服务的选择器来完全匹配replication controller的选择器,来实现跨越多个部署的服务,例如滚动更新。

  • 为了滚动升级的方便,在Replication Controller的名字中包含版本信息,例如作为名字的后缀。设置一个 version 标签页是很有用的。滚动更新创建一个新的controller而不是修改现有的controller。因此,version含混不清的controller名字就可能带来问题。查看 Rolling Update Replication Controller 文档获取更多关于滚动升级命令的信息。

    注意 Deployment 对象不需要再管理 replication controller 的版本名。Deployment 中描述了对象的期望状态,如果对spec的更改被应用了话,Deployment controller 会以控制的速率来更改实际状态到期望状态。(Deployment目前是 extensions API Group 的一部分)。

  • 利用label做调试。因为Kubernetes replication controller和service使用label来匹配pods,这允许你通过移除pod中的label的方式将其从一个controller或者service中移除,原来的controller会创建一个新的pod来取代移除的pod。这是一个很有用的方式,帮你在一个隔离的环境中调试之前的“活着的” pod。查看 kubectl label 命令。

容器镜像

  • 默认容器镜像拉取策略 是 IfNotPresent , 当本地已存在该镜像的时候 Kubelet 不会再从镜像仓库拉取。如果你希望总是从镜像仓库中拉取镜像的话,在yaml文件中指定镜像拉取策略为 Always ( imagePullPolicy: Always )或者指定镜像的tag为 :latest 。

    如果你没有将镜像标签指定为 :latest ,例如指定为 myimage:v1 ,当该标签的镜像进行了更新,kubelet也不会拉取该镜像。你可以在每次镜像更新后都生成一个新的tag(例如 myimage:v2 ),在配置文件中明确指定该版本。

注意:在生产环境下部署容器应该尽量避免使用 :latest 标签,因为这样很难追溯到底运行的是哪个版本的容器和回滚。

使用kubectl

尽量使用 kubectl create -f <directory> 。kubeclt会自动查找该目录下的所有后缀名为 .yaml 、 .yml 和 .json 文件并将它们传递给 create 命令。

使用 kubectl delete 而不是 stop . Delete 是 stop 的超集, stop 已经被弃用。

使用 kubectl bulk 操作(通过文件或者label)来get和delete。查看 label selectors 和 using labels effectively 。

使用 kubectl run 和 expose 命令快速创建直有耽搁容器的Deployment。查看 quick start guide 中的示例。

本文转移K8S技术社区-新手篇 | K8S配置最佳实践

新手篇 | K8S配置最佳实践相关推荐

  1. k8s 安全策略最佳实践

    作者:万宏明,KubeSphere member,负责 KubeSphere 安全和多租户团队 随着 K8s 在生产和测试环境中用的越来越多,对安全性的关注也会越来越多,所以本文主要是给大家分享以下内 ...

  2. Spark on K8S 的最佳实践和需要注意的坑

    本文来自 Data Mechanics 的 CEO Jean-Yves Stephan 和 CTO Julien Dumazert 在 Spark Summit North America 2020 ...

  3. 零信任策略下K8s安全监控最佳实践(K+)

    云原生架构新风险与需求概述 安全风险概述 传统的网络安全架构理念是基于边界的安全架构,企业构建网络安全体系时,首先要做的是寻找安全边界,把网络划分为外网.内网等不同的区域,然后在边界上部署防火墙.入侵 ...

  4. ECS弹性网卡+弹性公网IP配置最佳实践之策略路由

    概述 目前阿里云ECS部分机型可以配置多张网卡(一张原生网卡+若干张弹性网卡),用来实现业务上对于系统内多网卡的需求,详细可以参考 [[新功能]弹性公网IP绑定弹性网卡新功能及最佳实践 ](https ...

  5. Vue3 全家桶 + Element Plus + Vite + TypeScript + Eslint 项目配置最佳实践

    尤大的 Vue3.0 已经发布有一阵子了,已经很成熟了. 而且 Element Plus + Vite 也出了一段时间了,是时候该上手体验分享一波了. 主要是要熟练一下 Vue3,好准备用 Vue3 ...

  6. 容器环境JVM内存配置最佳实践

    本文介绍如何在容器环境下配置JVM堆参数大小. 背景信息 当您的业务是使用Java开发,且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题.特别是在容器环境下 ...

  7. Aggregated APIServer 构建云原生应用最佳实践

    作者 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云 TKE 云原生 AI 产品的开发工作. 谢远东,腾讯高级工程师,Kubeflow Member.Fluid(CNC ...

  8. 西门子低代码部署亚马逊AWS容器服务最佳实践

    ​ 1. MX云部署架构 西门子低代码官方文档介绍了如何部署西门子低代码应用到k8s的最佳实践.运行环境包括PostgreSQL数据库实例,或者其他数据库,Mysql.oracle等,本地文件存储系统 ...

  9. 业务单据进行领域驱动设计的最佳实践

    作者:少岚 阿里同城履约物流技术团队 本文以电商购物场景为例,介绍了领域驱动设计的应用实践.你会发现,DDD的核心目标就是通过各种实用性的方法和技巧提炼出具有体现问题实质的领域模型,协作解决领域问题, ...

最新文章

  1. Angular vs React 最全面深入对比
  2. 互联网协议 — VRRP 虚拟路由器冗余协议
  3. pytorch 实现线性回归
  4. 客户端命令(docker)
  5. 布局技巧3:创建高效布局
  6. 同时阅读多个pdf文档怎么办?
  7. SpringBoot实用小技巧之动态设置SpringBoot日志级别 1
  8. IoT -- (一) 物联网平台架构设计分析
  9. 策略模式【设计模式学习-02】
  10. ArcGIS——计算几何——面积/周长禁用
  11. BZOJ3654 : 图样图森破
  12. 201919102004张雪婷(第五次作业)
  13. python 二进制与十进制之间的转换
  14. 基于微信云开发的商家转账至零钱
  15. 2020幂次生长,GMIC开启下一个10年科技新浪潮
  16. 图片的放大ZommJS
  17. Android开发中的WMS详细解析
  18. Qt小程序之自绘震动铃铛提示控件
  19. 2019山东省赛记事
  20. 深度剖析陈晓和贝恩之阴谋

热门文章

  1. python调用cplex求解装箱问题_使用cplex(python)解决限制背包(01背包)问题
  2. cf不能全屏win7的解决方法_win7系统屏幕显示brightness如何解决 win7系统屏幕显示brightness解决方法【详解】...
  3. mysql 5.5 分区_MySQL 5.5 表分区功能增强
  4. typora用什么文档管理_会展经济与管理专业自考本科毕业后有什么用
  5. ajax 表格删除,jQuery AJAX删除只捕获第一个表格
  6. icon 做成html形式,一段生成iconfont预览html的代码
  7. java判断回文用valueof_判断回文数,利用String类
  8. oracle for net,使用Oracle Developer Tools For Visual Studio .NET-.NET教程,数据库应用
  9. 2007标注没有文字_Hi,siri,你的商标注册了吗
  10. n阶方程求逆c语言,n阶方阵求逆