ZWEI

Time flies.

下线一般有两种情况,一般是故障或者是迁移。故障节点下线只需要直接摘除下来就可以,因为会从新调度到新的节点。而正常节点迁移则需要先排干节点,即将所有pod在此节点上迁移出去其他节点。

阅读全文 »

Install Linux Kernel 4.4.5 LTS in CentOS 7

I tested this tutorial on CentOS 7 64 bit edition. Although, these steps should work on RHEL 7.

Note: Since this kernel is just released, the latest kernel haven’t pushed into the ELRepo yet. It stills shows the 4.4.4 version. I think the latest kernel will be pushed to the repository in few hours.

To install the latest kernel, add ELRepo repository.

Add ELRepo GPG key:

阅读全文 »

1 什么是Context

最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究把玩一把。

阅读全文 »

找到网卡对应的方式,在主机上执行如下命令

1
2
3
4
5
6
7
docker exec -it <container-name> bash -c 'cat /sys/class/net/eth0/iflink'

# 假设返回 12
grep -l 12 /sys/class/net/veth*/ifindex
# 此时会有如下类似返回
/sys/class/net/veth11d4238/ifindex
# veth11d4238 即主机上的另一半
阅读全文 »

文字识别

python的pytesseract为文字识别提供了很好的支持。整个实现只需要一行关键代码即可。

前提安装

1
2
yum install -y tesseract-langpack-chi_sim tesseract-langpack-chi_tra tesseract
pip install pytesseract

代码示例

1
2
3
4
from PIL import Imageimport
import pytesseract
text=pytesseract.image_to_string(Image.open(file_path), lang='chi_sim')
print(text)

识别语言: 中文简体(chi_sim), 繁体(chi_tra)

阅读全文 »

集群做了什么?产生了什么影响?

在容器引擎的日常运维中,经常遇到客户反馈线上问题,例如: cloud-controller-manager 服务无法启动,集群初始化卡状态,kubectl top no 命令返回错误,master节点某些pod被kill掉等;值班同学遇到这些问题时,通常会进入集群各个节点查看服务日志,找到产生问题的原因;经过一段时间对值班反馈问题的整理,发现线上服务出现异常的根本原因主要集中在以下几类: 1. 客户修改或删除集群服务配置文件 2. 客户勿删集群资源 3. 节点系统服务异常或资源不足 ;为了更加便捷高效的排查问题,我们引入了集群审计,用于追踪系统日志,配置文件变更,k8s资源操作,将集群在某个时间段内做了什么,产生了什么影响,变得一目了然。

服务架构

1

集群审计数据源

Kubernetes-Audit

kubernetes资源操作追踪审计日志

启动和配置

kube-apiserver源生支持kubernetes集群操作审计功能,在启动kube-apiserver服务时加入以下参数即可:
1
2
3
4
5
--audit-policy-file=/etc/kubernetes/audit-policy.yaml  # 指定审计策略配置文件路径
--audit-log-path=/var/log/kubernetes/audit.log # 指定审计日志输出路径
--audit-log-maxage=7 # 审计日志保留天数
--audit-log-maxbackup=4 # 审计日志备份数量
--audit-log-maxsize=10 # 审计日志文件大小,文件超过指定大小后将循环覆盖写入

kube-apiserver

1
/etc/kubernetes/manifests/kube-apiserver.yaml 展开源码

审计策略文件

1
/etc/kubernetes/audit-policy.yaml 展开源码

Inotifywait

inotify日志,记录集群节点文件变更(包括:创建,修改,删除,移动操作)

启动和配置

1
/usr/bin/inotifywait -mrq -d -o /var/log/inotify.log --timefmt '%Y-%m-%d %H:%M:%S' --format '{"datetime": "%T", "event": "%e", "fpath": "%w%f"}' -e create,delete,modify,move --exclude "(.swp|.inc|.svn|.rar|.tar.gz|.gz|.txt|.zip|.bak|.log|sed*[[:alpha:]])" /etc

Syslog

linux系统日志

Filebeat

Filebeat是一个轻量级日志传输Agent,可以将指定日志转发到Logstash、Elasticsearch、Kafka、Redis等中。Filebeat占用资源少,而且安装配置也比较简单,支持目前各类主流OS及Docker平台。

启动和配置

/etc/filebeat/filebeat.yml 展开源码

审计日志汇总展示

Kibana使用

Kibana服务地址:http://kibana.kce.ksyun.com:8601/app/kibana#/home?_g=()

进入Kibana页面后,导航栏中选择”Discover” => 在index下拉菜单中选择 “kce-online-audit-*” => 在页面最上面的输入框中输入 “cluster_uuid: ${cluster_uuid}” 按集群uuid过滤审计日志 => “回车”进行搜索查询
2

审计日志包含三个数据源,在审计中使用”tags”进行标识区分; objectRef.resource和verb 是 kube-apiserver字段,用于快速查看集群中哪些资源做了什么操作; event和fpath 是 inotify字段,用于快速查看哪些文件产生了哪些变更事件
1

由于syslog的message字段内容数据量大小不一致,切内容非格式化,故没有在Kibana展示模板进行单独配置,如果需要批量查看syslog审计日志可按tags过滤,并定义查看指定审计字段

1

介绍

Kubernetes Cluster Federation 又名 KubeFed 或 Federtation v2,是 Kubernetes SIG Multi-Cluster 团队新提出的集群联邦架构。新架构在 Federation v1 基础之上,简化扩展 Federated API过程,并加强跨集群服务发现与编排的功能。

KubeFed 是Kubernetes官方多集群联邦解决方案。它允许用户使用在“Host cluster”中定义的一组简单的APIs,在多个Kubernetes集群中联合统一调度工作负载。

KubeFed 与v1版本使用一套独立的Federation APIs不同,它创建和扩展了一套自定义资源。

在 KubeFed 设计之初,有两个最重要的核心理念是其希望实现的,分别为 Modularization(模块化)和 Customizable(定制化)。这两个理念是希望 KubeFed 能够跟随着 Kubernetes 生态发展,并与之保持相容性和扩展性。

与 v1 版本相比,KubeFed 最大的改变是将 API Server 移除,并通过 CRD 机制来完成 Federated Resources 的扩充,KubeFed Controller 负责管理这些 CRD,并实现同步 Resources 、跨集群编排等功能。

阅读全文 »

kubefed客户端安装

下载地址:https://github.com/kubernetes-sigs/kubefed/releases/tag/v0.2.0-alpha.1

1
2
3
4
curl -LO https://github.com/kubernetes-sigs/kubefed/releases/download/v0.2.0-alpha.1/kubefedctl-0.2.0-alpha.1-linux-amd64.tgz
tar -zxvf kubefedctl-*.tgz
chmod u+x kubefedctl
sudo mv kubefedctl /usr/local/bin/ # make sure the location is in the PATH
阅读全文 »

背景

govendor 缺点

govendor依赖管理太松散,同一个依赖项目,不同的组件引用,版本可以不一样,例如vendor.json:

1
2
3
4
5
6
7
8
9
10
11
12
{
"checksumSHA1": "ehAUZgg3BT4gz3WA5B9l2o4NOHw=",
"path": "k8s.io/apimachinery/pkg/api/equality",
"revision": "035e418f1ad9b6da47c4e01906a0cfe32f4ee2e7",
"revisionTime": "2019-07-31T12:28:47Z"
},
{
"checksumSHA1": "bmva3UAPnGM9sI9Ap5hXRhlH4wA=",
"path": "k8s.io/apimachinery/pkg/api/errors",
"revision": "1f8faeb8119141131b81637c896fc4c30e7075ae",
"revisionTime": "2019-07-30T15:53:30Z"
},
阅读全文 »
0%