Kubernetes搭建 Helm 與 Swift 環(huán)境

helm

背景

上一篇文章簡單介紹了Kubernetes 單機版的開發(fā)測試環(huán)境minikube的搭建和環(huán)境配置,在很長的一段時間里面我也沒有搭建了,今天突然下了一個最新版,發(fā)現(xiàn)啟動啟動不了,于是又乖乖minikube 退回到了0.25.2版本,由于最近都在使用HelmSwift進行項目的部署發(fā)布,本文簡單記錄步驟.

概念

Helm

Helm是 k8s 集群部署和管理應用的一個包管理工具,使用Chart文件配置項目,隱藏了 k8s 本身的一些基本概念,具有版本回滾,方便升級的一些特性.
Helm分為客戶端和服務端,服務端tiller運行在 k8s 集群中,用戶管理和部署,更新 k8s集群中的應用,客戶端有 Kubernetes-helm的客戶端(命令行)工具,用于和服務端Tiller進行連接和通訊.

Swift

因為為了方便在代碼中間調(diào)用Helm的一些接口不是特別方便,例如tiller都是走grpc協(xié)議等,所以社區(qū)的小伙伴們開發(fā)了這么一個代理(Swift),封裝成為restful 的 http的接口形式,方便各種語言和tiller進行通信和操作.

搭建

本文 環(huán)境:
kubernetes 1.9.4
minikube 0.25.2
helm 2.12.1
swift 0.10.0
swift的版本需要和 helm 版本對應,參考https://github.com/appscode/swift

啟動 minikube 環(huán)境

minikube start  --kubernetes-version v1.9.4  --extra-config=apiserver.Authorization.Mode=RBAC
  • 必須開啟 RBAC 的權(quán)限的模式,否則后續(xù)安裝會有很多問題,比如默認的模式?jīng)]有cluster-admin的集群權(quán)限,無法安裝swift等.
  • 如果用 helm 安裝 swift 遇到這樣的問題,就是這個原因.
Error: release my-searchlight failed: clusterroles.rbac.authorization.k8s.io "my-searchlight" is forbidden: attempt to grant extra privileges: [PolicyRule{APIGroups:["apiextensions.k8s.io"], Resources:["customresourcedefinitions"], Verbs:["*"]} PolicyRule{APIGroups:["extensions"], Resources:["thirdpartyresources"], Verbs:["*"]} PolicyRule{APIGroups:["monitoring.appscode.com"], Resources:["*"], Verbs:["*"]} PolicyRule{APIGroups:["storage.k8s.io"], Resources:["*"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["secrets"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["secrets"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["componentstatuses"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["componentstatuses"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["persistentvolumes"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["persistentvolumes"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["persistentvolumeclaims"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["persistentvolumeclaims"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["pods"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["pods"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["pods"], Verbs:["patch"]} PolicyRule{APIGroups:[""], Resources:["pods"], Verbs:["watch"]} PolicyRule{APIGroups:[""], Resources:["nodes"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["nodes"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["nodes"], Verbs:["patch"]} PolicyRule{APIGroups:[""], Resources:["nodes"], Verbs:["watch"]} PolicyRule{APIGroups:[""], Resources:["namespaces"], Verbs:["get"]} PolicyRule{APIGroups:[""], Resources:["namespaces"], Verbs:["list"]} PolicyRule{APIGroups:[""], Resources:["namespaces"], Verbs:["patch"]} PolicyRule{APIGroups:[""], Resources:["namespaces"], Verbs:["watch"]} PolicyRule{APIGroups:[""], Resources:["pods/exec"], Verbs:["create"]} PolicyRule{APIGroups:[""], Resources:["events"], Verbs:["create"]} PolicyRule{APIGroups:[""], Resources:["events"], Verbs:["list"]}] user=&{system:serviceaccount:kube-system:tilleruser a61ce1ed-0a6d-11e9-babc-0800274b952b [system:serviceaccounts system:serviceaccounts:kube-system system:authenticated] map[]} ownerrules=[] ruleResolutionErrors=[clusterroles.rbac.authorization.k8s.io "cluster-admin" not found]
  • 用 k8s 1.9.4的原因在于,1.10.0沒有默認的kube-dns模塊了,有些不方便,而 swift 和 tiller 通信依賴 dns.
  • 和上文一樣配置一下代理,便于獲取一些墻外的資源.

Helm 客戶端安裝

brew install kubernetes-helm
helm version 

Kube-dns安裝

  • 等待kube-dns 安裝完成
kubectl get deployment -n kube-system --watch
  • 創(chuàng)建 serviceaccount 賬戶
 kubectl create serviceaccount kube-dns -n kube-system
  • kube-dns的 deployment設置關(guān)聯(lián)關(guān)系
kubectl patch deployment kube-dns -n kube-system -p '{"spec":{"template":{"spec":{"serviceAccountName":"kube-dns"}}}}'
  • 等待 dns 相關(guān) pods 啟動完成
kubectl get pods -n kube-system --watch
dns

部署 Tiller

  • Tiller 作為 Helm 的服務端,版本和客戶端保持一致.
  • 部署 Tiller 之前需要為 tiller 賦予 k8s 的操作權(quán)限,創(chuàng)建流程如下
$ kubectl create serviceaccount tiller --namespace kube-system
$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
$ helm init --service-account tiller
$ helm version --short
Client: v2.12.1+g02a47c7
Server: v2.12.1+g02a47c7
  • 等待 tiller 部署完成


    tiller

部署 Swift

  • 先為 helm 添加個 appscode 的倉庫
$ helm repo add appscode https://charts.appscode.com/stable/
$ helm repo update
$ helm repo list
NAME        URL
stable      https://kubernetes-charts.storage.googleapis.com
local       http://127.0.0.1:8879/charts
appscode    https://charts.appscode.com/stable/
  • helm中搜索 swift
$ helm search swift
NAME            CHART VERSION   APP VERSION DESCRIPTION
appscode/swift  0.10.0          0.10.0      Swift by AppsCode - Ajax friendly Helm Tiller Proxy
stable/swift    0.6.3           0.7.3       DEPRECATED swift by AppsCode - Ajax friendly Helm Tiller ...
  • 安裝 0.10.0
helm install appscode/swift --name my-swift
  • 檢查是否安裝完成
kubectl get pods --all-namespaces -l app=swift --watch
swift

測試

  • 獲取service 查看一下 ip 和端口
$ kubectl get svc swift-my-swift
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                          AGE
swift-my-swift   NodePort   10.107.55.194   <none>        9855:31743/TCP,50055:32523/TCP,56790:30092/TCP   3h58m
  • minikube ssh后進入 minikube 訪問,成功返回,說明已經(jīng) ok
$ curl  http://10.107.55.194:9855/tiller/v2/version/json
{"Version":{"sem_ver":"v2.12.1","git_commit":"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e","git_tree_state":"clean"}}
  • 上面 service 中其實默認的 Type 應該是Cluster IP,為了宿主機能夠訪問,改成了NodePort,方法:
kubectl patch svc swift -n kube-system -p '{"spec":{"type":"NodePort"}}'
  • 宿主機試一下
$ minikube ip
192.168.99.100
$ curl http://192.168.99.100:31743/tiller/v2/version/json
{"Version":{"sem_ver":"v2.12.1","git_commit":"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e","git_tree_state":"clean"}}%
  • dashborad查看


    dashboard

大功告成!

ps:剛開始啟動minikube 只用了minikube start折騰了半天.....

如何測試kube-dns是否在工作,參考官方案例
https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

相關(guān)的錯誤

  1. 無法解析內(nèi)部 dns
I1228 09:25:08.241821       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, TRANSIENT_FAILURE
I1228 09:25:08.243483       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, CONNECTING
W1228 09:25:28.242336       1 clientconn.go:1158] grpc: addrConn.createTransport failed to connect to {tiller-deploy.kube-system.svc:44134 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp: i/o timeout". Reconnecting...
I1228 09:25:28.242368       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, TRANSIENT_FAILURE
I1228 09:25:28.242629       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, CONNECTING
W1228 09:25:53.349620       1 clientconn.go:1158] grpc: addrConn.createTransport failed to connect to {tiller-deploy.kube-system.svc:44134 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp: i/o timeout". Reconnecting...
I1228 09:25:53.349990       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, TRANSIENT_FAILURE
I1228 09:25:53.350133       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, CONNECTING
W1228 09:26:32.635786       1 clientconn.go:1158] grpc: addrConn.createTransport failed to connect to {tiller-deploy.kube-system.svc:44134 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp: i/o timeout". Reconnecting...
I1228 09:26:32.635949       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, TRANSIENT_FAILURE
I1228 09:26:32.636553       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, CONNECTING
W1228 09:27:12.647474       1 clientconn.go:1158] grpc: addrConn.createTransport failed to connect to {tiller-deploy.kube-system.svc:44134 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp: lookup tiller-deploy.kube-system.svc on 10.96.0.10:53: read udp 172.17.0.4:58290->10.96.0.10:53: i/o timeout". Reconnecting...
I1228 09:27:12.647527       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, TRANSIENT_FAILURE
I1228 09:27:44.000042       1 pickfirst.go:71] pickfirstBalancer: HandleSubConnStateChange: 0xc00043da40, CONNECTING
W1228 09:28:08.235280       1 clientconn.go:830] Failed to dial tiller-deploy.kube-system.svc:44134: grpc: the connection is closing; please retry.
  1. 發(fā)現(xiàn) minikube 起來后,根本沒有kube-dnskube-dashborad,但是minikube addons list中這兩個卻是enabled的狀態(tài),參考解決方案https://github.com/kubernetes/minikube/issues/2619
    原理就是手動裝了kube-dns組件讓其正常工作.

參考

[1] https://github.com/appscode/swift/blob/master/docs/setup/rbac.md
[2] https://appscode.com/products/swift/0.10.0/guides/api/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悼院,一起剝皮案震驚了整個濱河市屡穗,隨后出現(xiàn)的幾起案子氓癌,更是在濱河造成了極大的恐慌,老刑警劉巖泞莉,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡岭佳,警方通過查閱死者的電腦和手機霞篡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門世蔗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朗兵,你說我怎么就攤上這事污淋。” “怎么了余掖?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵寸爆,是天一觀的道長。 經(jīng)常有香客問我盐欺,道長赁豆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任冗美,我火速辦了婚禮魔种,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粉洼。我一直安慰自己节预,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布属韧。 她就那樣靜靜地躺著安拟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宵喂。 梳的紋絲不亂的頭發(fā)上糠赦,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音樊破,去河邊找鬼愉棱。 笑死,一個胖子當著我的面吹牛哲戚,可吹牛的內(nèi)容都是我干的奔滑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顺少,長吁一口氣:“原來是場噩夢啊……” “哼朋其!你這毒婦竟也來了王浴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梅猿,失蹤者是張志新(化名)和其女友劉穎氓辣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱蚓,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钞啸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喇潘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体斩。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颖低,靈堂內(nèi)的尸體忽然破棺而出絮吵,到底是詐尸還是另有隱情,我是刑警寧澤忱屑,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布蹬敲,位于F島的核電站,受9級特大地震影響莺戒,放射性物質(zhì)發(fā)生泄漏伴嗡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一从铲、第九天 我趴在偏房一處隱蔽的房頂上張望闹究。 院中可真熱鬧,春花似錦食店、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗅定,卻和暖如春自娩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渠退。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工忙迁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碎乃。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓姊扔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梅誓。 傳聞我的和親對象是個殘疾皇子恰梢,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容