二进制部署高可用Kubernetes集群
准备环境
本文所有使用的文件:
链接:https://pan.baidu.com/s/1vtDxA6K2BYT8fZYi8CiuQw提取码:sgfw
角色
IP
组件
master1
192.168.1.120
kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy、docker、etcd、nginx、keepalived
master2
192.168.1.123
kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy、docker、nginx、keepalived
node1
192.168.1.121
kubelet、kube-proxy、docker、etcd
node2
192.168.1.122
kubelet、kube-proxy、docker、etcd
负载均衡器
192.168.1.124192.168.1.100(虚拟vip)
初始化配置(master ...
解决Kubernetes的Pod与宿主机时区不同步问题
在Kubernetes集群运行的容器默认会使用UTC时间,即与北京时间会有8小时的时差,下面将给出几种方案解决容器与宿主机时区不一致问题。
通过volumes将时区文件挂到Pod中apiVersion: v1kind: Podmetadata: name: busyboxspec: containers: - name: busybox image: busybox imagePullPolicy: IfNotPresent command: - sleep - "3600" volumeMounts: - name: timezone mountPath: /etc/localtime volumes: - name: timezone hostPath: path: /usr/share/zoneinfo/Asia/Shanghai
查看容器的时区
[ ...
logstash收集java日志
与典型的单行日志不同,java异常日志有多行,而且他们并不总是完全统一的,因此,大多数grok规则都无法开箱即用,在大多数情况下,需要特殊的配置才能正确搜集异常日志。
匹配多行日志我们根据日期来匹配多行日期,也就是如果匹配到当前行不是以日期开头的,就将改行归类到前一个日期行
之前看到其他文章都是根据匹配空格来匹配多行,但是有的java日常日志会输出Cause by,Cause by那行并不是以空格开始的
2021-03-25 05:10:48,019 [http-nio-8080-exec-12] ERROR /api/getIndex.jsp - 系统出现异常sun.reflect.GeneratedMethodAccessor1281: 异常 at sun.reflect.GeneratedMethodAccessor1281.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja ...
Prometheus监控ElasticSearch
下载exporter下载地址:https://github.com/justwatchcom/elasticsearch_exporter/releases
tar zxvf elasticsearch_exporter-1.1.0.linux-amd64.tar.gzcd elasticsearch_exporter-1.1.0.linux-amd64cp elasticsearch_exporter /usr/local/bin# 启动nohup elasticsearch_exporter --es.uri=http://localhost:9200 --es.all --es.cluster_settings --es.indices --es.indices_settings --es.shards --es.snapshots >> logs/elasticsearch_exporter.log &
查看监控的指标
curl -s http://localhost ...
Prometheus监控MySQL
安装mysqld_exporter下载地址:https://github.com/prometheus/mysqld_exporter/
# 解压tar zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gzcd mysqld_exporter-0.12.1.linux-amd64cp mysqld_exporter /usr/local/bin
为exporter创建MySQL账号并授权# 登录mysql -uroot -p# 创建账号mysql> CREATE USER 'exporter'@'localhost' IDENTIFIED BY '123321';# 授权mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
为exporter账号配置免密连接
vim /usr/local/mysqld_expo ...
Prometheus使用BlackBox_exporter黑盒探测
在生产环境,我们肯定需要对我们的服务、端口等进行探测、监控和告警,以便第一时间获取服务的状态。blackbox_exporter提供icmp、tcp、udp、http等多种探针。
安装BlackBox_exporter下载地址:https://github.com/prometheus/blackbox_exporter
tar zxvf blackbox_exporter-0.18.0.linux-amd64.tar.gz# 启动cd blackbox_exporter-0.18.0.linux-amd64cp blackbox_exporter /usr/local/binnohup blackbox_exporter >> logs/blackbox_exporter.log &
配置Prometheus- job_name: icmp_probe metrics_path: /probe params: module: [icmp] static_configs: - targets: [ ...
为Prometheus配置安全认证
Prometheus的UI界面登录是没有认证,我们通过nginx basic添加认证机制
安装Nginx下载地址:http://nginx.org/en/download.html
# 编译tar zxvf nginx-1.16.0.tar.gzcd nginx-1.16.0./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modulemakemake install# 验证是否安装成功cd /usr/local/nginx./sbin/nginx -t
安装apache-htpasswd工具yum -y install httpd-tools
配置认证账号cd /usr/local/nginx/conf# 账号admin ,然后设置密码htpasswd -c ht.passwd admin
在nginx.conf配置
se ...
Kubernetes初始化容器
初始化容器(Init Container)是用来做初始化工作的,可以是一个或者多个,如果存在多个InitC,这些InitC会按照定义的顺序依次执行,只有所有InitC执行完毕后,主容器才会被启动。在一个Pod中,所有的容器都是共享数据卷和网络命名空间的,因此我们可以把一些初始化的操作交给InitC来完成。
示例创建一个busybox的Pod
apiVersion: v1kind: Podmetadata: name: busyboxspec: initContainers: - name: init-demo image: busybox imagePullPolicy: IfNotPresent command: - sh - -c - wget -O /workdir/index.html http://www.baidu.com volumeMounts: - mountPath: /workdir name ...
Kubernetes之Pod生命周期
本篇文章我们主要介绍Pod的生命周期。Pod遵循所定义的生命周期,在起始Pending阶段,如果Pod中primary容器中至少有一个开始运行,则其状态变为Running,然后再经过成功或失败阶段,主要取决于Pod中的任何容器是否因失败而终止。
Pod在其生命周期内仅仅只能被scheduled调度一次,一旦Pod被scheduled调度分配到某个Node节点后,该Pod将在Node上运行直到其停止或终止。在Pod运行的同时,kubelet能够重新启动容器以处理一些错误,在Pod中,Kubernetes会跟踪不同容器的状态,并且确定采取任何措施使Pod健康运行。
Pod寿命像各个应用程序容器一样,Pod的寿命也是相对短暂的,当创建一个Pod时,会为其分配一个唯一的ID(UID),并将其调度到最合适的Node,直到其终止或删除为止。如果此Node死掉,Kubernetes会在超时后删除该Node节点上的Pod。
Pod本身并不能自我修复,如果Pod被安排到节点然后失败,又或者缺少资源,都会导致Pod被删除。Kubernetes使用更高级的抽象,也就是控制器,使用Pod控制器管理一次性的Po ...
Kubernetes部署Consul集群
Kubernetes以Statefulset方式部署Consul集群
应用namespaceapiVersion: v1kind: Namespacemetadata: name: public-service labels: name: public-service
应用statefulset
需要先部署nfs storage class
apiVersion: apps/v1kind: StatefulSetmetadata: name: consul namespace: public-servicespec: replicas: 3 updateStrategy: type: RollingUpdate serviceName: consul selector: matchLabels: app: consul template: metadata: labels: app: consul spec: terminationGracePeriodSeconds: 10 ...