EvenChan's Ops.

EvenChan's Ops.

it's better to burn out than to fade away

如何在不重建镜像的情况下修改容器
现在我们使用容器非常频繁,偶尔有一些需求需要更改容器镜像中的一些行为,也许是一个很小的变化,一般我们能想到的就是重新构建镜像,但是这个我们就需要重新构建发布镜像了,除了构建镜像这种方式之外其实还有其他方式可以来实现这个需求。 初始化容器Init Containers 是为了给 Pod 中定义的主容器提供附加功能的。它们在主容器之前执行,可以使用不同的容器镜像,如果出现任何故障,它们将阻止主容器的启动,所有的日志都可以很容易查看到,故障排除也相当简单,它们就像在 Pod 中定义的任何其他容器一样。这种方法在数据库等服务中比较常用,可以根据配置参数对它们进行初始化和配置。 下面的例子使用一个...
5个维度对 Kubernetes 集群优化
节点配额和内核参数调整对于公有云上的 Kubernetes 集群,规模大了之后很容器碰到配额问题,需要提前在云平台上增大配额。这些需要增大的配额包括: 虚拟机个数 vCPU 个数 内网 IP 地址个数 公网 IP 地址个数 安全组条数 路由表条数 持久化存储大小 参考gce随着node节点的增加master节点的配置: 1-5 nodes: n1-standard-1 6-10 nodes: n1-standard-2 11-100 nodes: n1-standard-4 101-250 nodes: n1-standard-8 251-500 nodes: n1-standar...
Kubernetes 故障解决心得 (一)
故障一故障现象kubelet 启动不了,通过命令 journalctl -u kubelet 查看日志,报 Failed to start ContainerManager failed to initialize top level QOS containers: failed to update top level Burstable QOS cgroup : failed to set supported cgroup subsystems for cgroup [kubepods burstable]: failed to find subsystem mount for req...
根据 Configmap Secret 变化更新 Deployment
这个项目叫做 Reloader,它可以监控 Configmap/Secret 的变化,根据 Annotation 选择 Deployment,对相关 Deployment 进行滚动更新。 部署简单工具的安装还是很简单的: 12kubectl apply -f \https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml 如果无法拉取,可以去我github上拉取相关配置文件Github 首先创建我们要用到的配置对象Configmap(domain_n...
Kubernetes 资源预留配置
Kubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量。这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程。除非为这些系统守护进程留出资源,否则它们将与 Pod 争夺资源并导致节点资源短缺问题。 当我们在线上使用 Kubernetes 集群的时候,如果没有对节点配置正确的资源预留,我们可以考虑一个场景,由于某个应用无限制的使用节点的 CPU 资源,导致节点上 CPU 使用持续100%运行,而且压榨到了 kubelet 组件的 CPU 使用,这样就会导致 kubelet 和 apiserve...
Kubernetes 临时存储需要限制吗?
临时存储简介Node节点通常还可以具有本地的临时性存储,由本地挂载的可写入设备或者 RAM来提供支持。 临时(Ephemeral) 意味着对所存储的数据不提供长期可用性的保证。 Pods 通常可以使用临时性本地存储来实现缓冲区、保存日志等功能。 kubelet 可以为使用本地临时存储的 Pods 提供这种存储空间,允许后者使用 emptyDir 类型的卷将其挂载到容器中。 kubelet 也使用此类存储来保存节点层面的容器日志, 容器镜像文件、以及运行中容器的可写入层。 临时存储有哪些 本地临时存储(local ephemeral storage) emptyDir 本地临时存储(lo...
打造高效的Kubernetes命令行终端 iTerm2 + kubectl + kubectx + kube-ps1 + oh-my-zsh
本文介绍如何打造一个高效的Kubernetes命令行终端以及Kubernetes命令行操作。 为什么我们要打造高效的Kubernetes命令行终端呢?因为下面的三点原因: Kubernetes作为云原生时代的“操作系统”,熟悉和是用它是每名用户(User)的必备技能。 命令行是最高效,最有“逼格”的操作方式,在喜欢命令的人眼里dashboard不是给开发者和管理员用的。 kubenetes原生提供了kubectl命令就很好用,再通过命令行调用很方便的说啊! 前几天看到dev.to网站里有人讨论Can I see your terminal? 我心想命令行这么“私人“的东西怎么能随便给...
实用的bash自定义脚本
工作越久 越能发现bash 自动化脚本的实用与好处 bash 用得好的话 在提升工作效率方面说“积小流而成江海”也不为过 前置条件所有命令只在 MacOS 系统上测试使用 同时都是写入 ~/.bash_profile 然后 source ~/.bash_profile 进行更新应用(有些也可能是 .bashrc) 为了省事 我直接将开启 编译 bash_profile 的命令成别名 123BASH_PROFILE_PATH="$HOME/.bash_profile"alias bash.open="open ${BASH_PRO...
利用 Loki/Promtail/Grafana 收集分析日志
Loki/Promtail/Grafana vs EFKLoki Stack 包含三个组件: Loki: 相当于 EFK 中的 ElasticSearch,用于存储和查询日志 Promtail: 相当于 EFK 中的 Filebeat/Fluentd,用于采集和发送日志 Grafana: 相当于 EFK 中的 Kibana,用于 UI 展示 使用 Helm 部署 Loki Stack 到 Kubernetes 参考官方文档: https://github.com/grafana/loki/blob/master/docs/installation/h...
两个助你高效编写 Kubernetes YAML 文件的神技
  我们在编写 Kubernetes 资源清单的时候可能会经常会忘记要创建的资源名称,即使知道了可能也不记得该资源对象有哪些属性可以使用了,特别是对于那些名称很长的资源或者属性,即使死记硬背下来隔一段时间又会忘记了。   比如现在我们要创建一个 validating 的 admission webhook,我们就需要定义一个 ValidatingWebhookConfiguration 的资源对象,但是可能我们不记得它的全名了。这个时候我们可以使用 kubectl api-resources 命令来找到我们需要的 API 资源。找到了正确的资源名称之后,就需要了解如何编写正确的 YAML...
avatar
EvenChan
Tomorrow Is Another Day