helm,efk日誌系統

helm:存放配單清單的   chart圖表 chart倉庫node

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

chart--->releaselinux

 

helm:     git

核心術語github

chart: 一個helm程序包,部署清單的定義,包含資源關係,鏡像定義,並不包含鏡像,          golang

repository: chart倉庫,存放chart的,就是一個https/http服務器redis

release:特定的chart部署於目標集羣上的一個實例sql

chart -->configmap --> Relesedocker

      values.yamlapache

 

程序架構:

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 拖鏡像

helm 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.2.4"

image:

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

  tag: "6.3.1"  版本 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.3.1" 版本 與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

相關文章
相關標籤/搜索