kubernetes api公约

api规范 前言 本问主要讲解整个kubernetes api的规范公约,本文译自kubernetes社区的本篇文档。译这篇文章是因为在与kubernetes打交道曾多次参考,非常有价值,可以帮助我们更好的理解kubernetes api。中文有的地方表达不是很完善,最好可以对照原文看。下面是部分译文。 本文档面向想深度理解kubernetes api结构,以及扩展kubernetes的开发人员。 目录 Types (Kinds) Resources Objects Metadata Spec and Status Typical status properties References to related objects Lists of named subobjects preferred over maps Primitive types Constants Unions Lists and Simple kinds Differing Representations Verbs on Resources PATCH operations Idempotency Optional vs. Required Defaulting Late Initialization Concurrency Control and Consistency Serialization Format Units Selecting Fields Object references HTTP Status codes Success codes Error codes…

haproxy+keepalived配置示例

在非云环境中,要实现服务的高可用和负载功能一般会使用haproxy+keepalived方案,通过使用vrrp管理vip地址的的自动漂移,以及通过haproxy实现服务的负载功能。除了vrrp协议,还需要确保我们的主机网络中支持无偿arp,以保证我们的路由器或其他主机能够正确的将vip地址解析到正确的mac地址。在下图中,采用两个服务器安装keepalived+haproxy进行主备部署,后面有三台独立的RS服务器,当然keepalived本身也可以和RS服务部署在同一台服务器上。 下面是针对haproxy的配置,我们要配置haproxy直接绑定的虚拟vip地址的话,需要开启ip_nonlocal_bind这个配置项,如果监听的是0.0.0.0地址的话就无所谓: [root@master3 ~]# echo net.ipv4.ip_nonlocal_bind=1 /etc/sysctl.d/haproxy-keepalived.conf [root@master3 ~]# sysctl -p /etc/sysctl.d/haproxy-keepalived.conf [root@master3 ~]# cat /etc/haproxy/haproxy.cfg #--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done…

k8s调研学习方向

网络 flannel/calico 组网和calico的ipam的实现 cilium 全面了解这个网络插件 metallb 全面了解这个网络插件,底层实现 kube-proxy 主要关注iptables规则,ipset和ipvs的使用 存储 csi 关注这个接口的具体定义实现 juicefs 关注源码层面的原理 glusterfs 试用与了解 minio 源码级研究 etcd 源码级研究 核心组件 kube-apiserver 主要关注存储的实现,性能与横向扩展 kubelet 主要关注底层创建pod的完整流程,包括cgroup,存储,cri,网络配置等 kube-scheduler 主要看调度的整体流程,以及基于批的调度实现 扩展组件 client-go 关注list-watch机制,informer原理,apiserver端的实现 operator和controller-runtime库,以及自己实现一个operator,并支持api多版本…

linux配置多级服务器登录和隧道映射

通常,办公环境的电脑无法直接连接到开发测试服务器,往往需要进行多次ssh跳转。这时可通过配置ssh支持自动跳转登录功能。假设有2台服务器A和B在我们的开发测试环境中,本地我们只能连接到A服务器,而A服务器可以连接到B服务器。编辑~/.ssh/config文件,输入下列内容: Host serverA User root HostName 10.1.2.3 IdentityFile /home/myusername/.ssh/id_rsa Port 22 Host serverB User root HostName 192.168.1.3 IdentityFile /home/myusername/.ssh/id_rsa port 22 ProxyJump serverA 此时,在本地即可通过ssh serverB直接连接到服务器B的ssh服务。如果要使用免密方式进行登录。则需要执行ssh-copy-id root@serverA和ssh-copy-id root@serverB进行配置免密。 在进行了这样的配置之后,我们也可以更加方便的建立隧道来使用了。比如在服务器上有一个8080的http服务,想要在本地浏览器里访问。那么,可以执行下列命令建立隧道: ssh -Nf -Llocalhost:8080:192.168.1.3:8080 serverB 此命令会将serverB上的8080端口映射到本地的8080端口上,在浏览器中我们只需要输入http://localhost:8080可以访问到serverB上的web服务。 同样,也可以通过-R选项将本地端口映射到serverB的某个端口上,比如在微信公众号开发测试的时候,可以将配置在公众平台的服务器地址上的服务映射到本地。 为了避免网络连接中断导致隧道断开连接,可以使用systemd来保活,隧道进程退出后自动将其拉起: # cat /lib/systemd/system//my-http-proxy.service [Unit] Describe=my nginx agent After=network.target [Service] LimitNOFILE=10000 Type=simple User=root Group=root ExecStart=/usr/bin/ssh -oExitOnForwardFailure=yes -oPubkeyAuthentication=yes -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oServerAliveInterval=5 -oServerAliveCountMax=3 -Llocalhost:8080:localhost:8080 -N root@serverB Restart = always RestartSec = 1s StartLimitInterval = 0 [Install] WantedBy=network.target 执行systemctl…

timescaledb性能测试

link:https://github.com/timescale/timescaledb[timescaledb]是postgresql数据库的一个插件,通过hypertable实现对时间序列数据库进行分块,通过把大表分为多个小表的方式,新的数据总是插入到最新的块上,由于进行了分块,使得索引数据变小,保持索引一直处于内存当中,不用去磁盘交换数据,因此加快了数据的插入速度。timescaledb官方提供了数据库性能测试工具和数据,可参考link:https://github.com/timescale/benchmark-postgres[benchmark-postgres]。 官方也有link:https://blog.timescale.com/timescaledb-vs-6a696248104e[测试报告],随着数据量的增加,数据插入的性能一直处于稳定状态,而相比之下,postgresql则表现为指数级下降。 本测试采用官方提供的数据和程序,测试环境为阿里云ecs.g5.large云服务器,具体配置如下: * 2核cpu * 8GB内存 * 两块100GB ssd云盘,1800 IOPS * 系统为Debian 9.2 ## 测试步骤: 分别挂在两块ssd云盘到/data和/data1。 安装postgresql-9.6,安装timescaledb扩展。修改配置,修改配置: ```ini shared_preload_libraries = 'timescaledb' data_directory = ‘/data/pgdb’ shared_buffers = 2GB ``` 保存后重启postgresql。具体步骤参考相应的文档。 下载官方提供的link:https://timescaledata.blob.core.windows.net/datasets/benchmark_postgres.tar.bz2[数据]并解压到/data1目录下,cpu-data.csv中包含1亿条数据,每条数据格式如下: ```shell 2016-01-03 23:59:30+00,host_1999,80.6521114433705,60.9865370795396,38.7496729040943,11.5620089238801,47.2124408432341,82.4793308352443,41.6463534391737,85.2477509705689,53.843722695106,52.3795963946359 ``` 下载测试程序,安装go环境,并编译3个程序,并将测试程序拷贝到/data1目录下。 创建benchmark数据,并初始化cpu_ts和cpu_pg表: ```shell postgres@debian:/data1$ psql -c 'CREATE DATABASE benchmark;' postgres@debian:/data1$ psql -d benchmark benchmark-setup-timescaledb.sql postgres@debian:/data1$ psql -d benchmark benchmark-setup-postgresql.sql ``` 分别想cpu_pg和cpu_ts数据库插入数据: ``` postgres@debian:/data1$ ./copy --db-name=benchmark --table=cpu_pg --verbose --reporting-period=30s --file=cpu-data.csv --connection='host=localhost user=postgres password=postgres' postgres@debian:/data1$ ./copy…

reStructuredText标记语言参考规范

译自http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html reStructuredText是纯文本格式,采用简单直观的结构表示结构化的文档。这些结构很容易阅读和处理。本篇文档本身就是reStructuredText例子。reStructureText解析器是Docutils的一个组件。 用简单,隐式的标记来表示特殊的结构,如节标题,无序列表和强调。使用的标记尽可能的简单和恰当。不经常使用的标记可能会比较复杂或有明确的标记。 reStructuredText既可以应用于篇幅较小的文档(如内联程序文档,如python文档),也可一个用于篇幅很长的文档(如本文)。 第一部分通过例子来展示一些reStructuredText基本语法,然后会给出详细的语法规范。 本篇文章通过文本块来展示示例。 内容 语法概览 语法详细 空白字符 空行 缩进 转义机制 引用名称 文档结构 文档 节 转换 主体元素 段落 无序列表 有序列表 定义列表 字段列表 书目字段 RCS关键字 选项列表 文本块 缩进文本块 引用文本块 行块 块引用 Doctest块 表格 网格表格 简单表格 显示标记块 脚注 自动编号脚注 自动符号脚注 手动和自动编号混合脚注 引文 链接目标 匿名链接 指令 替代定义 注释 隐士链接目标 内联标记 内联标记识别规则 识别顺序 字符级内联标记 强调 着重强调 解释文本 内联文本 超链接引用 嵌入式URI和别名 内联内部目标 脚注引用 引文引用 替代引用 标准超链接 单位 长度单位 百分比单位 错误处理 语法概述 reStructuredText文档由主体或块级元素构成,还可以结构化为节。节是根据标题样式(下划线和可选的上划线)决定的。节包含主体元素和/或子节。主体元素包含更多的元素,如列表项,段落和其他主体元素。其他的,例如段落包含文本和内联标记元素。 下面是一些主体元素示例:…

阿里云发送短信 python3实现

import uuid import datetime import hmac import base64 import requests from urllib.parse import urlencode, quote class AliyunSMS(object): def __init__(self, app): self.app = app self.format = app.config.get("ALIYUN_API_FORMAT") or "JSON" self.version = "2016-09-27" self.key = app.config["ALIYUN_API_KEY"] self.secret = app.config["ALIYUN_API_SECRET"] self.signature = "" self.signature_method = "HMAC-SHA1" self.signature_version = "1.0" self.signature_nonce = str(uuid.uuid4()) self.timestamp = datetime.datetime.utcnow().isoformat("T") self.region_id = app.config["ALIYUN_API_REGION_ID"] self.gateway = app.config["ALISMS_GATEWAY"] self.action = "" self.sign = "" self.template = "" self.params = {}…

jabberd2认证配置之mysql配置

jabberd2自带了的authreg支持mysql、sqlite、ldap、pipe等方式。通常情况下,你有一个网站为用户提供服务,用户在你的网站注册了,用户名和密码信息存储在网站服务器的数据库中。而现在你用jabberd2为用户搭建了一个xmpp聊天服务器,并且希望你的用户能够通过在你的网站上注册的用户名和密码登录聊天服务器,而不是在聊天服务器上创建新用户,那么你可以使用jabberd2自带的authreg_mysql模块。要使用authreg_mysql模块,你需要在c2s.xml的mysql节修改或添加如下配置: <mysql> <!-- 数据库服务器的地址和端口 --> <host>localhost</host> <port>3306</port> <!-- 数据库名 --> <dbname>jabberd2</dbname> <!-- 数据库用户和密码 --> <user>jabber</user> <pass>jabber</pass> <!-- table_name为数据库中存储用户表的表名 --> <table>table_name</table> <field> <!-- username_field为表中用户名字段 --> <username>username_field</username> <!-- password_field为表中密码字段 --> <username>password_field</username> <!-- realm_filed,c2s.xml中配置的realm --> <username>realm_filed</username> </field> </mysql> 如果你的用户表中,没有关于real的字段,所有的用户属于同一区域下,你可以使用下面这种配置: <mysql> <!-- 数据库服务器的地址和端口 --> <host>localhost</host> <port>3306</port> <!-- 数据库名 --> <dbname>jabberd2</dbname> <!-- 数据库用户和密码 --> <user>jabber</user> <pass>jabber</pass> <sql> <!-- 替换_password,_usertable,_username,_realm为真实的名称,_realm与c2s.xml中配置的相同 --> <select>select `_password` from `_usertable` where `_username` = '%s' and '%s' = '_realm'</select> </sql> </mysql> 更多信息请参考https://github.com/jabberd2/jabberd2/blob/master/storage/authreg_mysql.c。…

openvpn systemd 配置

[Unit] Description=OpenVPN Service [Service] Type=forking ExecStartPre=/sbin/iptables-restore /etc/iptables-save ExecStart=/usr/sbin/openvpn --cd /etc/openvpn --config /etc/openvpn/server.conf --daemon [Install] WantedBy=multi-user.target…

TCP粘包处理

[Docs] [txt|pdf] [Tracker] [Email] [Nits] Versions: 00 INTERNET-DRAFT C. Sapuntzakis Cisco Systems <draft-csapuntz-tcpmsgbnd-00.txtAugust 2000 Expires February 2001 TCP Message Boundary Option Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents…