OpenShift-Prometheus添加Alert-Rules
prometheus.yml配置中绑定alertmanager服务
1234567......alerting: alertmanagers: - scheme: http static_configs: - targets: - "localhost:9093"
prometheus.rules设置prometheus告警规则
12345678910...rules:- alert: TooManyPods expr: kuberlet_running_pod_count > 10 for: 2m labels: team: node annotations: summary: "{{$labels.instance}}: has {{$value}} pods" description: "{{$labels.instance}} be cateful ...
OpenShift-Router通过分片实现不同环境网络南北流量隔离
在企业实践中,通常会部署多个OpenShift集群:开发测试、生产等。每个集群都是独立的,通过物理资源进行隔离。这种方式管理简单,易于理解,但是消耗的资源更多,每个集群都需要额外的控制节点及运维节点。有没有办法,使不同环境运行在同一个集群上,并且它们之间实现隔离呢?答案是可以的。对于不同的环境,做好资源隔离,我们需要对计算资源——宿主机做好规划,同时还需要对网络做好规划。宿主机的隔离,可以通过给主机添加label的方法,规划pod的调度。本篇中,我们只针对网络Route部分做好开发测试环境与生产环境的隔离。
OpenShift集群Route分片机制大家都知道OpenShift管理南北流量是通过Route来实现的,所谓的Route本质就是一个Haproxy/Nginx服务,与K8S中的Ingress类似。默认情况下,OpenShift集群的Router是全局共用的,也就是说,在创建新的Route资源、Pod更新或者证书更新时,所有的OpenShift Router Pod都会更新Haproxy/Nginx的配置,并重新加载。所有的Route后台应用可以通过任一Rout ...
OpenShift-Router配置重新加载机制
OpenShift的Router是几乎所有南北流量的入口,对它的运行机制的了解非常重要,尤其是Router的配置更新加载机制。在服务请求出现异常情况下,我们能够快速分析出问题的原因,及时修复,保证应用的连续性。本章主要介绍OpenShift Router的配置加载机制。
OpenShift路由默认是基于Haproxy实现的。当Pod有更新或者证书更新等情况时会重新加载Haproxy的配置,来保证集群的路由信息是最新的。重载配置是否会对当前在线业务产生影响,这是系统管理员担心的问题。
一、 Haproxy配置重载的过程Haproxy在重新加载配置过程分两步。
生成最新的配置
重启Haproxy进程
Haproxy生成最新的配置OpenShift上以下三种资源的改变会触发Haproxy配置的更新
Routes改变
Pod IP/Endpoint 改变
证书改变
OpenShift Route有一个配置模板文件,最终的配置会根据这个模板文件来创建。该模板文件,默认路径为/var/lib/haproxy/conf/haproxy-config.template,也可以通过环 ...
OpenShift-Route会话保持与负载均衡策略
Route会话保持OpenShift Router是基于Haproxy反向代理实现的,客户端请求与后端应用POD通过cookie来实现会话保持。
默认是开启会话保持的,基于cookie的会话保持。
如果设置haproxy.router.openshift.io/disable_cookies为True,将会禁用基于cookie的会话保持,而使用balance的负载策略。
此过程分为两个阶段:第一次请求阶段、再次发起请求阶段
第一次请求阶段客户端发起第一次请求时,Router会给返回的数据中添加一条指定的cookie。
客户端请求到达Router节点。
Router节点通过默认的负载均衡策略选择后端应用POD。
后端应用POD返回数据到Router节点。
Router根据后端应用POD,给返回的数据包set-cookie: cookiename[HASH值]=cookievalue(HASH值),有效期为SESSION(浏览器客户端关闭前有效)。
再次发起请求阶段客户端再次发起请求时,会带上第一次Router设置的cookie,Router根据该cookie值选择对应的 ...
OpenShift-Route支持TCP负载均衡改造与使用
Route作为TCP负载均衡器的部署
获取当前Route的haproxy-template配置12345# oc project default# oc get podNAME READY STATUS RESTARTS AGErouter-16-5rv4q 2/2 Running 2 18h# oc rsh router-16-5rv4q cat haproxy-config.template > haproxy-config.template
编辑导出的haproxy-config.template文件在内容{{- end }}{{/*end tls==passthrough*/}}下一行,添加以下内容:1234567891011{{/*TCP support*/}}{{- if eq "tcp" (index $cfg.An ...
OpenShift-Service的域名
正常情况下Service的域名格式为:service-name.project-name.svc.cluster.local对应的IP是Service Cluster IP
设置Service的clusterIP=NoneService的域名格式为:service-name.project-name.svc.cluster.local对应的IP是后台对应的Pod的容器的IP同时后台对应的Pod都有DNS记录,格式为Pod-name.service-name.project-name.svc.cluster.local
OpenShift-云原生容器应用设计原则
引自:容器化应用的设计原则来源自RedHat云原生容器应用设计原则白皮书
本文来自于Red Hat咨询顾问Bilgin Ibryam所编写的一篇白皮书,名为《PRINCIPLES OF CONTAINER-BASED APPLICATION DESIGN》。这篇文章在作者的Blog上发表后,作者的twitter被Kubernetes官方twitter转发。白皮书在Red Hat官网的下载地址:https://www.redhat.com/en/resources/cloud-native-container-design-whitepaper 文本是对这篇文章的学习和整理。
先回顾经典的软件设计原则:
保持简单,愚蠢(KISS)
不要重复自己(DRY)
你不会需要它 (YAGNI)
关注点分离(SoC)
Single responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion (SOLID)
然后是Red Hat的云原生容器设计原则:
...
OpenShift-如何设置使用Prometheus来监控Router
OpenShift集群中的Router服务作为几乎所有南北流量的入口非常重要,对它的监控有很大的意义,既能够查看流量的变化,及时发现业务的变化,也可以发现异常请求及时发现问题。 红帽对于Router服务其实已经开启了监控指标的服务,但是默认并没有与Prometheus服务对接,需要手动对接,具体对接的操作如下。
获取Router应用的访问用户名与密码
1234$ oc set env dc/router -n default --list | grep STATSSTATS_PASSWORD=Oby3Y2FXs5STATS_PORT=1936STATS_USERNAME=admin
在prometheus项目下创建访问Router指标的密钥
1$ oc create secret generic router-auth --from-literal=user=admin --from-literal=password=Oby3Y2FXs5 -n openshift-monitoring
在openshift-monitoring项目下创建ServiceMonitor
1234567 ...
OpenShift-通过Operator-SDK制作Operator
制作Operator过程
下载安装operator-sdk
创建github仓库
operator-sdk创建应用12345$ operator-sdk new memcached-go-operator --repo=github.com/example-inc/memcached-operator$ # or$ operator-sdk new memcached-ansible-operator --api-version=fcloudy.com/v1alpha1 --kind=Memcached --type=ansible$ # or$ operator-sdk new memcached-helm-operator --api-version=fcloudy.com/v1alpha1 --kind=Memcached --type=helm
operator-sdk new默认使用的type为go,必须在$GOPATH目录下创建项目。type为go时项目的目录结构如下:项目的目录结构
type的可选值还可以为:ansible与helm,如果是这两个,则还可以带参数–kin ...
OpenShift-集群为项目提供专属节点
背景介绍在生产实践中,某些系统因一些特殊的要求,需要独占节点,即专属节点:具有特殊要求的应用POD必须运行在这些专属节点上;同时这些节点不为其它应用服务。本文将提供一种具体的配置策略,以满足这种特殊的调度需求。该策略主要使用到两种工具:
节点标签实现应用与节点的绑定
污点配置实现其它应用不会被调度到该节点。
设置步骤
为专属节点设置特定标签LABEL:dedicated=sys0,及设置污点12$ oc label node node-10 dedicated=sys0$ oc adm taint nodes node-10 dedicated=sys0:NoSchedule
在使用专属节点的应用编排中绑定的Node123456789101112spec: replicas: 1 template: metadata: name: nginx labels: app: nginx spec: nodeSelector: dedicated: "sys0" contain ...