helm是kubernetes的包管理器承匣,可以管理k8s的各種資源,并利用charts描述文件做非常復雜的編排功能挂谍,可以說是各種有狀態(tài)發(fā)行軟件的安裝利器√途酰現(xiàn)在各大廠商都出了自身產(chǎn)品的helm安裝包酝惧,本文嘗試使用helm進行es集群的搭建
前提條件:一個可用的kuberenetes集群(1.10以上版本)
安裝helm
方式一:使用官方腳本一鍵安裝
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh
方式二:手動下載安裝(這里安裝目前最新的2.13.1版本)
#從官網(wǎng)下載最新版本的二進制安裝包到本地:https://github.com/kubernetes/helm/releases
# 解壓壓縮包
tar -zxvf helm-2.13.1.tar.gz
# 把 helm 指令放到bin目錄下
mv helm-2.13.1/helm /usr/local/bin/helm
helm help # 驗證
安裝Tiller
注意:先在 K8S 集群上每個節(jié)點安裝 socat 軟件(yum install -y socat ),不然會報錯伯诬,如果當初使用的kubeadm安裝的k8s晚唇,socat是自動安裝好的
Tiller 是以 Deployment 方式部署在 Kubernetes 集群中的,只需使用以下指令便可簡單的完成安裝盗似。
$ helm init
由于 Helm 默認會去 storage.googleapis.com 拉取鏡像哩陕,很可能訪問不了『帐妫可以直接去阿里云下載鏡像悍及,并打tag,鏡像地址為registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1
Tiller授權(quán)
k8s1.6版本以后默認使用RBAC授權(quán)模式号阿,需要添加賬號及角色才能使tiller正常訪問api-server
創(chuàng)建 Kubernetes 的服務帳號(tiller)和綁定角色(這里賦予cluster-admin角色)
$ kubectl create serviceaccount --namespace kube-system tiller
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
為 Tiller 這個deploy設(shè)置剛才創(chuàng)建的帳號
# 使用 kubectl patch 更新 API 對象
$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment.extensions "tiller-deploy" patched
驗證tiller是否安裝成功
[root@MiWiFi-R1CM-srv _state]# kubectl get po -n kube-system|grep tiller
tiller-deploy-7cb87ddf7d-274ph 1/1 Running 1 2d1h
[root@MiWiFi-R1CM-srv _state]# helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
更換倉庫
默認的charts倉庫在googleapi網(wǎng)站上并鸵,速度比較慢,這里我們更換為阿里云的charts倉庫
# 先移除原先的倉庫
helm repo remove stable
# 添加新的倉庫地址
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# 更新倉庫
helm repo update
執(zhí)行helm search
看一下目前可用的charts扔涧,現(xiàn)在還不多园担,但很多大名鼎鼎的中間件,比如rabbit mq
枯夜、mysql
弯汰、redis
、mangodb
等等都針對helm charts出了高可用版本湖雹,要知道這些中間件的集群搭建可是非常麻煩的咏闪,使用helm可以非常方便的一鍵搭建集群,并且還可以一鍵刪除(為啥不早五年出來摔吏。鸽嫂。。)征讲,以后有機會嘗試一下据某,這次我們要試驗的是elasticsearch集群的搭建。
搭建ES集群
es集群的具體介紹我這里就不展開了诗箍,簡單說是一個基于lucene的高效的分布式全文搜索引擎癣籽,在搜索領(lǐng)域有著十分廣泛的應用。之前弄好了helm環(huán)境滤祖,這邊的操作就十分簡單了筷狼,登陸es的官方helm charts倉庫https://github.com/elastic/helm-charts
按照里面的說明,添加repo源
helm repo add elastic https://helm.elastic.co
安裝
helm install --name elasticsearch elastic/elasticsearch --version 7.0.0-alpha1
執(zhí)行helm inspect
可查看各種helm的安裝參數(shù)匠童,每個參數(shù)都有詳細說明埂材,根據(jù)需要選擇即可
由于es的helm安裝的是statefulset(有狀態(tài)副本),里面用到了pvc俏让,所以還需要添加pv信息楞遏,否則pod是起不來的茬暇,因為我這邊只有一個虛擬機,所以使用的是hostpath方式的pv寡喝,實際生產(chǎn)還是要用Local Persistent Volume
或者掛載ceph糙俗、nfs這樣的外置存儲,pv文件如下
apiVersion: "v1"
kind: "PersistentVolume"
metadata:
name: "elasticsearch-master-elasticsearch-master-0"
spec:
capacity:
storage: "30Gi"
accessModes:
- "ReadWriteOnce"
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /root/esdata
這樣就聲明了一個name為elasticsearch-master-elasticsearch-master-0
的pv预鬓,容量為30G巧骚,掛載在本地的/root/esdata
目錄下
執(zhí)行
kubectl create -f local-pv.yaml
創(chuàng)建pv,完成后執(zhí)行
[root@MiWiFi-R1CM-srv ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
elasticsearch-master-elasticsearch-master-0 30Gi RWO Recycle Bound default/elasticsearch-master-elasticsearch-master-0 4d1h
可以看到狀態(tài)為BOUND
格二,綁定成功劈彪,這里是因為name相同,自動綁定到helm創(chuàng)建的同名pvc上去了顶猜。
這時候再執(zhí)行
[root@MiWiFi-R1CM-srv ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
elasticsearch-master-0 1/1 Running 0 89m
可以看到狀態(tài)都ok了沧奴,單節(jié)點的es集群搭建完成
這里面有一個問題,發(fā)現(xiàn)單節(jié)點的情況下长窄,一旦往集群內(nèi)寫入數(shù)據(jù)后滔吠,再刪除該pod,sts會重新分配一個pod起來挠日,名字還是叫elasticsearch-master-0疮绷,掛載目錄也不變,但是就無法加入集群嚣潜,不知道是否和es集群腦裂有關(guān)系冬骚,有懂的高人請指點一下
kibana安裝
kibana是es官配的ui圖形界面,功能十分強大懂算,這邊安裝也十分簡單只冻,直接執(zhí)行
helm install --name kibana elastic/kibana --version 7.0.0-alpha1
即可,集群默認會找http://elasticsearch-master:9200
的es集群计技,之前裝es的時候已經(jīng)設(shè)置過(通過k8s的service以及dns服務發(fā)現(xiàn))属愤,修改一下kibana的service默認配置,改成nodeport模式酸役,就可以通過瀏覽器直接訪問了