老鐵們,大家好,相信還有很多朋友對于docker為什么要用k8s和k8s master高可用的相關問題不太懂,沒關系,今天就由我來為大家分享分享docker為什么要用k8s以及k8s master高可用的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
Kubernetes(K8s) 解決了哪些問題
Kubernetes(K8s)是一款由谷歌開源的容器集群管理系統。它基于容器技術,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列功能。
進一步來說,Kubernetes是一個支持彈性運行的分布式系統框架,是一種支撐其他平臺的平臺型基礎設施,可以幫助用戶在生產環境中依托容器實施的基礎架構。
Kubernetes的本質在于實現操作任務自動化,包括應用擴展、故障轉移和部署模式等,因而它能代替用戶執行大部分煩瑣的操作任務,減輕用戶負擔,降低出錯的概率。
01自動裝箱
構建于容器之上,基于資源依賴及其他約束自動完成容器部署且不影響其可用性,并在同一節點通過調度機制混合運行關鍵型應用和非關鍵型應用的工作負載,以提升資源利用率。
02自我修復(自愈)
支持容器故障后自動重啟、節點故障后重新調度容器到其他可用節點、健康狀態檢查失敗后關閉容器并重新創建等自我修復機制。
03水平擴展
支持通過簡單命令或UI手動水平擴展,以及基于CPU等資源負載率的自動水平擴展機制。
04服務發現和負載均衡
Kubernetes通過其附加組件之一的KubeDNS(或CoreDNS)為系統內置了服務發現功能,它會為每個Service配置DNS名稱,并允許集群內的客戶端直接使用此名稱發出訪問請求,而Service通過iptables或ipvs內置了負載均衡機制。
05自動發布和回滾
Kubernetes支持“灰度”更新應用程序或其配置信息,它會監控更新過程中應用程序的健康狀態,以確保不會在同一時刻殺掉所有實例,而此過程中一旦有故障發生,它會立即自動執行回滾操作。
06密鑰和配置管理
Kubernetes的ConfigMap實現了配置數據與Docker鏡像解耦,需要時,僅對配置做出變更而無須重新構建Docker鏡像,這為應用開發部署提供了很大的靈活性。
此外,對于應用所依賴的一些敏感數據,如用戶名和密碼、令牌、密鑰等信息,Kubernetes專門提供了Secret對象使依賴解耦,既便利了應用的快速開發和交付,又提供了一定程度上的安全保障。
07存儲編排
Kubernetes支持Pod對象按需自動掛載不同類型存儲系統,這包括節點本地存儲、公有云服務商的云存儲(如AWS和GCP等),以及網絡存儲系統,例如NFS、iSCSI、Gluster、Ceph、Cinder和Flocker等。
08批量處理執行
除了服務型應用,Kubernetes還支持批處理作業、CI(持續集成),以及容器故障后恢復。
另一方面,以應用為中心的Kubernetes本身并未直接提供一套完整的“開箱即用”的應用管理體系,需要基礎設施工程師基于云原生社區和生態的實際需求手動構建。
為什么我們需要docker
沒有比較就沒有傷害。
先看看沒有Docker時,如果需要部署一個應用系統,是如何配置環境的。1,安裝操作系統,比如Ubuntu18.4;
2,安裝運行環境,比如Python3.6;
3,安裝依賴庫,比如Dlib;
4,復制代碼,或者預先編譯好的應用程序;
5,配置需要的環境變量、開放的端口,等等;
6,運行啟動命令或者預先準備的腳本文件。
為了解決系統部署交付難題,Docker容器技術應運而生。Docker是一個開源的應用容器引擎,將應用以及依賴打包到一個可移植的鏡像中,然后發布到服務器上,有助于快捷高效的交付應用。
1,編寫Dockerfile,將環境配置和應用依賴打包到鏡像中;
2,運行dockerbuild或者使用容器鏡像服務,構建Docker鏡像;
3,運行dockerpull將鏡像文件拉取到服務器,也可以使用云化的容器實例;
4,運行dockerexec啟動容器實例,或者啟動云服務器。
也就是說,以前需要手動完成的環境依賴配置,Docker將它們自動化了。不僅如此,Dockercompose提供資源編排服務,定義和運行多個容器組成的應用系統,通過docker-compose.yml文件聲明各個服務,作為一個整體來完成應用的創建和啟動。
還有Swarm,是Docker官方提供的集群管理工具,將Docker節點統一管理組織,以服務為調度單元,支持動態擴容等特性,和Kubernetes(k8s)相比,更加輕量。
Docker,Compose,Swarm,就是大名鼎鼎的Docker三劍客,助力DevOps,大規模集群化,快捷高效部署應用。
前端為什么有人說要關注Serverless
最近給同事也講了一下,要不部門內部我們自己嘗試嘗試Serverless?
同事問我收益是啥,我也一時說不上來,后來整理了一下,同步發一下吧。
首先如果在公司內部做serverless的嘗試方案:
先搞清楚下面這幾個問題:
1,什么是serverless,對于前端和客戶端以及運維來說有什么收益。
1.1首先理解serverless,需要先理解以下幾個概念:
Serverless的演進和形成主要經歷了:1,IaaS(Infrastructure-as-a-Service,提供物理機服務),2,PaaS(Platform-as-a-Service,平臺既服務,如阿里云,七牛,甚至我們自己的nvm,sce等),3,CaaS(Container-as-a-Service,容器既服務,類似我們現在內部的dockerk8s服務),4,FaaS(函數既服務,一個容器一個函數,使用時才消耗資源,不含存儲,只包含邏輯),5,Baas(backend-as-a-service,后端既服務,提供存儲,數據庫操作,消息轉發,靜態服務等云服務功能)。
我們目前整體新浪還處于IaaS,PaaS結合Caas的階段,我們的服務目前有部署在物理機的,有部署在nvm平臺的,有部署在容器cs服務中的。
那么我們現在理解了serverless的演進后,我們可以認為Faas和Baas才是最終serverless的最后形態。
1.2他對于前端和客戶端開發人員來說:
1,可以直接使用客戶端代碼編寫后端和前端服務邏輯,利用BaaS提供的云服務,關聯到FaaS中,實現對數據的操作,文件的上傳,接口的調用,路由的注冊等,可以更快速無損的開發app應用和前端應用。
2,面向業務編程,不需要了解復雜的后端服務配置和部署等,只需要編寫函數完成API開發即可,加快生產力。
1.3他對于后端人員來說:
1,不需要關注具體服務,只需要關注具體功能。
2,只需要面向API編程,而不是業務編程。
1.4他對于運維人員來說:
1,只需要維護好faas和baas的服務集群即可。
2,更節約成本,而且會比caas和paas更節約服務器資源,因為只有當函數接口被調用時,才會啟動容器,執行函數,執行完畢后再釋放函數,沒有調用則不會有資源浪費。
2,serverless的使用場景:
2.1,首先我們說的主要還是faas和bass的使用場景。
2.1.1純函數,比如計算,接口調用中轉,查詢服務,接口拼接,SSR等。
2.1.2由事件觸發,比如數據處理,接收數據消費,定時任務,消息轉發等。
2.1.3如果有存儲邏輯,比如上傳圖片,裁切,處理音視頻等等,可以提供通用的baas服務的sdk或者api來進行處理即可。
2,結合部門自己的業務,我們什么地方可以使用serverless:
2.2.1c端場景需求:我們開發創新產品或者小程序,app,前端網頁時可以無需后端開發人員配合支持。
比如我們要開發一個ugc的社區,類似微博,綠洲這種app,我們需要的是注冊,登錄,feed流,增刪改查文章,上傳圖片,視頻等功能。
場景1:那么比如注冊,登錄統一的api(現在sso服務就可以直接復用,在faas中調用sso服務接口就可以)。
場景2:用戶的頭像上傳,圖片,視頻上傳可以直接調用s3的服務接口或者cdn接口直接用faas包裝即可,無需后端配合。
場景3:用戶發布文章,刪除,修改文章等,需要操作數據庫,這里包含了簡單的curd的業務邏輯,我們可以直接使用云平臺創建好服務器,然后接入baas中的比如mysql的client,直接在faas中編寫對應的curd邏輯即可,或者利用一些開源的curd包,aws,阿里云都有類似的功能,在新浪我們可以拆開成faas和baas結合+paas的解決方案。
那么我們開發這么一個ugc社區,當我們擁有了serverless架構服務后,我們完全可以純前端完成功能。(理想情況)
2.2.2內部b端場景:
場景1:我們要實現一套無紙化辦公app或者web系統,比如我們的scheme服務,hybrid后臺發布服務中的部分邏輯,比如圈用戶,圈版本等接口都可以直接拆分到faas服務中。
場景2:我們經常要分析處理一些數據,定時進行數據計算,我們可以直接在faas中的定時任務完成計算邏輯和消息轉發功能。
其中場景2,我們目前需要申請服務器,開發crontab腳本,再申請數據庫,進行數據二次處理寫入。或者還要在luwak上編寫sql,配置任務,但是如果和sql無關的任務則luwak無法滿足需求。
3,serverless的實現和開源方案,業界對比:
1,阿里云,騰訊云,頭條云,AWS,google的云服務等。
2,開源服務:Openfaas(社區的),KNative(google的),OpenWhisk(IBM,太老了這個多個開源系統拼接),Kubeless,Fission(k8s官方的),Fn(Oracle的,兼容AWS的Lambda函數服務)
建議選openfaas或者kubeless嘗試一下,看大家都比較推薦,因為咱們肯定是自建。
總結:其實還不錯,如果公司不用,我自己的個人項目還是可以選擇試試的。
阿里云服務器運維需要會什么
需要會以下內容:
1、熟悉linux基本操作命令、網絡基本配置、網絡路由及防火墻服務配置。
2、熟悉shell腳本語言,熟悉C、Java、Python其中一種或多種。
3、Linux系統服務網絡基礎(重點難點TCP/UDP)、sshd服務(scp/rsync)、文件共享服務(ftp/nfs/samba)、DNS域名服務、LAMP編譯安裝、rsyslog、Linux分區+LVM邏輯卷+(軟硬RAID)。
4、了解Linux的RAID、LVM等機制與配置,了解Linux下的各種本地文件系統與網絡文件系統,熟練進行調優配置。熟悉各種主流的開源分布式文件系統及分布式存儲系統。
5、熟悉Hadoop框架,各個相關軟件模塊,能夠安裝、配置、優化hadoop運行系統,熟悉各種hadoop變種產品及相應優缺點,對hadoop平臺有自己的理解,了解OpenStack平臺,能夠搭建、定制OpenStack系統。
6、配置自動化配置自動化(Ansible/SaltStack)、監控(Zabbix/Promethus)、日志分析(ELK、KafKa)、CI/CD(Git、GitLab、Jenkins)。
7、運維安全與調優運維安全(防火墻、CA認證、VPN)應用軟件調優(Web應用調優)系統調優(系統+內核)。
8、運維云計算Hadoop、KVM虛擬化、公有云運維(阿里云)、私有云運維(OpenStack)、Docker容器、Kubernetes(K8S)容器編排工具。
Docker和k8s應該先學哪個比較好
docker是基礎。必須先學這個
centos7可以安裝多少個docker容器如何實現
這個和機器內存、CPU、硬盤大小硬件有關,還和所要提供的服務壓力有關。
關于docker為什么要用k8s,k8s master高可用的介紹到此結束,希望對大家有所幫助。