k8s编排最佳实践
编排文件技巧
- 使用资源时指定最新稳定版的API version
- 编排文件应该纳入版本控制,这样可以在必要的时候快速回滚,同样也有利于资源恢复和重建
- 使用YAML格式而不是JSON格式,尽管两种格式的文件可以相互转换,但是YAML格式更易读
- 使用单一的文件组织相关资源,单文件比多文件更好组织管理,可以参考guestbook-all-in-one.yaml
- 很多kubectl命令可以作用于整个文件夹,比如kubectl create somedir,可以对somedir目录中所有的配置文件执行create指令
- 对资源的描述可以写到annotations中,便于自省
裸Pod
不受任何控制器(Deployment,ReplicaSets,Jobs)控制的Pod称之为裸Pod
- 尽量避免使用裸Pod,因为在发生节点错误的时候没有任何策略保证Pod的重调度,死掉就彻底死掉了。
- 相反,Deployment会启动相应的ReplicaSet来保证Pod的可用数量,同时有更新策略提供对Pod的更新比如Rolling Update。
- 有些特殊只需要执行一次的场景可用Job替代
Service
- service优先创建,理解为2点:service在它所依赖的资源创建出来之前创建;service在访问它的资源创建之前创建。k8s创建容器的时候会在容器中写入当前存在的service地址的环境变量,比如有个名称为foo的service,所有k8s创建出来的容器中都会有如下的环境变量
FOO_SERVICE_HOST=<the host the Service is running on>
FOO_SERVICE_PORT=<the port the Service is running on>
如果代码中要访问Service,不要使用上述环境变量,最好使用Service的dns名称,上述环境变量只是为了解决有些老的系统无法使用DNS查找问题的临时方案
- 如非必要,不要给Pod指定
hostPort,因为会限制Pod被调度的可能
如果只是想访问某个端口进行debug,可以使用apiserver proxy或kubectl port-forward
如果确实需要暴露某个Pod的端口到主机端口,建议使用Service中的NodePort
使用标签(labels)
- 定义和使用语义明确的标签。比如
{ app: myapp, tier: frontend, phase: test, deployment: v3 },
Service可以通过Selector实现跨Deployment组织资源;Deployment可以通过标签实现无中断更新
- 巧用标签进行调试。因为k8s资源控制器和Service都是通过标签来组织和管理资源的。移除Pod上的标签会导致控制器和Service不再将该Pod列为自己的资源,不再会有流量分配到该Pod。此时控制器会创建新的Pod来代替被移除的Pod,这是一种“隔离调试”技术。
容器镜像
- 默认的 imagePullPolicy是
IfNotPresent,kubelet只有在本地不存在的情况下才会去拉取镜像。如果想每次执行都拉取镜像可以指定策略:imagePullPolicy: Always
还有一种方法是指定:latesttag,也会每次都拉取镜像
生产环境避免使用这种方式
使用kubectl
- 使用
kubectl apply -f <directory>或kubectl create -f <directory>,会匹配目录中的.yaml .yml .json 文件 - get/delete命令建议搭配使用标签选择器而不是资源名,参考label selectors和using labels effectively
- 使用
kubectl run和kubectl expose命令快速创建Deployment和Service,参考Use a Service to Access an Application in a Cluster
k8s编排最佳实践的更多相关文章
- 生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程
引言 Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序.动态地伸缩应用程序.无缝地推出新特性,同时有效地利用硬件资 ...
- 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 可能很多新手都会遇到同样的问题:我要我的Asp.net ...
- Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
Istio是什么? Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司.它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管 ...
- ELK:收集k8s容器日志最佳实践
简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...
- 一款不错的 Go Server/API boilerplate,使用 K8S+DDD+CQRS+ES+gRPC 最佳实践构建
Golang API Starter Kit 该项目的主要目的是使用最佳实践.DDD.CQRS.ES.gRPC 提供样板项目设置. 为开发和生产环境提供 kubernetes 配置.允许与反映生产的 ...
- JuiceFS CSI Driver 的最佳实践
文章根据 Juicedata 工程师朱唯唯,在云原生 Meetup 杭州站所作主题演讲<JuiceFS CSI Driver 的最佳实践>整理而成. 大家好,我是来自 Juicedata ...
- 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践
前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...
- Kubernetes生产环境最佳实践
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 众所周知,Kubernetes很难! 以下是在生产中使用 ...
- Java容器化参数配置最佳实践
Java是以VM为基础的,而云原生讲究的就是Native,天然的矛盾,虽然Quarkus是为GraalVM和HotSpot量身定制的K8s Native Java框架,生态原因切换成本太高,这种矛盾体 ...
随机推荐
- MySQL 库名重命名
MySQL ( RENAME database olddbname TO newdbname ) 对库名的重命名上会出现一些奇怪的错误.有丢失数据的风险. 所以如何去重命名呢: 1 用mysqldu ...
- git merge 与 rebase
git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...
- 使用FFmpeg捕获一帧摄像头图像
最近在研究FFmpeg,比较惊讶的是网上一大堆资料都是在说如何从已有的视频中截取一帧图像,却很少说到如何直接从摄像头中捕获一帧图像,其实我一直有个疑问,就是在Linux下,大家是用什么库来采集摄像头的 ...
- Java SE学习笔记 --->高级类特性 ---> toString() 方法
概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...
- Grunt的配置和使用
Grunt和Grunt插件是通过NodeJs的包管理工具npm安装并进行管理的. Grunt 0.4.x必须配合NodeJs=>0.8.0版本使用(奇数版本的NodeJs不是稳定的开发版本) ...
- 利用Python进行数据分析
最近在阅读<利用Python进行数据分析>,本篇博文作为读书笔记 ,记录一下阅读书签和实践心得. 准备工作 python环境配置好了,可以参见我之前的博文<基于Python的数据分析 ...
- NSURLSession 所有的都在这里(一)
这篇文章会有什么? 在这篇文章中把NSURLSession.h文件集体梳理一遍,把里面的每个属性.代理和方法都拿出来说说,通过这篇文章我相信对于NSURLSession这一块的东西会梳理的比较全面一点 ...
- PHP采用Cookie实现 购物车
先来看一下逻辑分析图:
- 适合Python的5大练手项目, 你练了么?
在练手项目的选择上,还存在疑问?不知道要从哪种项目先下手? 首先有两点建议: 最好不要写太应用的程序练手,要思考什么更像是知识,老只会写写爬虫是无用的,但是完全不写也不行. 对于练手的程序,要注意简化 ...
- 关于C#中程序功能实现,对代码选择的思考
body { background-color: rgb(60,60,60) } 接触C#语言只有短短几天时间,想要写出什么高大上的深入性研究文章,估计也是满篇的猜想和一些没有逻辑的推断.截至目前而言 ...