Kubernetes集群调度之节点亲和性、Pod亲和性、污点与容忍
调度器Scheduler 是 Kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题: 公平:如何保证每个节点都能被分配资源 资源高效利用:集群所有资源最大化被使用 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作 灵活:允许用户根据自己的需求控制调度的逻辑 k Scheduler 是作为单独的程序运行的,启动之后会一直监听 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding(必须遵守的),表明该 pod 应该放到哪个节点上 调度过程调度分为几个步骤: 首先是过滤掉不满足条件的节点,这个过程称为 predicate(预选); 然后对通过的节点按照优先级排序,这个是 priority(优选); 最后从中选择优先级最高的节点。 Predicate(预选)有一系列的算法可以使用: 算法 说明 PodFitsResources 节点上剩余的资源是否大于 pod 请求的资源 PodFitsHost 如果 pod 指定...
使用acme.sh来自动更新https证书
使用 acme.sh 可以自动申请 let’s encrypt 证书,并且可以自动配置到 nginx,整个过程可以全自动。也可以使用 certbot,certbot 基于 acme.sh使用certbot自动申请ssl证书 安装推荐安装 socat 安装 acme.sh 退出终端,重新登陆后,执行 acme.sh 有输出,说明安装成功了。 配置邮箱 配置默认 CA新版默认 zerossl,也可以手动切换为 let’s encrypt 申请证书acme.sh 实现了 acme 协议支持的所有验证协议.一般有两种方式验证: http 和 dns 验证. 使用 dns api 自动申请官方说明: https://github.com/acmesh-official/acme.sh/wiki/dnsapi DNSpod这里以 dnspod 为例,申请一个 dnspod 的 api key 将 id 和 key 记录下来,执行 执行一次就会把 id 和 key 记录在 ~/.acme.sh/account.conf,下次再执行就不用再提供 id 和 key 了 如果找...
MySQL主从同步配置
主从同步可以相当于实时备份,读写分离还能提高数据库的性能,记录一下主从同步的配置 不停机增加从库可以查看 优雅地给正在运行的MySQL添加从库 一.准备 主从数据库版本最好一致 保证数据库的 uuid 不一致 服务器 ip 地址 MySQL Master 192.168.21.53 MySQL Slave 192.168.21.54 二.操作主数据库操作开启 binlog 这里注意 server-id 主从不能一样, 配置完成重启 mysql 创建用于同步的用户账号登陆数据库 创建用户并授权 授权 未使用的主库主库正在使用(有写入操作)新开一个窗口查看 master 状态 记录二进制文件名 (mysql-bin.000010) 和位置 (747)锁表,禁止写入,当前窗口不能退出,这时候开启另一个终端继续操作 新开一个窗口查看 master 状态 记录二进制文件名 (mysql-bin.000010) 和位置 (747) 将当前数据导出 取消锁表 从服务器操作导入数据(如果需要的话) 修改配置文件 vim /etc/my....
Docker容器间优雅的互联
本文主要介绍如何优雅的让 Docker 容器和 Docker 容器之间相互通信,以及 Docker 容器如何和宿主机进行网络通信。 容器间网络通信docker 容器间通信常见的方式是使用 –link 进行连接,但是 Docker 已经弃用这种方式,并且容器数量一旦一多,–link 会显得很乱。官方推荐使用自定义网络来进行互联。 创建自定义网络 创建容器使用自定义 network比如一个 nginx 容器需要访问 php 容器 这个时候 nginx 可以直接通过 php 来访问 php 容器,打开/etc/hosts 可以发现是 docker 自动帮你添加了解析 容器访问主机服务可以使用容器的网关 IP 来访问(nat 网络),不过使用 ip 不优雅,旧版本的 Docker 可以使用 host.docker.internal 来访问主机,新版本的无法直接访问,可以通过 docker run 增加启动参数来兼容这种方案 之后就可以在容器内通过 host.docker.internal 来访问主机了。 使用固定的 ip 进行通信如果想固定每个容器的 IP,...
Elasticsearch常用API操作
如果有 Kibana 的话,以下所有操作都可以在 Kibana 的 DevTools 页面进行调试,可以免去认证操作。 接口 功能 /_cat/health?v 集群健康状态 /_cat/shards 分片信息 /_cat/nodes 节点信息 /_cat/indices 索引信息 /_cat/allocation?v 磁盘占用 /索引名字/_mapping?pretty 查看 mapping(索引字段类型等) ?v 是详细信息输出 索引查看、创建、删除 索引名字可以通过查看索引接口查看 排序 修改密码 添加角色 查看角色 允许自动创建索引 查看设置 修改设置 修改单个 node 最大分片数 修改索引配置
MySQL常用操作记录
记录一下日常工作中常用到的 MySQL 语句和一些配置等,方便日后查询 用户授权相关创建用户 修改密码 授权 授权的同时修改密码 创建只读账号 创建业务账号 库相关建库 配置文件相关apt 安装的 mysql 配置文件在 /etc/mysql/mysql.conf.d/mysqld.cnf 初始化密码 ubuntu 系统通过 apt 安装的 mysql,需要切换到 root,然后执行 mysql 命令就可以登录(不用密码),对应的用户是 root@localhost当然也可以 cat /etc/mysql/debian.cnf 查看密码。 表名强制转换为小写仅适用于 MySQL 5.7 及以下版本,到了 8.0,只支持初始化时指定该参数,初始化之后,如果修改了该参数,启动就会报错。 配置文件在 [mysqld] 下面新增一行 可以通过执行 sql 查看是否设置成功 查看建库建表语句 binlog查看 binlog 状态 查看 binlog 模式 binlog 配置文件 排序 批量 kill 慢查询 自动 kill 慢 SQL 脚本,并记录...
Kubernetes使用ingress反向代理外部IP
我们平常使用 k8s 的 service 都是自动发现增加 endpoint 的,但是有的时候集群外的服务我们又想用 k8s 的 ingress 来统一做入口,就会涉及到自定义 endpoint 创建 service 创建 endpoint 创建 Ingress
Kafka常用操作记录
经常用到的 Kafka 命令记录以下,方便查找。kafka 的搭建可以参考这篇文章 Kafka和zookeeper搭建 注意: –bootstrap-server 参数配置的 kafka 地址需要根据 kafka 监听地址来判断, 如果监听的是自己的 ip 而不是 0.0.0.0, 那就不要配置 localhost, 改用 ip 地址. Topic 操作 kafka 删除 topic 有可能提示 marked for deletion 这种情况下, 需要停止所有的生产者和消费者 消费组操作 控制台生产消费 控制台查看最新消息查看一个 topic 的每个 partition 的 offset 根据每个 partition 的 offset 来消费最新消息 调整过期时间
编译安装Nginx记录
通常来说编译不通过都是因为系统环境不满足条件,如缺少包等,本文以 CentOS 7 系统为例,其中有些包如 xxx-devel 在 ubuntu 下一般都是叫做 xxx-dev 的,实在找不到可以使用 apt-file 查找文件属于哪个包。 需要准备好这些包(不用监控可以不用准备 nginx-module-vts): 全部解压,然后进入 nginx-1.22.0 目录操作 首先运行一遍 configure 命令 nginx-module-vts 是监控模块,如果不用监控,可以将这一行删除user group prefix 这些参数只是个默认值,是可以被配置文件的配置覆盖的 常见报错解决 ./configure: error: C compiler cc is not found checking for --with-ld-opt="-ljemalloc" ... not found checking for zlib library ... not found You need Perl 5. 开始编译单核心编译多核...
Kubernetes 绑定Hosts的正确姿势
有的时候我们需要在容器里面绑定 hosts,比如我们用 logstash 需要消费 kafka 消息,但是 kafka 监听的地址是 hostname,这个时候就需要绑定 hosts(规范一点是做解析)在容器里面绑定 hosts 常见的方法一种是挂载主机的 hosts 文件,一种是修改容器的启动 CMD,每次启动修改 hosts,这两种方法都有个缺点,就是不受 kubelet 管理了,默认的 hosts 内容也会被覆盖掉在 k8s 环境下有更好的解决方案:那就是让 k8s 自己来管理 使用 hostAliases 来绑定 hosts 进入容器查看 hosts 文件 这个 hosts 包括两个部分,一部分是容器自带的 hosts,另一部分是我们自己添加的 在 docker 下绑定 hosts运行时候修改docker 可以通过 –add-host 参数来添加 hosts 信息到容器的/etc/hosts 文件中 构建时修改Dockerfile 中,可以在 CMD 命令下进行修改,在 RUN 里面修改会提示文件只读无法修改。 在 docker-c...


