EvenChan's Ops.

EvenChan's Ops.

it's better to burn out than to fade away

01. GO之从零实现Web框架
本文是 7天用Go从零实现Web框架Gee教程系列的第一篇。 简单介绍net/http库以及http.Handler接口。 搭建Gee框架的雏形,代码约50行。 标准库启动Web服务Go语言内置了 net/http库,封装了HTTP网络编程的基础的接口,我们实现的Gee Web 框架便是基于net/http的。我们接下来通过一个例子,简单介绍下这个库的使用。 day1-http-base/base1/main.go 12345678910111213141516171819202122232425package mainimport ( "fmt&q...
etcd-operator的部署及使用
1. 部署RBAC下载create_role.sh、cluster-role-binding-template.yaml、cluster-role-template.yaml 例如: 1234567|-- cluster-role-binding-template.yaml|-- cluster-role-template.yaml|-- create_role.sh# 部署rbackubectl create ns operatorbash create_role.sh --namespace=operator # namespace与etcd-operator的ns一致 示例: ...
Kubernetes 最佳安全实践指南(更新版)
前言对于大部分 Kubernetes 用户来说,安全是无关紧要的,或者说没那么紧要,就算考虑到了,也只是敷衍一下,草草了事。实际上 Kubernetes 提供了非常多的选项可以大大提高应用的安全性,只要用好了这些选项,就可以将绝大部分的攻击抵挡在门外。为了更容易上手,我将它们总结成了几个最佳实践配置,大家看完了就可以开干了。当然,本文所述的最佳安全实践仅限于 Pod 层面,也就是容器层面,于容器的生命周期相关,至于容器之外的安全配置(比如操作系统啦、k8s 组件啦),以后有机会再唠。 1. 为容器配置 Security Context大部分情况下容器不需要太多的权限,我们可以通过 Sec...
Pod 一直停留在 Terminating 状态问题处理
前言近期,弹性云线上集群发生了几起特殊的容器漂移失败事件,其特殊之处在于容器处于 Pod Terminating 状态,而宿主则处于 Ready 状态。 宿主状态为 Ready 说明其能够正常处理 Pod 事件,但是 Pod 却卡在了退出阶段,说明此问题并非由 kubelet 引起,那么 docker 就是 1 号犯罪嫌疑人了。 下文将详细介绍问题的排查与分析全过程。 2. 抽丝剥茧2.1 排除 kubelet 嫌疑Pod 状态如下: 12[stupig@master ~]$ kubectl get pod -owidepod-976a0-5 0/1 ...
golang cobra的一些笔记
这几天稍微写了下cobra,网上搜到的博客分为两类,一类是把官方的readme翻译一下完事的,一类是写的都太简单了没有实际常见场景的。这里不废话了,先用官方demo讲解下 Cobra介绍是一个golang的库,其提供简单的接口来创建强大现代的CLI接口,类似于git或者go工具。同时,它也是一个应用,用来生成个人应用框架,从而开发以Cobra为基础的应用。热门的docker和k8s源码中都使用了CobraCobra 结构由三部分组成:命令( Command )、标志( Flag )、参数( Args )。 1234567type Command struct { Use ...
从一次IPVS故障开始的Kubernetes容器网络排障
问题现象是集群运行一段时间后kube-proxy停止更新IPVS规则,这个问题是由一个存在于1.11.5/1.12.2/1.13.0版本中的bug造成的。并在以下版本中得到了修复,可以查看kubernetes/kubernetes#71071了解更多信息。 1.11.7 1.12.5 1.13.2 另一方面,也可以通过将未修复版本的kube-proxy设置为iptables模式来规避这个问题。 开始讲故事最近有两个新平台部署,第一次在线上启用了很多新方案。包括Master高可用,LVS,持久化存储,Prometheus监控。本以为在测试环境已经正常跑了一...
K8S 问题排查:cgroup 内存泄露问题
前言这篇文章的全称应该叫:[在某些内核版本上,cgroup 的 kmem account 特性有内存泄露问题],如果你遇到过 pod 的 cannot allocated memory 报错,node 内核日志的 SLUB: Unable to allocate memory on node -1 报错,那么恭喜你中招了。 这个问题在 pingcap 文章 和腾讯云的官方修复都发过,原因也讲的很清楚,不过因为版本差异,文章里的方法有所变动,这里做下总结。 现象我们的环境: K8S 版本: 1.11、1.13、1.16 docker 版本:18.09 机器操作系统:centos7、cen...
K8S 部署流程
本地 Kubernetes 集群安装0. 网络环境的准备 Kubernetes 用到的很多镜像都在 gcr.io 上,在国内访问会有困难。 这里提供两个手段: 在家庭路由器上整个科学代理,实现全局科学上网。 使用 liangyuanpeng 大佬在评论区提供的 gcr 国内镜像地址,这需要进行如下替换: k8s.gcr.io—> lank8s.cn gcr.io—> gcr.lank8s.cn 1. 节点的环境准备首先准备三台 Linux 虚拟机,系统按需选择,然后调整这三台机器的设置: 节点配置: master:不低于 2c/3g,硬盘 20G 主...
Kubernetes 平滑移除节点
如果你想从Kubernetes集群中删除节点,正确流程如下: 获取节点列表1kubectl get node 设置不可调度由于节点目前处于正常工作状态,集群中新建资源还是有可能创建到该节点的,所以先将节点设置为不可调度: 1kubectl cordon $node_name 将节点上资源调度到其他节点目前集群已经不会分配新的资源在该节点上了,但是节点还运行着现有的业务,所以我们需要将节点上的业务分配到其他节点: 1kubectl drain $node_name 注意:DaemonSet Pod 和 Static Pod 是不会在集群中其他节点重建的。 移除节点当前集群中已...
使用 Docker 加速开发工作流
在开发工作流中使用 Docker 可以极大提高生产力,它消除了"它在我机器上都可以运行"这类典型的错误,在不同的机器上运行也只需要一个 Docker 守护进程,而不需要其他组件。 什么是 DockerDocker 是一个可以运行容器平台,为了运行这些容器,Docker 使用了操作系统级的虚拟化技术,你可以把容器看作是一个轻量级版本的虚拟机。 你在 Docker 平台上运行的所有容器都是相互隔离的。要启动一个容器,你需要一个 Docker 镜像,这个镜像是你的容器的模板,你可以从 Docker Hub 中获取已经预定义的镜像,或者通过编写 Dockerfile 文件来...
avatar
EvenChan
Tomorrow Is Another Day