⑴ 使用k3s减少k8s成本
爱飞狗后台的数据爬虫以及数据服务器资源都部署在k8s上,使用rancher搭建。在不影响太多性能的情况下尽量选择最低配置的机器。对于内存不足的情况适当的使用交换文件代替(swap)。整个集群大致结构如下:
一个月的开销大概在60美元左右。分析上面的集群可以发现,rancher和etcd两个节点是浪费了钱,每个月有20美元的开销。DigitalOcean提供了k8s的托管集群,可以将这部分开销节省。但托管集群的droplet无法定制化,无法使用交换分区和bbr,造成性能瓶颈。另外托管的droplet的最低要求也是2G的内存,造成不必要的开支。
k8s有一个非常不好的地方就是最低的机器要求比较高,1G内存的worker node已经完全低于推荐配置,如果在上面部署worker node直接的内存占用就要300M左右,剩余的内存空间并不多,必须要使用交换分区。etcd节点之前也用过1G的内存,但经常会由于大量使用交换分区导致性能问题,最后集群崩溃,所以无论如何也需要使用2G的内存才行。
最近rancher公司推出了k3s,其主打就是简易的部署和极地的机器消耗。这点对于节约成本来讲非常的重要。我试了下k3s的server大概只占用200M左右的内存,agent只占用几十兆内存,非常的节约。k3s也可以完全使用kubectl来进行管理,配置文件和k8s保持一致,非常方便。
我将etcd节点和rancher主机删除,替换成了1G 1CPU的机器(5美元),节约了15美元,然后将aiflygo的服务器进行降配置到2G 2CPU (15美元),总共节约20美元。得益于更多的可用内存,目前爬虫的性能比以前更好,整体集群的性能也非常的高。
至于HA,既然都穷到了用k3s来减少开销,对于我这样的小型的集群和不是关键系统来讲都不是需要考虑的了。
⑵ 【K8s 精选】CKA - 如何配置和使用 CoreDNS
CoreDNS 是 插拔化 的 DNS 服务器,即 CoreDNS 内部采用插件机制,所有功能都是插件形式编写。用户可以使用 Corefile 来配置功能,甚至可以自定义插件扩展 CoreDNS。 CoreDNS 总体的工作流程 如下:
CoreDNS 的 Corefile 配置文件:
通过 Corefile 配置文件可知,两个定义的 DNS Server,分别监听 5300 和 53 端口,即 CoreDNS 的请求处理逻辑,如下图所示。
集群管理员可以修改 CoreDNS Corefile 的 ConfigMap ,以更改服务发现的工作方式。
Corefile 配置文件格式如下:
在 Kubernetes 中,CoreDNS 安装时使用如下默认 Corefile 配置:
自定义 DNS 设置的 Pod 示例:
创建上面的 Pod 后,容器 test 会在其 /etc/resolv.conf 文件内容如下所示,可以查看命令是 kubectl exec -it dns-example -- cat /etc/resolv.conf 。
⑶ 玩转 K8s 权限控制:RBAC + kubeconfig 搞定 kubectl 权限管理那些事
当一个Kubernetes集群需要被多个租户共享时,权限控制变得至关重要。首要需求包括为每个用户分配特定的命名空间,以及限制特定用户只能执行特定操作,比如禁止“张三”执行kubectl delete node命令。
在上一篇文章中,我们讨论了如何在不暴露NodePort的情况下,使用VS Code更新Pod内的代码。其实,要实现多租户通过VS Code连接自己的Pod的需求,涉及到为不同租户创建合适的最小权限kubeconfig。今天,我们就来解决这个问题。
权限控制的核心是RBAC(Role-Based Access Control),它允许管理员精确控制用户、ServiceAccount或实体对集群资源的操作权限。RBAC通过角色、角色绑定和权限规则来实现。在Kubernetes中,RBAC机制使得管理员能够定义精细的访问控制策略,从而提高集群的安全性和管理灵活性。
要开始RBAC配置,首先创建ServiceAccount、Role、RoleBinding和Secret。在Role中定义角色权限,RoleBinding将角色绑定到特定用户或ServiceAccount。Secret存储了ServiceAccount的访问凭证,如token。通过kubectl apply命令部署这些资源,Secret会自动包含CA证书和token信息,供后续使用。
接下来是配置kubeconfig文件,这是Kubernetes的配置文件,包含了访问集群所需的所有信息。kubeconfig文件通常存储在用户主目录的.kube目录下,名为config。配置文件由clusters、users、contexts三个部分组成,分别对应集群信息、用户信息和上下文切换功能。通过定义不同的上下文,用户可以在多个集群和命名空间之间切换。
为了将用户权限配置应用于kubeconfig,需要将之前创建的Secret中的token复制到kubeconfig文件中。在kubeconfig中定义用户和集群信息,并通过context将用户和集群关联起来。这样,用户可以通过切换context在不同的集群和命名空间之间进行切换。
完成配置后,可以通过测试来验证kubeconfig是否正常工作。最简单的方法是备份$HOME/.kube/config文件,替换为新的kubeconfig文件。另外,也可以通过设置KUBECONFIG环境变量来指定新的kubeconfig路径。使用kubectx工具可以更方便地切换context,从而测试用户的权限是否正确应用于特定的集群和命名空间。
总结而言,通过RBAC和自定义kubeconfig文件,可以实现对Kubernetes集群的精细权限控制。从创建角色、角色绑定到配置kubeconfig文件,再到测试和切换上下文,整个流程确保了集群资源的安全访问控制。在这个过程中,理解RBAC机制和正确配置kubeconfig文件是关键步骤,它们共同为多租户环境下的Kubernetes集群管理提供了强大的权限控制能力。