有人在嘗試使用Kubernetes嗎?
今年夏天Google開源了Kubernetes,號稱是用Go語言重寫的Google Borg分散式操作系統。我看知乎里不少人在關注Go語言,但是沒有看到關於Kubernetes的話題。大家開始嘗試Kubernetes了嗎?
16年在實習的時候, @王益 去知乎介(chui)紹過一波 《Kubernetes 和機器學習的故事》,當時聽完了就心裡長草。在此前我搞了兩年偽分散式,又一直想搞機器學習,感覺王益講的K8s來實現機器學習任務的實踐非常好,所以這個事情一直放在心裡沒擱下。
正好17年換了家公司,老大特別巧也想搞這個事情(估計Google出來的腦迴路都一樣),正好當時看到了Kubernetes 有一個正在合併的PR
NVIDIA GPU discovery, could support more than 1 GPU on 1 Minion, more than 1 GPU on 1 Pod. by Hui-Zhi · Pull Request #28216 · kubernetes/kubernetesGPU
是才雲(CaiCloud)的趙慧智的工作,當時看到了就自己把這個PR Patch到k8s上自己先行實驗了。
創業公司,幾台機器幾十塊GPU,在入職前已經有兩個 GPU Task 調度工具了,老大口味比較重,覺得不如用 kubernetes 實現調度,然後我們寫個界面就好了,正好我早就心裡長草想試試了。於是學習了兩星期k8s和Ceph,然後寫了兩星期,前後一個月拿出了可用的原型,大概長這樣
同志們很開心,再也不用搶卡了(雖然本來就不用搶的來著)一口氣跑十個任務不費勁。
這套系統修修補補用了小半年了,比(hai)較(suan),整天還是會出一點小故障,沒少坑隊友。不過到目前為止,這套系統還比較依賴 Ceph。
不過 kubernetes 確實好使啊,不用自己寫調度演算法,給他 GPU 需求,再給個 Image 和 Command,他自己跑起來,掛了自己重啟,爽歪歪。
後來 kubernetes 1.6 正式版發布的時候,已經正式添加了GPU 支持,這樣一來這個系統所有人都可以用了,所以老大準備近期把它開源(https://github.com/naturali/ktqueue),也算給這個社區做一點微小的貢獻。
當然老大腦子裡面還是又很多想法的,搞完顯卡任務隊列,老大又盯上MapReduce了,說這個Hadoop啊,不行。主要就是三部分,存儲,調度,計算框架,我們現在存儲有了Ceph,調度有了Kubernetes,計算框架我們自己搞一個出來嘛。我想:也就是你這麼叼,我可是個菜雞搞不定的。但是禁不止老大天天Push,硬著頭皮和另一個大神搞了起來,用Kubernetes 啟動 Worker 跑任務,用Ceph Rados 存中間文件,寫的比較爛,也就勉強可以跑了。但是我是一個臉皮厚的人,從一開始這個項目就是開源的(naturali/kmr)。
kubernetes 這個東西,社區現在非常活躍,只不過不知道為什麼,在國內沒什麼動靜。
當然,我們的線上服務一年前就是 Kubernetes了,雖然坑多,但是這是正確的道路,值得走下去。
我提這個問題一年半了。這期間得知國內的阿里雲、華為雲和新浪都有團隊在琢磨使用Kubernetes。原來在CoreOS工作的幾位Kubernetes源碼的貢獻者去年下半年回國創業,在推行Kubernetes。我自己也在分散式機器學習工作中嘗試使用Kubernetes,並且最近在CMU計算機系Course 18645上介紹了我對Kubernetes的用法和理解:分散式機器學習的故事:Kubernetes和通用機群 - Occam"s Razor - 知乎專欄
第一次回答我們是一個小公司,從15年7月份就開始試用kubernetes 1.0,當時對其理解不深,很多東西都慢慢摸索,後來我們將其弄到阿里雲上,踩了很多坑。。。不過還是成功跑起來了,然後逐步把我們的生產環境都跑到了上面,然後由於需要,第一次升級kubernetes到1.2的時候傻逼了,因為我們測試和生產是部署到同一個集群裡面的,只不過加了區分的標籤,結果當時死活升級不成功,一整天生產環境都不能訪問,後來總算找到原因更新成功。最近我們升級到1.5的時候再次傻逼了,kubernetes在1.4的時候文檔使用的net是weave,我們在1.5的時候也使用了weave,但是在阿里雲上又是各種不成功,最後我們找到了一篇阿里雲上部署到centos的文檔,才發現是IP網段的問題,給其他在阿里雲上部署也不成功的同學一點思路。使用kubeadm的時候需要指定 --pod-network-service=10.24.0.0/16, 同時 --api-advertise-addresses=內網IP,不然kubenetes默認獲取的是外網IP會走流量,然後在使用weave的時候不要直接apply -f https://git.io/weave-kube,需要先down下來改yaml文件,然後在第48行之後加上IPALLOC_RANGE 環境變數,並指定為其它的IP網段,比如172.32.0.0/12等,不然會和阿里雲的網關衝突。
sed -i "48a env:
- name: IPALLOC_RANGE
value: 172.32.0.0/12" weave-daemonset.yaml
之前在升級到1.4的時候我們發現需要將selinux關閉 setenforce=0 然後還需要修改kubelet服務的啟動參數 sed -i "5aEnvironment="KUBELET_EXTRA_ARGS=--node-ip=${LOCAL_IP} --hostname-override=${LOCAL_IP}" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 才能成功,1.5沒有驗證。總之每升級一次,就要被坑很多次,但是基本上都不是kubernetes本身的問題吧,一般都是在阿里雲上的兼容問題,目前升級到1.5.1之後非常穩定,再也沒有出過什麼錯。
出來不久的東西,必然坑多,現在我們公司正在利用kubernetes docker 和springcloud 搭建自己的微服務,新成立的公司沒有技術負債可以享用啥就用啥,不需要太酸爽。
我們自己寫了一個 Kubernetes,從實際效果來看,和這個開源版的「Borg"來比不差,某些地方更加適合我們自己的工作流。
英語流利說現在正在積極地使用,最主要的服務已經在上邊跑了幾個月了,還算穩定。優點是部署服務比較方便,方便我們構建微服務。但需要有配套的監控、日誌等方案來配合,監控我們用的 Prometheus,比較合適,日誌通過 fluentd 收集。還有一些坑點,比如之前 HPA 一直不 work,後來看了一些 k8s 源碼才定位到原因,之後希望可以分享出來。
現在肯定坑多,了解就好。
新浪微博的 Tim Yang 前幾天寫過一篇文章, Kubernetes , 目前只是他個人在嘗試,不過肯定也是想在生產環境上用上.
2015-02-17更新:新浪已經在生產環境中大規模使用docker了,見這條微博:我在docker-compose之間和Kubernetes之間選了後者,我覺得這樣才能充分發揮docker輕量化的優勢,讓軟體的每一個不可拆分的最小單元分布在一個docker上然後再用kubernetes調度。不過聲明一下這是個人用法,不一定是最佳方案。
坑居多,集群內一個pod出錯話會導致這個k8s DNS出錯,有什麼好的解決辦法嗎
試過,比較穩定,即將用於生產環境。
根據我這幾天的嘗試,只能說……想要穩定的跑起來,需要趟很多坑。我還在慢慢趟坑中……
有啊,很多,kubernetes將成為linux操作系統未來的通用資源調度平台,而docker只是作為資源封裝的box。
跟我一起學習kubernetes吧。
玩轉Kubernetes,我就看kubernetes handbook!
GitHub地址:https://github.com/rootsongjc/kubernetes-handbook
文章同步更新到gitbook,方便大家瀏覽和下載PDF。
我們就用它,不過現在k8的界面還不是很好,要是界面能有他功能一半豐富就好了
推薦閱讀:
TAG:分散式計算 | Go語言 | 大數據 | Kubernetes |