📅 2017-08-01
Prometheus官方提供了mysqld_exporter,我们直接使用即可。
在每个要监控的MySQL中创建监控用户并授予权限。
1CREATE USER 'exporter'@'127.0.0.1' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
2GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'127.0.0.1';
3flush privileges;
mysqld_exporter也是用Go语言写的,安装十分简单,我们的环境MySQL有3个节点,使用ansible部署mysqld_exporter。
这里贴一下其中一个MySQL节点上生成的systemd的单元文件:
...📅 2017-07-29
我们线上环境当前的Kubernetes版本为1.6.7,这里整理kubelet的启动参数,并根据我们线上使用情况做一个整理。
kubelet的启动参数
#
根据官方文档kubelet,当前kubelet启动参数如下:
--address ip
kubelet绑定的主机IP地址,默认为0.0.0.0表示绑定全部网络接口--allow-privileged
是否允许以特权模式启动容器。当前默认值为false--anonymous-auth
是否启用kubelet server的匿名访问,默认为true,表示启用匿名访问。对于匿名请求将认为其用户名为system:anonymous,所属的组为system:unauthenticated--authentication-token-webhook
使用TokenReview API来进行token认证--authentication-token-webhook-cache-ttl duration
webhook token认证缓存响应时长,默认值2m0s--authorization-mode string
kubelet server的认证模式,可以选择AlwaysAllow或者Webhook,如果选择为Webhook将使用SubjectAccessReview进行授权。默认值为AlwaysAllow--authorization-webhook-cache-unauthorized-ttl duration
授权模式为Webhook时,已被授权内容的缓存时长,默认值为5m0s--authorization-webhook-cache-unauthorized-ttl duration
授权模式为Webhook时,未被授权内容的缓存时长,默认值为30s--cadvisor-port int32
本地cAdvisor监听的端口号,默认为4194--cert-dir string
TLS证书目录,如果设置了–tls-cert-file和–tls-private-key-file,这个选项将被忽略。默认值为/var/run/kubernetes--cgroup-driver string
kubelet操纵cgroups的驱动,可以选择cgroupfs或systemd。默认值为cgroupfs-cgroup-root string
为pods设置的root cgroup,如果不设置,将使用容器运行时的默认设置。默认值为""-cgroups-per-qos
是否启动QoS级的CGroups支持,如果启用kubelet会自动创建顶级的cgroup来控制Node节点的可分配性,更好的保证QoS。默认值为true--chaos-chance float
随机产生客户端错误的概率,仅用于测试场景,默认值为0,即不产生客户端错误--cloud-config string
云服务商配置文件路径,默认值为""--cloud-provider string
云服务商名称,默认值为"auto-detect"表示自动检测,设置为空表示无云服务商--cluster-dns stringSlice
集群内DNS服务的IP地址--cluster-domain string
集群的域名--cni-bin-dir string
CNI插件可执行文件目录,默认值为"/opt/cni/bin"--cni-conf-dir string
CNI配置文件目录,默认值为"/etc/cni/net.d"--container-runtime string
容器运行时类型,当前可选值为"docker"或"rkt",默认值为"docker"--container-runtime-endpoint string
容器运行时服务的endpoint地址,当前在Linux上支持unix socket,默认值为"unix:///var/run/dockershim.sock"--containerized
是否将kubelet运行在容器中,仅测试场景使用,默认值为false--cpu-cfs-quota
是否启用 CPU CFS quota,用于设置容器的CPU限制,默认值为true--docker-endpoint string
docker服务的务的endpoint地址,默认值为"unix:///var/run/dockershim.sock"--enable-controller-attach-detach
是否启用Attach/Detach Controller进行调度到该Node的volumed attach与detach操作,同时禁用kubelet执行attach、detach操作。默认值为true--enable-custom-metrics
是否启用采集自定义性能指标--enable-debugging-handlers
是否启用提供远程访问本节点容器的日志、进入容器执行命令等相关的Rest服务。默认值为true--enable-server
是否启用kubelet server,即启动kubelet上的http rest server,此server提供了获取本节点上Pod信息以及其他管理监控相关的rest接口。默认值为true--event-burst int32
临时允许Event记录突发的最大数量,当event-qps>0时生效。默认值为10--event-qps int32
设置大于0的值表示限制每秒能创建的Event数量,设置为0表示不限制。默认值为5--eviction-hard string
触发Pod Eviction操作的一组硬阀门设置,例如可以设置"memory.available<1Gi"。默认值为"memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%"-eviction-max-pod-grace-period int32
终止Pod操作给Pod自行停止预留的时间,单位为秒。时间达到将触发Pod Eviction操纵。设置为负数表示将使用Pod中指定的值--eviction-pressure-transition-period duration
kubelet触发Pod eviction之前等待的最长时间,默认值5m0s--eviction-soft string
触发Pod Eviction操作的一组软阀门设置,当Pod的响应时间超过grace-period后触发。例如"memory.available<1.5Gi"-eviction-soft-grace-period string
触发Pod Eviction操作的软阀门的等待时间设置。例如"memory.available=1m30s"--exit-on-lock-contention
设置为true时表示当有文件锁存在时,kubelet也可以退出--file-check-frequency duration
在File Source作为Pod源的情况下,kubelet定期检查配置文件变化的时间间隔,文件发生变化后,kubelet重新加载文件内容。默认值为20s--google-json-key string
用于Google Cloud Platform的Service Account进行鉴权的JSON key--hairpin-mode string
设置hairpin模式,即kubelet设置hairpin NAT的方式。该模式允许后端Endpoint在访问本身Service时能够再次loadbalance回本身。可以设置的值包括: “promiscuous-bridge”, “hairpin-veth"和"none”。默认值为"promiscuous-bridge"--hostname-override string
设置当前Node在集群中的名称,如果不设置将使用本机的hostname--http-check-frequency duration
在HTTP URL Source作为Pod源的情况下,kubelet定期检查URL返回内容是否有更新的时间周期,默认为20s--image-gc-high-threshold int32
镜像垃圾回收上限,当磁盘使用空间达到该百分比时,镜像垃圾回收将持续工作。默认85- __
--image-gc-low-threshold int32__
镜像垃圾回收下限,在磁盘使用空间到达该百分比之前,镜像垃圾回收不会启用。默认80 --kube-api-burst int32
发送到API Server的每秒请求数量,默认为10--kube-api-content-type string
发送到API Server的请求的Content-type,默认为application/vnd.kubernetes.protobuf--kube-api-qps int32
与API Server通信的QPS值,默认值为5--kube-reserved mapStringString
Kubernetes系统预留的资源配置,以一组ResourceName=ResourceQuantity的格式进行配置,例如"cpu=200m,memory=500Mi, storage=1Gi",详见http://kubernetes.io/docs/user-guide/compute-resources。默认值为空--kubeconfig string
kubeconfig配置文件路径,在该配置文件中包含Master地址信息以及必要的认证信息--kubelet-cgroups string
可选的kubelet运行所需要的cgroups名称--lock-file string
kubelet使用的lock文件,Alpha特性--manifest-url string
为HTTP URL Source源类型时,kubelet用来获取Pod定义的URL地址,此URL返回一组Pod的定义。(静态Pod)--manifest-url-header string
访问manifest-url地址时使用的HTTP头信息,以key:value格式表示--max-open-files int
kubelet打开的最大文件数量。默认1000000--max-pods int32
kubelet所能运行的最大Pod数量,默认110--minimum-image-ttl-duration duration
不再使用的镜像在被清理之前的最小存活时间,超过此存活时间的镜像被标记为可被GC清理,默认值为2m0s--network-plugin string
自定义的网络插件名称,Pod生命周期中的一些事件都会调用此网络插件进行处理--node-ip string
设置当前Node的IP--node-labels mapStringString
kubelet注册当前Node时设置的Label,以key=value的格式表示,多个labe以逗号分隔--node-status-update-frequency duration
kubelet向Master汇报Node状态的时间间隔,它必须和controller-manager中nodecontroller的nodeMonitorGracePeriod一同工作。 默认值为10s--oom-score-adj int32
kubelet进程的oom_score_adj参数值,取值范围[-1000, 1000]。默认值-999--pod-cidr string
用于给Pod分配IP地址的CIDR地址池,仅在单机模式中使用。在一个集群中kubelet会从API Server获取CIDR设置--pod-infra-container-image string
Pod的pause镜像,默认值为gcr.io/google_containers/pause-amd64:3.0--pod-manifest-path string
为File Source源类型时,kubelet用来获取Pod定义的路径。(静态Pod)--pods-per-core int32
当前kubelet上每个core可运行的pod的数量。设置的值不能超过max-pods,设置为0则表示不限制--port int32
kubelet server监听的端口,默认值为10250--read-only-port int32
kubelet服务监听的“只读”的端口号,默认值为10255,设置为0表示不启用--really-crash-for-testing
设置为true表示发生panic时崩溃,仅用于测试--register-node
设置为true表示将当前Node注册到API Server,默认值为true--registry-burst int32
最多同时拉去镜像的数量,默认值为10--registry-qps int32
在Pod创建过程中容器的镜像需要从Registry拉取,由于拉取镜像的过程会消耗大量带宽,因此可能需要限速,此参数可与registry-burst一起使用来限制每秒拉取多少个镜像。如果设置为5,则表示每秒最多拉取5个镜像,如果为0则表示不限速。默认值为5--require-kubeconfig
如果设置为true,当存在配置错误时kubelet进程将退出,同时会忽略api-server参数,而优选kubeconfig file--resolv-conf string
命名服务配置文件,用于容器内应用的DNS解析,默认为/etc/resolv.conf--rkt-api-endpoint string
rkt API服务的URL,container-runtime为rkt时生效--rkt-path string
rkt二进制文件路径,未指定时从$PATH中查找,container-runtime为rkt时生效--root-dir string
kubelet运行的根目录,将保持Pod和volume的相关文件,默认值为/var/lib/kubelet--runonce
设置为true表示在创建完Pod后立即退出kubelet进程,域api-server和enable-server参数互斥--runtime-cgroups string
为容器运行时设置的cgroup-runtime-request-timeout duration
除了长时间运行的request,对其他request的超时设置,包括pull, logs, exec, attach等操作,当达到超时时间时,request会被取消掉。默认值为2m0s--seccomp-profile-root string
seccomp配置文件目录,默认为/var/lib/kubelet/seccomp--serialize-image-pulls
顺序pull镜像,默认值为true--streaming-connection-idle-timeout duration
容器中执行命令或进行端口转发的过程会产生输入输出流,该参数用来控制连接空闲时关闭的时间,默认4h0m0s--sync-frequency duration
同步正在运行的容器的配置的时间间隔,默认为1m0s--system-cgroups /
kubelet为运行非kernel进程设置的cgroup名称--system-reserved mapStringString
系统预留的资源配置,以一组ResourceName=ResourceQuantity的格式进行配置,如"cpu=200m,memory=500Mi",详见http://kubernetes.io/docs/user-guide/compute-resources。默认值为空--tls-cert-file string
x509证书文件路径,用于HTTPS认证--tls-private-key-file string
x509私钥文件路径--volume-plugin-dir string
搜索第三方volume插件的目录,默认值/usr/libexec/kubernetes/kubelet-plugins/volume/exec/--volume-stats-agg-period duration
kubelet计算所有Pod和Volume的磁盘使用情况的时间间隔,设置为0表示禁用此功能。默认值为1m0s
线上配置
#
根据线上Node配置的实际情况重点关注如下配置:
...📅 2017-07-27
最近需要把ProxySQL加入到Prometheus的监控目标里,因此需要先整理一下ProxySQL提供的监控信息。
ProxySQL内置的统计信息
#
我们先通过管理接口登录进入ProxySQL:
1mysql -u admin -P 6032 -p -h 127.0.0.1
1SHOW DATABASES;
2+-----+---------+-------------------------------+
3| seq | name | file |
4+-----+---------+-------------------------------+
5| 0 | main | |
6| 2 | disk | /var/lib/proxysql/proxysql.db |
7| 3 | stats | |
8| 4 | monitor | |
9+-----+---------+-------------------------------+
其中stats库中包含ProxysQL运行时抓取的统计信息:
...📅 2017-07-15
使用Grafana作为团队监控系统的图表组件,为了安全还需配置使用团队基于OpenLDAP的统一用户认证。
Grafana从2.1开始支持LDAP集成,但是在参考官方文档Grafana LDAP Authentication进行配置时遇到了一些问题,这里做一个简单的记录,便于后边查看。
...📅 2017-07-04
kubeadm是Kubernetes官方提供的快速安装和初始化Kubernetes集群的工具,目前的还处于孵化开发状态,伴随Kubernetes每个版本的发布都会同步更新。
当然,目前的kubeadm是不能用于生产环境的。
但伴随着Kubernetes每次版本升级,kubeadm都会对集群配置方面的一些实践做调整,通过实验kubeadm我们可以学习到Kubernetes官方在集群配置上一些新的最佳实践。
例如从Kubernetes 1.6开始kubeadm的目标就是可以快速初始化一个更加安全的Kubernetes集群,Kubernetes 1.6进入beat的RBAC,在这版的kubeadm就有了集成。
目前,我们一套Kubernetes 1.6环境的部署,就是先根据kubeadm中的配置实践整理,再编写成ansible role部署的:
...📅 2017-06-25
现在我们的Harbor使用前置的nginx接入,并在前置nginx上启用了SSL,Harbor的MySQL使用的是我们环境中高可用的MySQL GR集群。
为了我们的团队环境整合到一起,我们还需要为Harbor启用LDAP认证。
Harbor对LDAP支持的很好,只需要修改harbor.cfg:
...📅 2017-06-24
我们已经快速安装和启动了Harbor,接下来我们进一步探索一些定制化的配置:
- 安全上我们要启用https
- 默认安装的Harbor将数据Volume挂载到主机的/data目录,我们需要做一些定制,本篇我们将其挂载到主机的其他目录。后边为了实现Harbor的高可用,再继续探索将Registry的存储驱动切换为CephFS或S3。
- 将Harbor默认安装启动的mysql docker容器切换为外部的数据库, 我们的环境中已经有高可用的MySQL GR集群。后边我们再继续探索多个节点Harbor使用相同的外部高可用MySQL。
1.配置https访问
#
1.1 使用自签名证书
#
这里还是使用cfssl这个工具生成SSL证书和秘钥。
...📅 2017-06-23
我们一直使用Docker官方的Registry v2搭建我们的私有Docker镜像仓库。
最近我们打算使用Harbor这个VMware China开源的企业级镜像仓库,实际上Harbor以Docker官方的Registry为基础,在其上增加了管理UI、访问控制等企业用户需要的功能。
...📅 2017-06-15
本篇整理一下OpenLDAP 2.4的配置。
OpenLDAP 2.4有两种配置方式:
- 通过配置文件
slapd.conf
进行配置,这是旧版本的配置方式 - 通过修改配置数据库(cn=config),这是新的推荐的配置方式
这里我们学习cn=config的方式。cn=config实际上是将slapd.conf中的内容转换成ldif格式,并组成以cn=config
为根的目录树,这棵树会有很多节点,如下图所示:
...📅 2017-06-06
我们已经用ansible在新的环境中部署了etcd和docker,接下来使用ansible部署Kubernetes 1.6集群。
由于对ansible的使用已经没有什么问题了,因此本篇记录的侧重点是白话描述一下部署的具体步骤,以及部署过程踩的一些坑。
因为前段日子写过一篇《Kubernetes 1.6 高可用集群部署》,本次在编写ansible部署Kubernetes的roles时主要是一这篇文章里手动部署的过程为参考。
...