在我们开发kubernetes
应用的过程中,一般情况下是我们在本地开发调试测试完成以后,再通过CI/CD
的方式部署到kubernetes
的集群中,这个过程首先是非常繁琐的,而且效率非常低下,因为你想验证你的每次代码修改,就得提交代码重新走一遍CI/CD
的流程,我们知道编译打包成镜像这些过程就是很耗时的,即使我们在自己本地搭建一套开发kubernetes
集群,也同样的效率很低。在实践中,若不在本地运行那些服务,调试将变得颇具挑战。就在几天前,我遇到了Skaffold
,它是一款命令行工具,旨在促进kubernetes
应用的持续开发,Skaffold
可以将构建、推送及向kubernetes
集群部署应用程序的过程自动化,听上去是不是很舒服呀~~~
标签: #Kubernetes
上周我们发布了k8s技术圈一周精选第1期,从后面的反馈来看非常不错,之前很多问题其实大家都遇到过,只是没有记录沉淀下来,导致后面很多同学去踩同样的坑,这其实是非常浪费时间浪费资源的。一周时间还是非常快的,这不我们的第2期又来了。
另外,也欢迎大家加入我们的【微信群】
和【知识星球】
共同探讨,共同进步。
有很多团队在使用kubernetes
的时候是将一个namespace
当成一个租户的,所以对namespace
的权限控制,资源控制就很重要了,你总是会担心你的某个租户使用的资源就超出了应有的配额。幸运的是kubernetes
本身就为我们提供了解决这一问题的工具:资源配额控制器(ResourceQuotaController
)
资源配额控制器确保了指定的资源对象始终不会超过配置的资源,能够有效的降低整个系统宕机的机率,增强系统的鲁棒性,对整个集群的稳定性有非常重要的作用。
继续阅读 →一转眼都已经过了龙抬头的日子了,可能你自己没注意到,要是仔细一算的话,2018年已经过了1/4了,是不是今年的规划还没提上日程呢?总之,咱们还是需要撸起袖子加油继续干啊~~~
今天的文章是总结我们知识星球
在本周的一些精华的分享内容,同时,也欢迎大家加入我们的【微信群】
和【知识星球】
共同探讨,共同进步。
一般情况下我们部署的 POD 是通过集群自动调度选择某个节点的,默认情况下调度器考虑的是资源足够,并且负载尽量平均,但是有的时候我们需要能够更加细粒度的去控制 POD 的调度,比如我们内部的一些服务 gitlab 之类的也是跑在Kubernetes
集群上的,我们就不希望对外的一些服务和内部的服务跑在同一个节点上了,害怕内部服务对外部的服务产生影响;有的时候呢我们两个服务直接交流比较频繁,又希望能够将这两个服务的 POD 调度到同样的节点上。这就需要用到 Kubernetes 里面的一个概念:亲和性,亲和性主要分为两类:nodeAffinity
和podAffinity
。
前面在k8s技术圈
微信群里面有朋友问到如何在容器中获取 POD 的基本信息,其实kubernetes
原生就提供了支持的,那就是Downward API
。
我们经常都需要为我们的应用程序配置一些特殊的数据,比如密钥、Token 、数据库连接地址或者其他私密的信息。你的应用可能会使用一些特定的配置文件进行配置,比如settings.py
文件,或者我们可以在应用的业务逻辑中读取环境变量或者某些标志来处理配置信息。
当然你可以直接将这些应用配置信息直接硬编码到你的应用程序中去,对于一个小型的应用,这或许是可以接受的,但是,对于一个相对较大的应用程序或者微服务的话,硬编码就会变得难以管理了。比如你现在有10个微服务,都连接了数据库A,如果现在需要更改数据库A的连接地址的话,就需要修改10个地方,显然这是难以忍受的。
继续阅读 →我们前面介绍了很多关于kubernetes
本身的操作,但是对于如何写一个完整的kubernetes
应用还没有介绍过。在这篇文章中我们将介绍如何一步一步的写一个kubernetes
的golang
服务。
在之前的文章中,我们一直在讨论如何使用kubernetes
,很多时候我们知道怎么使用kubectl
命令行工具来启动一个POD
,也看到我们在安装kubernetes 过程中使用了一些 YAML 文件来创建,但是发现很多朋友对 YAML 文件来创建一个 POD 还是非常陌生。所以我们来简单看看 YAML 文件是如何工作的,并使用 YAML 文件来定义一个 kubernetes pod,然后再来定义一个 kubernetes deployment吧。
Helm
这个东西其实早有耳闻,但是一直没有用在生产环境,而且现在对这货的评价也是褒贬不一。正好最近需要再次部署一套测试环境,对于单体服务,部署一套测试环境我相信还是非常快的,但是对于微服务架构的应用,要部署一套新的环境,就有点折磨人了,微服务越多、你就会越绝望的。虽然我们线上和测试环境已经都迁移到了kubernetes
环境,但是每个微服务也得维护一套yaml
文件,而且每个环境下的配置文件也不太一样,部署一套新的环境成本是真的很高。如果我们能使用类似于yum
的工具来安装我们的应用的话是不是就很爽歪歪了啊?Helm
就相当于kubernetes
环境下的yum
包管理工具。
最近在kubernetes
上安装 sentry 的时候,我将sentry
需要运行的3个服务放到同一个POD中的,WEB、Celery Worker、Crontab 分别用一个独立的容器来运行的,但是这三个容器需要用到环境变量基本上都是一样的,比如数据库的配置、消息队列的配置,这样就造成一个问题是我需要把完全一模一样的环境配置复制3份,因为3个容器都需要使用,这样如果需要更改的话也要改3个地方。幸好kubernetes
给我们提供了一种新的特性:PodPreset,该对象用来在 Pod 创建的时候向 Pod 中注入某些特定信息,可以包括 secret、volume、volume mount 和环境变量等。
前面我们在kubernetes dashboard 升级之路一文中成功的将Dashboard
升级到最新版本了,增加了身份认证功能,之前为了方便增加了一个admin
用户,然后授予了cluster-admin
的角色绑定,而该角色绑定是系统内置的一个超级管理员权限,也就是用该用户的token
登录Dashboard
后会很强势,什么权限都有,想干嘛干嘛,这样的操作显然是非常危险的。接下来我们来为一个新的用户添加访问权限控制。