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發來的chart與config,合併生成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
匹配字段
logstash-*
@timestamp
最後點擊 create index pattern