helm,efk日志系统

Posted leiwenbin627

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了helm,efk日志系统相关的知识,希望对你有一定的参考价值。

helm:存放配单清单的   chart图表 chart仓库

chart,helm-->Tiller-->api server -->kube_cluster

chart--->release

 

helm:     

核心术语

chart: 一个helm程序包,部署清单的定义,包含资源关系,镜像定义,并不包含镜像,          

repository: chart仓库,存放chart的,就是一个https/http服务器

release:特定的chart部署于目标集群上的一个实例

chart -->configmap --> Relese

      values.yaml

 

程序架构:

helm:客户端,管理本地chart仓库,管理chart,Tiller服务器交互,用于发送chart,实例安装,查询,卸载等操作

Tiller:服务端  监听来自helm的请求,接收helm发来的chartconfig,合并生成release;

 

部署helm

https://github.com/helm/helm/releases/tag/v2.9.1

 mkdir helm && cd helm

tar xf helm-v2.9.1-linux-amd64.tar.gz && cd linux-amd64/

mv helm /usr/bin/

helm --help

 

部署Tiller

建议部署在k8s集群上

ls .kube/config kubectl的文件,能够被helm获取到

服务账号是tiller,需要很大权限,用clusterrolebing绑定在cluster-admin角色上

kubeadm安装方式强制启用了rbac

rbac文件:https://github.com/helm/helm/blob/master/docs/rbac.md

vim  tiller-rbac.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

  name: tiller

  namespace: kube-system

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: tiller

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

  - kind: ServiceAccount

    name: tiller

    namespace: kube-system

 

kubectl apply -f tiller-rbac.yaml

初始化helm

export NO_PROXY="172.20.0.0/16,127.0.0.0/8"

helm init --service-account tiller --upgrade --tiller-image=registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0

kubectl get pods -n kube-system pods是否运行起来了

vim ~/.helm/repository/repositories.yaml

url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts  修改远程charts仓库

 

使用helm

    source <(helm completion bash)  helm命令自动补全

helm  repo update  更新仓库

https://helm.sh 官方网站

https://hub.kubeapps.com 官方可用charts列表

helm repo list  查看可用仓库

helm search  列出可用charts

helm inspect stable/mysql 查看charts详细信息

            charts

 

安装运用

helm install --name mem1 stable/memcached

安装命名release   仓库名/安装的运用名

 

验证

kubectl get pods --namespace default -l "app=mem1-memcached" -o jsonpath=".items[0].metadata.name”

kubectl get pods

 

卸载运用

helm delete --help

helm delete mem1

 

查看release

helm list

helm list --all

 

滚动更新

helm upgrade

 

回滚

helm rollback

 

下载charts

helm fetch stable/mysql

 

release管理:install ,delete, upgrade/rollback ,list, histoty,status

charts管理: fetch,create,inspect,verify,package

 

每安装一个charts,都会下载 charts~ .helm/cache/archive/这个目录

 

values.yaml  定义默认值 修改默认值并单独引用这个文件,则会生效

cp values.yaml  ~

vim values.yaml

replicaCount: 2  修改部署节点数

helm install --name mem3 stable/memcached -f values.yaml

对于redis

persistence:

  enabled: false 关闭持久存储

  annotations:

prometheus.io/scrape: "true"  允许prometheus抓取数据

  

charts介绍

https://helm.sh/docs/developing_charts/#charts

helm dep up foochart 下载依赖关系的chart

templates and values

模板语法:https://golang.org/pkg/text/template/

模板实例

apiVersion: v1

kind: ReplicationController

metadata:

  name: deis-database

  namespace: deis

  labels:

    app.kubernetes.io/managed-by: deis

spec:

  replicas: 1

  selector:

    app.kubernetes.io/name: deis-database

  template:

    metadata:

      labels:

        app.kubernetes.io/name: deis-database

    spec:

      serviceAccount: deis-database

      containers:

        - name: deis-database

          image: .Values.imageRegistry/postgres:.Values.dockerTag  .Value表示来自values.yaml这个文件 一级字段或二级字段

          imagePullPolicy: .Values.pullPolicy

          ports:

            - containerPort: 5432

          env:

            - name: DATABASE_STORAGE

              value: default "minio" .Values.storage 如果在values.yaml没有设置storage这个key,就用这个默认值

 

对应的values.yaml

imageRegistry: "quay.io/deis"

dockerTag: "latest"

pullPolicy: "Always"

storage: "s3"

                                       

内建变量

Predefined Values

 

可以使用自定义的文件

wordpress这个charts组成如下

wordpress:

  Chart.yaml

  requirements.yaml

  # ...

  charts/

    apache/

      Chart.yaml

      # ...

    mysql/

      Chart.yaml

      # ...

 

charts/  表示wordpress依赖这个chart目录下的chart

helm install --values=myvals.yaml wordpress

         自定义模板参数或文件 安装wordpress这个chart

自定义chart

helm create myapp 自动生成myapp目录,即自动生成chart文件

myapp这个chart组成如下

myapp/

├── charts

├── Chart.yaml

├── templates

│   ├── deployment.yaml

│   ├── _helpers.tpl

│   ├── ingress.yaml

│   ├── NOTES.txt

│   └── service.yaml

└── values.yaml

 

vim Chart.yaml

apiVersion: v1

appVersion: "1.0"

description: A Helm chart for Kubernetes myapp chart

name: myapp

version: 0.0.1

maintainer:

- name: mageedu

  email: mage@126.com

  url: https://www.baidu.com

 

依赖其他charts的说明文件

vim requirements.yaml

 

cd templates/

NOTES.txt  release信息

 _helpers.tpl 模板文件语法帮助

 

vim values.yaml

replicaCount: 2 以下为改动的地方

image:

  repository: ikubernetes/myapp:v1

  tag: v1

resources:

  limits:

    cpu: 100m

    memory: 128Mi

  requests:

    cpu: 100m

    memory: 128Mi

 

模板值语法检查

helm lint ../myapp

 

打包成charts

helm package --help

helm package myapp/

           myapp目录打包 没写路径,默认放在当前目录myapp-0.0.1.tgz

 

在当前存放charts的目录开启helm仓库服务

helm serve

 

打开另一终端测试

helm search myapp

 

修改NOTE.txt以便能正确显示release安装后信息

 

测试helm安装

helm install --name myapp local/myapp

               release名  仓库名/charts

 

helm delete --purge myapp1

            删除release安装的pod同时也把release名也删除 这样release名就可以重复使用了

 

添加仓库

https://hub.kubeapps.com/charts/incubator

helm repo  add --help

helm repo  add stable1 https://kubernetes-charts.storage.googleapis.com

helm repo  add incubator https://storage.googleapis.com/kubernetes-charts-incubator

helm repo remove incubator  删除incubator仓库

 

EFK日志系统组件部署

部署elasticsearch

elasticsearch架构 data<-->master<--client

cd helm/

docker pull docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2 拖镜像

elm repo  add incubator https://storage.googleapis.com/kubernetes-charts-incubator

helm fetch incubator/elasticsearch

tar xf elasticsearch-1.10.2.tgz

cd elasticsearch/

vim values.yaml

appVersion: "6.4.2"

image:

  repository: "docker.elastic.co/elasticsearch/elasticsearch-oss"

  tag: "6.4.2"  版本 kibana版本一致

cluster:

  name: "elasticsearch"

    config:

    MINIMUM_MASTER_NODES: "1" 最少节点数

client:

  name: client

  replicas: 1 启用1个副本

master:

  name: master

  exposeHttp: false

  persistence:

enabled: false

  replicas: 1

data:

  name: data

  exposeHttp: false

  persistence:

enabled: false 关闭持久存储

  replicas: 1  根据node资源调整pod数量

 

kubectl create namespace efk

helm install --name els6 --namespace=efk -f values.yaml incubator/elasticsearch

 

els1-elasticsearch-client.efk.svc.cluster.local 服务访问入口

 

测试

kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh 开启一个pod和终端

curl els6-elasticsearch-client.efk.svc.cluster.local

curl els6-elasticsearch-client.efk.svc.cluster.local:9200/_cat/nodes  查看有多少个节点

curl els6-elasticsearch-client.efk.svc.cluster.local:9200/_cat/indices  查看生成多少索引

 

部署fluentd-elasticsearch 收集工具

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.3.2 拖镜像

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/fluentd-elasticsearch:v2.3.2 gcr.io/google-containers/fluentd-elasticsearch:v2.3.2 改镜像名

 

helm  fetch incubator/fluentd-elasticsearch

tar xf fluentd-elasticsearch-2.0.7.tgz && cd fluentd-elasticsearch/

elasticsearch:

  host: ‘els1-elasticsearch-client.efk.svc.cluster.local‘ 添加elasticsearch集群服务

podAnnotations:  添加被prometheus监控

  prometheus.io/scrape: "true"

  prometheus.io/port: "24231"

service:  添加监控的service

  type: ClusterIP

  ports:

    - name: "monitor-agent"

      port: 24231

tolerations:  添加master污点容忍

  - key: node-role.kubernetes.io/master

   operator: Exists

   effect: NoSchedule

helm install --name flu1 --namespace=efk -f values.yaml incubator/fluentd-elasticsearch

 

部署kibana

helm fetch stable/kibana

tar xf kibana-0.2.2.tgz

cd kibana/

vim values.yaml

image:

  repository: "docker.elastic.co/kibana/kibana-oss"

  tag: "6.4.2" 版本 与elasticsearch版本一致

service:

  type: NodePort

  ELASTICSEARCH_URL: http://els6-elasticsearch-client.efk.svc.cluster.local:9200

 

helm install --name kib1 --namespace=efk -f values.yaml stable/kibana

          release名   指定ns       指定自定义模板  仓库/charts

 

测试

kubectl get svc -n efk

kib1-kibana   NodePort  10.105.194.250   <none>  443:30240/TCP

http://192.168.81.10:30240

匹配字段

logstash-*

@timestamp

最后点击 create index pattern

以上是关于helm,efk日志系统的主要内容,如果未能解决你的问题,请参考以下文章

helm 安装EFK(Elasticsearch+Filebeat+Kibana)收集容器日志

openshift4 EFK日志系统

centos7搭建EFK日志分析系统

日志系统之 EFK vs. PLG Stack

k8s搭建EFK日志管理系统

#yyds干货盘点#K8S 之 EFK 日志管理系统