Kubernetes之pod调度
Pod的调度在默认情况下是Scheduler Controller 采用默认算法的全自动调度,在实际使用中并不满足我们的需求,因为并不能事先掌握pod被调度到哪个Node之上,所以kubernetes又提供了好几种方式让我们自已选择调度到什么Node中,比如有NodeSelector(定向调度)、NodeAffinity(Node亲和性)、PodAffinity(Pod亲和性)。
NodeSelector调度算法比较简单,NodeSelector 只调度到某个拥有特定标签的Node上,如果没有满足条件的Node,那么此Pod将不会被运行,即使在集群中还有可用Node列表,这就限制了它的使用场景,现在基本上被NodeAffinity取代了,NodeAffinity在NodeSelector的基础之上的进行了扩展,使调度更加灵活,除了有一个必须要满足条件的Node之外,还要可设置优先条件,下面来看下NodeAffinity的使用方式:
一、NodeAffinityNodeAffinity 亲和性有两种表达方式:
RequiredDuringSchedulingIgnoredDuringE ...
灵雀云K8s集群对接Prometheus
安装helm安装helmdocker run -ti --rm -v /usr/local/bin/:/var/log/abc index.alauda.cn/claas/helm:v2.10.0-rc.2 sh -c "cp /systembin/helm /var/log/abc"
安装chart_repo源(我自己的平台已经安装,所以不需要操作)docker run -d \
-p 8088:8080 \
-e PORT=8080 \
-e DEBUG=1 \
-e STORAGE="local" \
-e STORAGE_LOCAL_ROOTDIR="/data" \
-e BASIC_AUTH_USER="chartmuseum" \
-e BASIC_AUTH_PASS="chartmuseum" \
-v /data:/data \
chartmuseum/chartmuseum:latest
检查确定安装成功helm repo list
NAME URL
loc ...
K8s默认的services ip不通
写在前边的话今天团队的小测试集群突然挂掉,完全不能访问,紧急任务排查问题
问题现象平台挂掉,集群内有一台master节点的容器全部down掉,其中大部分pod显示Evicted状态
排查登录三台master节点分别get node发现其中有一台一直未返回,docker ps发现此节点的所有容器down掉,其它两台节点正常。通过其它两台正常节点排查发现kube-dns\flanne\kube-proxy等pod全部是失败状态
在有问题节点查看相关route \ ip等信息,发现也全是缺少相关路由,cni0等网卡;
通过查看flannel容器日志发现:
Failed to create SubnetManager: error retrieving pod spec for ‘kube-system/kube-flannel-8hpcf’: Get https://10.96.0.1:443/api/v1/namespaces/kube-system/pods/kube-flannel-8hpcf: dial tcp 10.96.0.1:443: i/o timeout
通过cu ...
深入 Nginx 之配置篇
注:原文链接:http://tenpercent.top/2019/02/15/learn-nginx-configuration/
常用配置项在工作中,我们与 Nginx 打交道更多的是通过其配置文件来进行。那么掌握这些配置项各自的作用就很有必要了。
首先,nginx.conf 的内容通常是这样的:
...
... #核心摸块
events { #事件模块
...
}
http { # http 模块
server { # server块
location [PATTERN] { # location块
...
}
location [PATTERN] {
...
}
}
server {
...
}
}
mail ...
深入 Nginx 之架构篇
注:原文链接:http://tenpercent.top/2019/01/18/depth-nginx/
前言最近在读 Nginx 相关的书籍,做一下读书笔记。
Nginx 作为业界知名的高性能服务器,被广泛的应用。它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计、事件驱动架构、请求的多阶段异步处理、管理进程与多工作进程设计、内存池的设计,以下内容依次进行说明。
模块化设计高度模块化的设计是 Nginx 的架构基础。在 Nginx 中,除了少量的核心代码,其他一切皆为模块。
所有模块间是分层次、分类别的,Nginx 官方共有五大类型的模块:核心模块、配置模块、事件模块、HTTP 模块、mail 模块。它们之间的关系如下:
在这 5 种模块中,配置模块和核心模块是与 Nginx 框架密切相关的。而事件模块则是 HTTP 模块和 mail 模块的基础。HTTP 模块和 mail 模块的“地位”类似,它们都是更关注于应用层面。
事件驱动架构事件驱动架构,简单的说就是由一些事件发生源来产生事件,由事件收集器来收集、分发事件,然后由事件处理器来处理这些事件(事件处理器需 ...
Linux 性能监控工具
注:原文连接:http://tenpercent.top/2018/07/10/Linux-performance-monitor/
Linux 性能指标
CPU
CPU利用率、用户时间(表示CPU在用户进程上的时间百分比)、系统时间(表示CPU花在内核操作上的时间百分比)、空闲时间、平均负载、阻塞、上下文切换、中断等
内存
空闲内存、Swap利用率、缓冲和缓存、活动和非活动内存等
磁盘IO
IO等待、平均队列长度、每秒传输(TPS)等
网络
接收和发送的包、每秒碰撞(各个网络接口所连接网络的所发生的冲突数量)、丢包、错误等
监测工具以下是对 Linux 的性能进行监控的常用工具:
工具
简介
top
查看进程活动状态以及一些系统状况
vmstat
查看系统状态、硬件和系统信息等
iostat
查看 CPU 负载、硬盘状况
sar
综合工具,查看系统状况
mpstat
查看多处理器状况
netstat
查看网络状况
iptraf
实时网络状态监测
tcpdump
抓取网络数据包,详细分析
tcptrace
网络包 ...
某云ace 2.3平台部署
需要环境
一台数据库机器
一台ake机器,也就是部署机
三台master
三台global
三台es
注: 所有主机都需要单独挂载一块数据盘
环境准备
将所有主机启动
创建一个外网clb
在clb上进行绑定,32001-32006(挂载三台master)、3306(挂载mysql主机)端口
注:此文档安装docker为1.12.6,使用devicemapper存储
部署mysql
安装docker及docker-compose
yum -y install docker docker-compose
编辑mysql yaml文件
vim mysql-master.yaml
version: '2'
services:
mysql:
network_mode: "bridge"
ports:
- "3306:3306"
container_name: mysql-master
image: mysql
environme ...
使用Harbor管理Docker镜像
前言根据Harbor官方描述:
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
部署
添加docker官方源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-18.06.3.ce-3.el7 ...
ES集群节点维护
写在前边的话由于生产环境需要,现将ES集群节点进行精减维护,以下为具体操作步骤:
注:操作时请使用root权限执行
数据迁移ES集群运行中,每个节点数据都是平均的,下线维护一个节点,先把该节点数据迁移到其他节点,避免发生意外。以下使用Kibana进行操作。
例如,如果准备对172.31.1.34节点做维护
迁移命令如下:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": "172.31.1.34"
}
}
迁移后进行查看:
GET _cluster/settings
返回以下内容:
{
"persistent": {},
"transient": {
"cluster": {
" ...
AWS常用cli命令
写在前边的话对AWS服务操作可以通过管理控制台、各语言SDK、CLI以及API等方式。管理控制台最简单,可以直接通过Web界面操作,但是有些服务或者服务下的某些操作无法直接用控制台调用;
API的方式最复杂,需要自己生成哈希值签署请求以及处理请求错误等低级别的操作,AWS 的大部分服务都提供REST的API以及类似于REST的查询API,API提供的服务操作是最新最全面的;
SDK 的好处是封装好了请求签署与请求错误处理以及重试机制,用户只需要直接调用相关接口即可,但对于新的服务及操作的支持可能会滞后于API接口的发布。CLI 其实也可以看成SDK的一种,它是AWS 服务操作的一把瑞士军刀。
本文针对项目实践中所用到的 AWS 服务的常用 CLI 命令进行一个简单总结,方便以后查阅。
EC2
挂载 EBS
linux
查看块设备: lsblk
格式化磁盘: sudo mkfs -t ext4 /dev/xvdb
挂载卷: sudo mount /dev/xvdb /mnt/mydir
卸载卷: sudo umount /dev/xvdb
windows
di ...