爲何要用Kubernetes?

一、前言前端

  第一次接觸Kubernetes是在2016年,再一次瀏覽博文的時候,那是我第一次聽到Kubernetes這個名詞,也是第一次認識了k8s這麼一個東西。後來在慢慢了解它的時候,被它天生高可用、負載均衡、彈性計算、自動擴容縮容和全自動容災機制的設計理念吸引,因而本身便踏入了k8s這條不歸路,在調研學習的過程當中,開始不斷填坑、挖坑再填坑,周而復始。nginx

  2017年,公司還在使用裸Docker部署一些無狀態的應用,隨着愈來愈多的Docker實例,發生故障時,人工填坑的方式,讓咱們實在頭疼,有時候大半夜正在作着好夢的時候,被一個電話鈴喊起來處理着因爲宿主機宕機或者網絡不可達引發的各種問題。這種慘絕人寰的處理方式更是讓咱們頭疼難忍。雖而後來引用了Swarm和Compose,但隨着業務的不斷增多,已經愈來愈來知足不了咱們的應用場景,而後就想着把全部Docker應用遷移到Kubernetes中去管理。git

  2017年6月30日,k8s發佈1.7版本,2017年10月,Docker擁抱Kubernetes,也是咱們正式開始使用Kubernetes的開始。但事情並無咱們想象中的那麼簡單,k8s的設計太多複雜,概念實在是太多,搭建過程更是讓人吐血,當時可參考的文章又是少之又少。在通過一個多月的研究與不斷回血以後,終於在k8s集羣中部署了咱們的第一個應用。雖然整個過程當中踩了無數坑,遇到了無數個難題,但從始至終沒有放棄,最終實現一整套的流程設計,從開發提交代碼至Git,到最後成功部署到k8s集羣中,完全釋放了雙手。遇到集羣中的宿主機宕機的時候,不用再去人工去處理,這一切k8s都幫你默默的處理了...後端

 

二、Kubernetes帶來的變革服務器

  對於開發人員網絡

  因爲公司業務多,開發環境、測試環境、預生產環境和生產環境都是隔離的,並且除了生產環境,爲了節省成本,其餘環境是沒有日誌收集的,在沒有用k8s的時候,查看線下測試的日誌,須要開發或者測試人員,找到對應的機器,在找到對應的容器,而後才能查看日誌,在用了k8s以後,開發和測試能夠直接在k8s的dashboard到對應的namespace,便可定位到業務的容器,而後能夠直接經過控制檯查看到對應的日誌,大大下降了操做時間。負載均衡

  把應用部署到k8s以後,代碼的發佈、回滾,以及藍綠髮布、金絲雀發佈等都變得特別簡單,不只加快了業務代碼迭代的速度,並且全程無需人工干預。目前咱們使用jenkins、gitrunner進行發版或者回滾等,從開發環境到測試環境,到最後的生產環境,徹底遵照一次構建,多集羣、多環境部署,經過不一樣的啓動參數、不一樣的環境變量、不一樣的配置文件實現區分不一樣的環境。目前已經實現Python、Java、PHP、NodeJS、Go、.NET Core等多種語言的一鍵式發版、一鍵式回滾,大大提升了開發人員的開發效率。運維

  在使用服務網格後,開發人員在開發應用的過程當中,不用再關心代碼的網絡部分,這些功能都被服務網格實現,讓開發人員能夠只關心代碼邏輯部分,便可實現網絡部分的功能,好比:斷流、分流、路由、負載均衡、限速和觸發故障等功能。ide

  測試過程當中,可能同時多套環境,固然也會須要再建立一套測試環境,以前測試環境的建立,須要找運維或者自行手工搭建。在遷移至k8s集羣后,只須要在jenkins上點點鼠標便可在k8s集羣上建立一套新的測試環境。工具

 

  對於運維人員

  若是你是一名運維人員,可能常常由於一些重複、繁瑣的工做感受厭倦。好比:這個須要一套新的測試環境,那個須要一套新的測試環境,以前可能須要裝系統、裝依賴環境、開通權限等等。而現在,能夠直接用鏡像直接部署一套新的測試環境,甚至全程無需本身干預,開發人員經過jenkins或者自動化運維平臺便可一鍵式建立,大大下降了運維成本。

  一開始,公司業務故障,多是由於基礎環境不一致、依賴不一致、端口衝突等等問題,如今實現鏡像部署,全部的依賴、基礎都是同樣的,大大減小了由於這類基礎問題引起的故障。也有可能公司業務是因爲服務器宕機、網絡等問題,形成服務不可用,此類狀況均須要運維人員及時去修復,而現在,可能在你收到告警信息的時候,k8s已經幫你恢復了。

  在沒有使用k8s時,業務應用的擴容和縮容,都須要人工去處理,從採購服務器、上架、到部署依賴環境,不只須要大量的人力物力,並且很是容易在中間過程出現問題,又要花費大量的時間去查找問題。成功上架後,還須要在前端反代端添加或該服務器,而現在,能夠利用k8s的彈性計算,一鍵式進行擴容和縮容,不只大大提升了運維效率,並且還節省了很多的服務器資源,提升了資源利用率。

  對於反代配置方面,好比可能你並不會,或者對nginx的配置規則並不熟悉,一些高級的功能你也不會實現,而現在,利用k8s的ingress便可簡單的實現那些負責的邏輯。而且也不會在遇到nginx少加一個斜槓和多加一個斜槓的問題。

  對於負載均衡方面,以前負載均衡多是Nginx、LVS、HAProxy、F5等,雲上多是雲服務商提供的不在均衡機制。每次添加刪除節點時,都須要手動去配置前端負載均衡,手動去匹配後端節點,而現在,使用k8s內部的service能夠動態發現實現自動管理節點,而且支持自動擴容縮容。以前遇到高峯流量時,常常服務器性能不夠,須要臨時加服務器面對高峯流量,而現在對於高性能k8s集羣,無需管理,自動擴容。

  對於高可用方面,k8s天生的高可用功能,完全釋放了雙手,無需再去建立各種高可用工具、檢測檢查腳本。k8s支持進程級別的健康檢查,如發現接口超時或者返回值不正確,會自動處理該問題。

  對於中間件搭建方面,根據定義好的deploy文件,能夠實現秒級搭建各種中間件高可用集羣,如Redis、RabbitMQ、Zookeeper等,而且大大減小了出錯的機率。

  對於應用端口方面,傳統行業中,一個服務器可能跑了不少進程,每一個進程都有一個端口,須要人爲的去配置端口,而且還須要考慮端口衝突的問題,若是有防火牆的話,還須要配置防火牆,在k8s中,端口統一管理,統一配置,每一個應用的端口均可設置成同樣的,以後經過service進行負載均衡。

 

  不管是對於開發人員、測試人員仍是運維人員,k8s的誕生,不只減小了工做的複雜性,還減小了各類成本。上述帶來的變革只是其中比較小的一部分,更多優勢只有用了才能體會到。

 

三、Kubernetes帶來的挑戰

  首先是對於k8s的學習自己就是很難的,概念太多,無從入手,可能學習了一個月也沒法入門,甚至連集羣也搭建不出來,令人望而卻步。而且k8s對運維的技術能力要求比較高,已經不只僅侷限於傳統運維,有時候你可能要修改業務代碼等。而且須要掌握的知識也須要不少,你可能須要掌握公司全部使用到的代碼,好比代碼是如何進行編譯的、如何正確發佈、如何修改代碼配置文件等,這對於運維人員,也是一種挑戰。Kubernetes之因此被叫作k8s,業界有兩種說法,通俗的說法是k和s之間有8個字母,另外一種比較說法是k8s集羣至少須要搭建8遍才能搭建成功。固然,在實際使用時,可能不止8遍。k8s的誕生,把運維從傳統轉變到了DevOps方向,須要面臨的問題會更多,須要面臨的新技術也有不少,可是當你掌握到了k8s的核心使用,就會受益終身。

  對於開發人員來講,對開發方式也有一些變化。從k8s的誕生到如火如荼,慢慢的k8s變成了一種標準,開發再進行代碼開發時須要遵循Docker和k8s規範,嚴格遵照一次構建,屢次部署原則,全部的配置都經過參數、變量或者k8s配置管理注入。而且對應用,要求是無狀態的,由於Docker每次重啓都會以最乾淨的基礎啓動。不管公司有沒有進行業務容器化,遵循Docker和k8s規範都將成爲將來的趨勢,2019年7月,某公司由於代碼不能和k8s兼容,致使一年虧損38億美圓...

 

四、這是重點

  在這些年踩了無數坑之後,也領悟到了每一個技術人員學習k8s的痛點在哪裏,首先是k8s概念不清楚就開始放肆的把應用部署到k8s集羣中,產生的問題無從入手去解決,其次是k8s集羣不管如何也搭建不出來,集羣擴容也難如下手,而後是持續集成持續部署方面無從下手等等問題,想要搭建一整套k8s集羣不只僅侷限於k8s集羣的搭建。還須要對構建、發版、測試、部署流程化,也須要將GitLab、GitRunner、Jenkins、Harbor、Kubernetes等聯繫起來。這都是每一個使用k8s會遇到的問題。

  來一波猝不及防的廣告~

  其實上述列出了1234項主要是爲了介紹一本即將上市的Kubernetes實戰技術書籍,這本書能夠帶你避免在使用k8s的過程遇到的各種坑。

    image.png

        

    這本書不只能幫你快速搭建一整套集羣,也會幫你解決在使用過程當中遇到的各種問題,對於使用過程當中的每一個坑,大部分都已經幫你填上,讓你少走不少彎路,少掉很多頭髮,讓你可以快速走進k8s的正途。這本書適用於大部分企業,能夠快速構建公司的k8s平臺,而且容器化各種中間件、業務應用代碼,如Java、NodeJS等。一樣也介紹了SpringCloud各種組件的容器化。

  本書以實戰爲主線,深刻淺出地介紹了Kubernetes在企業生產中的應用。全書共6章,主要內容包括:第1章講解Kubernetes的高可用安裝,分爲kubeadm和二進制安裝方式。第2章介紹了Docker和Kubernetes經常使用的理論基礎。第3章主要講解Kubernetes的常見應用的容器化。第4章主要介紹持續集成和持續部署,包括Jenkins最新的功能Pipeline的使用,從Pipeline的語法到項目實操,傳統Java和Spring Cloud應用的容器化以及自動化構建部署。第5章主要講解了Kubernetes的Nginx Ingress的安裝和經常使用配置。第6章講解了備受關注的Server Mesh。

相關文章
相關標籤/搜索