0%

问题说明

某一天收到报警,线上的Elasticsearch集群中的一台节点CPU达到了99%,查看Elasticsearch的其他节点CPU都是正常的,唯独这台服务器CPU久满不下。

如下图:

CPU alert

Elasticsearch 集群说明

生产Elasticsearch 集群配置:

  • 六台节点,其中数据节点为3台,两台master,1台client。
  • 版本:5.6.4

出问题的节点为node-3。

由于资源有限将两个节点放到了一台机器上。

role ip host port api transport hostname cpu mem disk
es master-1 172.x.x.38 da02 9221 9444 da02 4C 16G 500G
es master-2 172.x.x.221 da03 9221 9444 da03 4C 16G 500G
es clinet 172.x.x.37 da01 9220 9333 da01 4C 16G 500G
es node-1 172.x.x.37 da01 9221 9334 da01 4C 16G 500G
es node-2 172.x.x.38 da02 9220 9333 da02 4C 16G 500G
es node-3 172.x.x.221 da03 9222 9555 da03 4C 16G 500G
阅读全文 »

环境说明

  • Kubernetes 版本:1.13.5
  • Kubeadm 版本:1.14.1
  • Kubernetes HA集群,3台Master

总结

先上总结,快速查看。

  1. 备份/etc/kubernetes 目录;
  2. 更新证书文件:kubeadm alpha certs renew all –config=kubernetes/kubeadm-init.yaml;
  3. 更新配置文件:先删除,再更新:kubeadm init phase kubeconfig all –config=kubernetes/kubeadm-init.yaml;
  4. Kubernetes版本不同,上面两步的命令位置不同,具体见下方详细说明;
  5. 拷贝kubectl配置:cd ~/.kube && cp config{,.bak} && cp /etc/kubernetes/admin.conf ~/.kube/;
  6. 分别在所有Master节点上执行以上命令,而不能直接拷贝证书或者配置文件。
阅读全文 »

在最新版本的Windows中,已经可以使用WSL2了,对于忍受了很长时间的WSL1的速度的我,当然是升级到WSL2了。

WSL 2 的主要目标是提高文件系统性能并增加完全的系统调用兼容性,WSL 2 是对基础体系结构的一次重大改造,它使用虚拟化技术和 Linux 内核来实现其新功能。因为它采用的完整的Linux内核,所以例如Docker,Kubernetes都可以安装了。

WSL2官网文档:https://aka.ms/wsl2

WSL2 简介

参考:

https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-about

https://github.com/microsoft/WSL2-Linux-Kernel

阅读全文 »

在新版的Istio当中,官方已经不推荐用Helm的方式安装了(同时不支持Helm3),推荐用istioctl命令行的方式安装。所以这里记录istioctl的方式安装Istio。

环境说明

  • Amazon Linux 2 AMI,本身是基于CentOS 7
  • Kubernetes 1.16.4
  • Istio 1.4.2

安装Istio 1.4.2

下载 istio 1.4.2

$ wget -c "https://github.com/istio/istio/releases/download/1.4.2/istio-1.4.2-linux.tar.gz"
$ tar xf istio-1.4.2-linux.tar.gz
$ sudo mv istio-1.4.2/bin/istioctl /usr/local/bin
$ ls
bin install LICENSE manifest.yaml README.md samples tools

# 整体目录结构
$ tree -L 3 -F
.
├── bin/
│   └── istioctl*
├── install/
│   ├── consul/
│   │   ├── consul_config/
│   │   ├── README.md
│   │   └── templates/
│   ├── gcp/
│   │   ├── bootstrap/
│   │   └── README.md
│   ├── kubernetes/
│   │   ├── global-default-sidecar-scope.yaml
│   │   ├── helm/
│   │   ├── istio-demo.yaml
│   │   ├── mesh-expansion.yaml
│   │   ├── namespace.yaml
│   │   ├── operator/
│   │   └── README.md
│   ├── README.md
│   └── tools/
├── LICENSE
├── manifest.yaml
├── README.md
├── samples/
│   ├── bookinfo/
│   │   ├── networking/
│   │   ├── platform/
│   │   ├── policy/
│   │   ├── README.md
│   │   ├── src/
│   │   ├── swagger.yaml
│   │   └── telemetry/
│   ├── certs/
│   │   ├── ca-cert.pem
│   │   ├── ca-key.pem
│   │   ├── cert-chain.pem
│   │   ├── README.md
│   │   └── root-cert.pem
│   ├── custom-bootstrap/
│   │   ├── custom-bootstrap.yaml
│   │   ├── example-app.yaml
│   │   └── README.md
│   ├── external/
│   │   ├── aptget.yaml
│   │   ├── github.yaml
│   │   ├── pypi.yaml
│   │   └── README.md
│   ├── fortio/
│   │   └── stackdriver.yaml
│   ├── health-check/
│   │   ├── liveness-command.yaml
│   │   ├── liveness-http-same-port.yaml
│   │   └── liveness-http.yaml
│   ├── helloworld/
│   │   ├── helloworld-gateway.yaml
│   │   ├── helloworld.yaml
│   │   ├── README.md
│   │   └── src/
│   ├── httpbin/
│   │   ├── httpbin-gateway.yaml
│   │   ├── httpbin-nodeport.yaml
│   │   ├── httpbin-vault.yaml
│   │   ├── httpbin.yaml
│   │   ├── policy/
│   │   ├── README.md
│   │   └── sample-client/
│   ├── https/
│   │   ├── default.conf
│   │   └── nginx-app.yaml
│   ├── kubernetes-blog/
│   │   ├── bookinfo-ratings.yaml
│   │   ├── bookinfo-reviews-v2.yaml
│   │   └── bookinfo-v1.yaml
│   ├── multicluster/
│   │   └── README.md
│   ├── operator/
│   │   ├── pilot-advanced-override.yaml
│   │   ├── pilot-k8s.yaml
│   │   ├── sds-policy-off.yaml
│   │   ├── sds.yaml
│   │   ├── trafficManagement-namespace.yaml
│   │   ├── values-global.yaml
│   │   └── values-pilot.yaml
│   ├── rawvm/
│   │   └── README.md
│   ├── README.md
│   ├── security/
│   │   └── psp/
│   ├── sleep/
│   │   ├── policy/
│   │   ├── README.md
│   │   ├── sleep-vault.yaml
│   │   ├── sleep.yaml
│   │   └── telemetry/
│   ├── tcp-echo/
│   │   ├── README.md
│   │   ├── src/
│   │   ├── tcp-echo-20-v2.yaml
│   │   ├── tcp-echo-all-v1.yaml
│   │   ├── tcp-echo-services.yaml
│   │   └── tcp-echo.yaml
│   └── websockets/
│   ├── app.yaml
│   ├── README.md
│   └── route.yaml
└── tools/
├── convert_RbacConfig_to_ClusterRbacConfig.sh
├── dump_kubernetes.sh
├── _istioctl
├── istioctl.bash
└── packaging/
└── common/

44 directories, 68 files

# kubernetes install 目录
$ tree -L 4 -F install/kubernetes/
install/kubernetes/
├── global-default-sidecar-scope.yaml
├── helm/ # helm安装方式
│   ├── helm-service-account.yaml
│   ├── istio/
│   │   ├── charts/
│   │   │   ├── certmanager/
│   │   │   ├── galley/
│   │   │   ├── gateways/
│   │   │   ├── grafana/
│   │   │   ├── istiocoredns/
│   │   │   ├── kiali/
│   │   │   ├── mixer/
│   │   │   ├── nodeagent/
│   │   │   ├── pilot/
│   │   │   ├── prometheus/
│   │   │   ├── security/
│   │   │   ├── sidecarInjectorWebhook/
│   │   │   └── tracing/
│   │   ├── Chart.yaml
│   │   ├── example-values/
│   │   │   ├── README.md
│   │   │   ├── values-istio-dns-cert.yaml
│   │   │   ├── values-istio-example-sds-vault.yaml
│   │   │   ├── values-istio-gateways.yaml
│   │   │   ├── values-istio-googleca.yaml
│   │   │   ├── values-istio-meshexpansion-gateways.yaml
│   │   │   └── values-istio-multicluster-gateways.yaml
│   │   ├── files/
│   │   │   └── injection-template.yaml
│   │   ├── README.md
│   │   ├── requirements.yaml
│   │   ├── templates/
│   │   │   ├── _affinity.tpl
│   │   │   ├── clusterrolebinding.yaml
│   │   │   ├── clusterrole.yaml
│   │   │   ├── configmap.yaml
│   │   │   ├── endpoints.yaml
│   │   │   ├── _helpers.tpl
│   │   │   ├── install-custom-resources.sh.tpl
│   │   │   ├── NOTES.txt
│   │   │   ├── _podDisruptionBudget.tpl
│   │   │   ├── serviceaccount.yaml
│   │   │   ├── service.yaml
│   │   │   └── sidecar-injector-configmap.yaml
│   │   ├── test-values/
│   │   │   ├── README.md
│   │   │   ├── values-e2e.yaml
│   │   │   ├── values-istio-auth-mcp.yaml
│   │   │   ├── values-istio-auth-multicluster.yaml
│   │   │   ├── values-istio-auth-non-mcp.yaml
│   │   │   ├── values-istio-auth-sds.yaml
│   │   │   ├── values-istio-auth.yaml
│   │   │   ├── values-istio-dns-cert.yaml
│   │   │   ├── values-istio-mcp.yaml
│   │   │   ├── values-istio-multicluster-split-horizon.yaml
│   │   │   ├── values-istio-multicluster.yaml
│   │   │   ├── values-istio-non-mcp.yaml
│   │   │   ├── values-istio-one-namespace-auth.yaml
│   │   │   ├── values-istio-one-namespace-trust-domain.yaml
│   │   │   ├── values-istio-one-namespace.yaml
│   │   │   └── values-istio.yaml
│   │   ├── values-istio-demo.yaml
│   │   ├── values-istio-minimal.yaml
│   │   ├── values-istio-remote.yaml
│   │   ├── values-istio-sds-auth-control-plane-auth-disabled.yaml
│   │   ├── values-istio-sds-auth.yaml
│   │   └── values.yaml
│   ├── istio-cni/
│   │   ├── Chart.yaml
│   │   ├── templates/
│   │   │   ├── istio-cni.yaml
│   │   │   └── _labels.tpl
│   │   ├── values_gke.yaml
│   │   └── values.yaml
│   ├── istio-init/
│   │   ├── Chart.yaml
│   │   ├── files/
│   │   │   ├── crd-10.yaml
│   │   │   ├── crd-11.yaml
│   │   │   ├── crd-14.yaml
│   │   │   ├── crd-certmanager-10.yaml
│   │   │   └── crd-certmanager-11.yaml
│   │   ├── README.md
│   │   ├── templates/
│   │   │   ├── clusterrolebinding.yaml
│   │   │   ├── clusterrole.yaml
│   │   │   ├── configmap-crd-10.yaml
│   │   │   ├── configmap-crd-11.yaml
│   │   │   ├── configmap-crd-14.yaml
│   │   │   ├── configmap-crd-certmanager-10.yaml
│   │   │   ├── configmap-crd-certmanager-11.yaml
│   │   │   ├── job-crd-10.yaml
│   │   │   ├── job-crd-11.yaml
│   │   │   ├── job-crd-14.yaml
│   │   │   ├── job-crd-certmanager-10.yaml
│   │   │   ├── job-crd-certmanager-11.yaml
│   │   │   └── serviceaccount.yaml
│   │   └── values.yaml
│   └── README.md
├── istio-demo.yaml
├── mesh-expansion.yaml
├── namespace.yaml
├── operator/
│   ├── charts/
│   │   ├── base/
│   │   │   ├── Chart.yaml
│   │   │   ├── files/
│   │   │   ├── kustomization.yaml
│   │   │   ├── templates/
│   │   │   └── values.yaml
│   │   ├── gateways/
│   │   │   ├── istio-egress/
│   │   │   └── istio-ingress/
│   │   ├── istio-cni/
│   │   │   ├── Chart.yaml
│   │   │   ├── templates/
│   │   │   └── values.yaml
│   │   ├── istio-control/
│   │   │   ├── istio-autoinject/
│   │   │   ├── istio-config/
│   │   │   └── istio-discovery/
│   │   ├── istiocoredns/
│   │   │   ├── Chart.yaml
│   │   │   ├── templates/
│   │   │   └── values.yaml
│   │   ├── istio-policy/
│   │   │   ├── Chart.yaml
│   │   │   ├── templates/
│   │   │   └── values.yaml
│   │   ├── istio-telemetry/
│   │   │   ├── grafana/
│   │   │   ├── kiali/
│   │   │   ├── mixer-telemetry/
│   │   │   ├── prometheus/
│   │   │   ├── prometheus-operator/
│   │   │   └── tracing/
│   │   └── security/
│   │   ├── certmanager/
│   │   ├── citadel/
│   │   └── nodeagent/
│   ├── deploy/
│   │   ├── clusterrole_binding.yaml
│   │   ├── clusterrole.yaml
│   │   ├── crds/
│   │   │   ├── istio_v1alpha2_istiocontrolplane_crd.yaml
│   │   │   └── istio_v1alpha2_istiocontrolplane_cr.yaml
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── operator.yaml
│   │   ├── service_account.yaml
│   │   └── service.yaml
│   ├── examples/
│   │   ├── multicluster/
│   │   │   ├── values-istio-multicluster-gateways.yaml
│   │   │   └── values-istio-multicluster-primary.yaml
│   │   └── vm/
│   │   ├── values-istio-meshexpansion-gateways.yaml
│   │   └── values-istio-meshexpansion.yaml
│   ├── profiles/
│   │   ├── default.yaml
│   │   ├── demo.yaml
│   │   ├── minimal.yaml
│   │   ├── remote.yaml
│   │   └── sds.yaml
│   └── versions.yaml
└── README.md

60 directories, 106 files
阅读全文 »

继续上篇文章:[服务网格Istio系列]--非侵入的流量管理-1

Istio路由规则配置:VirtualService

VirtualService 是Istio流量治理的一个核心配置,可以说是Istio流量治理中最重要,最复杂的规则。

官网参考:https://istio.io/docs/reference/config/networking/virtual-service/#VirtualService

路由规则配置示例

示例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: forecast
spec:
hosts:
- forecast
http:
- match:
- headers:
location:
exact: north
route:
- destination:
host: forecast
subset: v2
- route:
- destination:
host: forecast
subset: v1
阅读全文 »

在之前的文章中介绍了:[服务网格Istio系列]--Istio架构介绍[服务网格Istio系列]--微服务 Kubernetes Istio关系,这里主要介绍Istio的非侵入的流量管理。

Istio流量治理的原理

流量治理是一个非常宽泛的话题,例如:

  • 动态修改服务访问的负载均衡策略,比如根据某个请求特性做会话保持;
  • 同一个服务有两个版本在线,将一部分流量切到某个版本上;
  • 对服务进行保护,例如显示并发连接数、限制请求数、隔离故障服务实例等;
  • 动态修改服务中的内容,或者模拟一个服务运行故障等;

在Istio中实现这些服务治理功能时无需修改任何应用的代码。较之微服务的SDK方式,Istio以一种更轻便、透明的方式向用户提供这些功能。只要应用运行在Istio的基础是设施上,就可以使用这些治理能力。

阅读全文 »

上篇文章中介绍了:[服务网格Istio系列]--微服务 Kubernetes Istio关系,这里主要介绍Istio的架构。

Istio的工作机制

Istio主要分为两部分:控制面和数据面;

控制面主要包括Pilot、Mixer、Citadel、Galley等组件;

pilot
英 /ˈpaɪlət/ 美 /ˈpaɪlət/ 全球(英国)
n. 飞行员;领航员
adj. 试点的
v. 驾驶;领航;试用
n. (Pilot)人名;(意、印)皮洛特;(法)皮洛
复数 pilots过去式 piloted过去分词 piloted现在分词 piloting第三人称单数 pilots

mixer
英 /ˈmɪksə(r)/ 美 /ˈmɪksər/ 全球(德国)
n. 混合器;搅拌器;[电子] 混频器

citadel
英 /ˈsɪtədəl; ˈsɪtədel/ 美 /ˈsɪtədəl,ˈsɪtədel/ 全球(美国)
n. 城堡;大本营;避难处
复数 citadels

galley
英 /ˈɡæli/ 美 /ˈɡæli/ 全球(英国)
n. [船] 船上的厨房;单层甲板的大帆船;活版盘,长条校样
n. (Galley)人名;(英)加利;(法、德)加莱
复数 galleys

envoy
英 /ˈenvɔɪ/ 美 /ˈenvɔɪ/ 全球(英国)
n. 使者;全权公使
复数 envoys

阅读全文 »

什么是服务网格?

简而言之,服务网格是服务(包括微服务)之间通信的控制器。随着企业的发展,越来越多的容器应用的开发和部署,尤其是微服务,一个企业可能有成百上千或上万的容器在运行,怎么管理这些容器或者微服务间的通信,包括服务间的负载均衡,流量管理,路由,运行状况监视,安全策略以及服务间身份验证,就成为了巨大的挑战。以Istio为代表的的服务网格应运而生,架构上istio属于云原生技术的基础设施层,通过在容器旁(Sidecar,边车)提供一系列网络代理,所有进出的流量都通过我(Envoy),来实现服务间的通信控制。其中每一个网络代理(Envoy)就是一个网关,管理容器或容器集群中每个服务间的请求与交互。每个网络代理还拦截服务请求,并将服务请求分发到服务网格上。众多服务构成的无数连接编制成网,也就有了网格这个概念。

阅读全文 »

在Kubernetes日志收集的系列文章里,我们分部介绍了:

最终的架构图如下所示:

架构说明:

  • 所有的beats,这里主要说明filebeat,都使用DaemonSet的方式安装的Kubernetes集群上,收集各个node节点的容器日志,并做简单的处理,例如多行等,然后将数据发送到Kafka集群中。
  • Kafka 集群这里主要安装在Kubernetes集群以外,负责解耦、缓冲beats发来的数据,同时也可以存储处理好的日志,作为中转站,方便其他需要后期处理日志的工具订阅数据。
  • Logstash 可以安装在Kubernetes集群内部或者外部,从kafka收集beat发来的日志,做一些处理,例如:geoip获取IP地址的地理位置,处理Useragent等,然后将处理好的日志clone一份,同时输出到Elasticsearch集群不同index和Kafka中不同的topic上,方便其他流处理工具进行后期的实时计算。如果日志量很大,单台logstash无法支撑,可以启动多台logstash,属于同一个消费者组,这里可以分担处理。注意:最大的logstash台数不要超过topic的partitions数量,否则,多出来的logstash也是闲置的。
  • Elasticsearch这里主要安装在Kubernetes集群以外,负责存储、查询、分析日志。
  • Kibana 可以安装在Kubernetes集群内部或者外部,通过web UI界面查看Elasticsearch数据,查询,并出图。
阅读全文 »

此Kafka集群为了日志收集这一套,之前安装了Elasticsearch Cluster:参考:安装Elasticsearch 7.4集群(开启集群Auth + Transport SSL)以及 Kibana & Keystore

FELK:

  • F Filebeat | Fluentd | Fluent-bit
  • E Elasticsearch
  • L Logstash
  • K Kibana

FELK兼容性:

阅读全文 »