Kubernetes 簡介
微服務框架的流行,使得服務越來越精細化,服務也變的越來越多谅年,對于發(fā)布和管理而言產生了巨大的挑戰(zhàn)括儒,而 Docker
的誕生绕沈,給與微服務的資源治理和控制提供了很好的基礎。容器化可以解決各個不同語言環(huán)境部署帮寻、移植性高乍狐、跨平臺部署等。但是 Docker
對于容器服務的編排沒有那么方便固逗,因為 Docker
這方面不足浅蚪,而誕生 Kubernetes
,Kubernetes
是一個可移植的烫罩、可擴展的開源平臺掘鄙,用于管理容器化的工作負載和服務,可促進聲明式配置和自動化嗡髓。
使用 Kubernetes 帶來那些方便
- 快速部署應用
- 很容易實現 水平伸縮 或 垂直伸縮
- 無縫發(fā)布新的應用版本
- 資源使用最大化
- 應用停止自動重啟
Kubernetes 特點
- 可移植:支持公有云操漠、私有云、混合云、多重云(multi-cloud)
- 可擴展:模塊化浊伙、插件化撞秋、可掛載、可組合
- 自動化:自動部署嚣鄙、自動重啟吻贿、自動復制、自動伸縮/擴展
為什么需要 Kubernetes哑子,它能做什么?
容器是打包和運行應用程序的好方式舅列。在生產環(huán)境中,您需要管理運行應用程序的容器卧蜓,并確保不會停機帐要。例如,如果一個容器發(fā)生故障弥奸,則需要啟動另一個容器榨惠。如果系統(tǒng)處理此行為,會不會更容易盛霎?
這就是 Kubernetes 的救援方法赠橙!Kubernetes 為您提供了一個可彈性運行分布式系統(tǒng)的框架。Kubernetes 會滿足您的擴展要求愤炸、故障轉移期揪、部署模式等。
Kubernetes 為您提供:
服務發(fā)現和負載均衡
:Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器规个,如果到容器的流量很大横侦,Kubernetes 可以負載均衡并分配網絡流量,從而使部署穩(wěn)定绰姻。存儲編排
:Kubernetes 允許您自動掛載您選擇的存儲系統(tǒng),例如本地存儲引瀑、公共云提供商等狂芋。自動部署和回滾
:您可以使用 Kubernetes 描述已部署容器的所需狀態(tài),它可以以受控的速率將實際狀態(tài)更改為所需狀態(tài)憨栽。例如帜矾,您可以自動化 Kubernetes 來為您的部署創(chuàng)建新容器,刪除現有容器并將它們的所有資源用于新容器屑柔。容器資源配額
:Kubernetes 允許您指定每個容器所需 CPU 和內存(RAM)屡萤。當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源掸宛。自我修復
:Kubernetes 重新啟動失敗的容器死陆、替換容器、殺死不響應用戶定義的運行狀況檢查的容器,并且在準備好服務之前不將其通告給客戶端措译。密鑰與配置管理
:Kubernetes 允許您存儲和管理敏感信息别凤,例如密碼、OAuth 令牌和 ssh 密鑰领虹。您可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置规哪,也無需在堆棧配置中暴露密鑰。配置文件
:Kubernetes 可以通過 ConfigMap 來存儲配置塌衰。
Kubernetes 基礎資源定義和理解
一切皆為資源诉稍,一切即可描述,一切皆可管理最疆。
NameSpaces
命名空間杯巨,在一個 Kubernetes 集群中可以使用namespace創(chuàng)建多個“虛擬集群”,這些namespace之間可以完全隔離肚菠,也可以通過某種方式舔箭,讓一個namespace中的service可以訪問到其他的namespace中的服務。
Deployment
Deployment 為 Pod 和 ReplicaSet 提供了一個聲明式定義(declarative)方法蚊逢,用來替代以前的 ReplicationController
來方便的管理應用层扶。典型的應用場景包括:
- 定義Deployment來創(chuàng)建Pod和ReplicaSet
- 滾動升級和回滾應用
- 擴容和縮容
- 暫停和繼續(xù)Deployment
Service
Kubernetes Service 定義了這樣一種抽象:一個 Pod 的邏輯分組,一種可以訪問它們的策略 —— 通常稱為微服務
烙荷。 這一組 Pod 能夠被 Service 訪問到镜会,通常是通過 Label Selector實現的。
Ingress
Ingress 是從 Kubernetes集群外部訪問集群內部服務的入口终抽。比如官方維護的 Ingress Nginx
戳表。ingress traefik
、ingress haproxy
等昼伴。
Pod
Pod 是 kubernetes 中你可以創(chuàng)建和部署的最小也是最簡的單位匾旭。Pod代表著集群中運行的進程。
Pod中封裝著應用的容器(有的情況下是好幾個容器)圃郊,存儲价涝、獨立的網絡IP,管理容器如何運行的策略選項持舆。Pod代表著部署的一個單位:kubernetes中應用的一個實例色瘩,可能由一個或者多個容器組合在一起共享資源。
ConfigMap
ConfigMap API 資源用來保存 key-value pair配置數據逸寓,這個數據可以在pods里使用居兆,或者被用來為像controller一樣的系統(tǒng)組件存儲配置數據。雖然 ConfigMap 跟 Secrets 類似竹伸,但是ConfigMap更方便的處理不含敏感信息的字符串泥栖。 注意:ConfigMaps不是屬性配置文件的替代品。ConfigMaps只是作為多個properties文件的引用。你可以把它理解為Linux系統(tǒng)中的/etc目錄聊倔,專門用來存儲配置文件的目錄晦毙。
Secret
Secret 解決了密碼、token耙蔑、密鑰等敏感數據的配置問題见妒,而不需要把這些敏感數據暴露到鏡像或者Pod Spec中。Secret 可以以Volume或者環(huán)境變量的方式使用甸陌。
Secret有三種類型:
-
Service Account
:用來訪問Kubernetes API须揣,由Kubernetes自動創(chuàng)建,并且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中钱豁; -
Opaque
:base64編碼格式的Secret耻卡,用來存儲密碼、密鑰等牲尺; -
kubernetes.io/dockerconfigjson
:用來存儲私有docker registry的認證信息卵酪。
PV 和 PVC
用于數據持續(xù)存儲,Pod中谤碳,容器銷毀溃卡,所有數據都會被銷毀,如果需要保留數據蜒简,這里就需要用到 PV存儲卷瘸羡,PVC存儲卷申明。
PVC 常用于 Deployment 做數據持久存儲搓茬。實現持久化存儲還需要理解 Volume 概念犹赖。
Volume
容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應用時會出現一些問題卷仑。首先峻村,當容器崩潰時,kubelet 會重啟它锡凝,但是容器中的文件將丟失——容器以干凈的狀態(tài)(鏡像最初的狀態(tài))重新啟動粘昨。其次,在 Pod 中同時運行多個容器時私爷,這些容器之間通常需要共享文件。Kubernetes 中的 Volume 抽象就很好的解決了這些問題膊夹。
Labels 和 Selectors
標簽
和 選擇器
衬浑。作用用于給每個容器打標簽,然后各個控制器通過 Selector 匹配容器放刨,并管理工秩。比如 Deployment 或 Service 都是通過這種方式匹配相應的 Pod。
自述
以上只是介紹 Kubernetes 幾種常用的資源概念和作用,具體介紹可以查閱Kubernetes 官方文檔助币。
參考鏈接
- https://kubernetes.io/docs/home/
- https://jimmysong.io/kubernetes-handbook
- http://www.reibang.com/p/b5b9041e8d7b
本文由 YP小站 發(fā)布浪听!