OpenShift-Master1彻底挂了,如何恢复?
小强维护着一套生成的OpenShift集群,突然有一天集群的master1节点出现异常,自动关机了。他尝试了多次,都无法开机,怎么办?他需要赶快恢复master1节点,来满足集群的高可用性。 原来的masters在ansible/hosts中的顺序如下 1234567891011121314[masters]master1 ## 重要主节点,安装完后单独保存/etc/etcd/ca中的证书master2master3[etcd]master1master2master3[nodes]master1master2master3 恢复过程如下: 新建一台 master1节点,hostname 与 IP 都和原 master1 节点一致 在master2上恢复master主节点的证书、ca.serial.txt及openshift软件。 通过新增 master 的方式将这个节点重新加回集群 通过新增 etcd 的方法,恢复了这台 master 节点 etcd 的状况 以下是恢复的具体步骤。 一、初始化Master节点 与部署机互信 开启selinux 关闭firew...
OpenShift-Prometheus使用集群外部Prometheus级联的方法实现多集群统一监控告警
背景大家知道OpenShfit官方通过Prometheus Operator可以快速构建高可用的监控告警平台,它不仅能够收集集群本身的监控指标,还可以通过ServiceMonitor扩展以监控应用自身的指标,实现单集群内部的统一监控。但是生产实践中,我们并不会只采用一个OpenShift部署应用,还会部署非容器应用,在非容器环境下也可能会部署Prometheus来监控相关服务(特别是现在Prometheus已经成为了监控的一个标配),甚至有可能会在不同的网络区部署多个集群,由于不同网络的隔离特性显然一组Prometheus是无法满足所有平台及应用的监控的。这就使得生产中会有很多套Prometheus集群需要管理与维护,查看监控指标也很分散,也就让我们想到必须采用一种办法能够将各处的指标统一收集,实现多集群多Prometheus服务的统一监控。目前实现这种要求的方法主要有两个,一个是通过Prometheus联邦 Federate,另一个是通过Thanos。今天主要介绍集群外部如何使用Prometheus联邦机制收集OpenShift内部Prometheus服务的监控指标。 操作实...
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后台应用可以通过任一R...
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 c...
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-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支持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...
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 ...
