一、Kubernetes是什么?
2014年,Google開源一個PAAS平臺,命名為Kubernetes。
其目標是管理大規模服務(容器)集群,解決人們對大規模容器的部署、升級、回滾帶來的復雜性問題,實現在不停服務情況下的應用管理,以便最大可能地把精力集中在業務開發上。
Kubernetes以聲明式方式進行容器部署,也就是只要告訴Kubernetes要做什么,不需要告之如何去做。
二、應用是如何部署和運行的?
我們在使用容器技術時,應用便打包在容器中,以容器為粒度進行操作,運行時體現為一個進程。
Kubernetes認為一個微服務可能由多個容器(進程)共同提供,便將多個容器看作一個組,看似豆莢,稱為 Pod ,也被稱為服務實例。Pod是Kubernetes最小調度單位。
一個應用運行時,可能需要N個服務實例(Pod)。如果某個服務實例出現異常或宕機,需要維持N個服務實例。這些工作由 ReplicaSet(副本集) 來做,也就是ReplicaSet能夠保證始終有N個Pod在運行。(注:除 ReplicaSet --無狀態外,還有DaemonSet、StatefulSet和Job等)
如果應用需要發布新版本,則需要“創建新版本的Pod,并替換舊版本的Pod”。這個工作由Deployment來做。Deployment會用新版本規范創建新ReplicaSet,新ReplicaSet創建新Pod數量會逐漸提高,舊ReplicaSet對應的Pod數量同步逐漸減少。也就是Deployment--ReplicaSet--Pod。
我們可以通過YAML文件來進行應用的部署,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rss-site
labels:
app: web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
- containerPort: 88
表達的意思為:部署 rss-site Web應用,有2個副本,符合spec規范定義。這里涉及到selector的概念,表示的是對象通過Label進行關聯,類似SQL中的select語句。
三、如何訪問微服務?
Pod在應用的運行過程中,可能會進行彈性伸縮。
相應地,Pod對應的IP地址也可能會發生變化。不能因Pod的IP地址變化,而影響服務的訪問。于是,引入Service概念,為一組相同功能的Pod提供統一的入口。
四層Service體現為IP地址和端口號。7層Service又引入了一個新的概念: Ingress ,可根據不同的URL請求轉發到后端不同的Service。
那么如何訪問Service呢?
對于集群內部的服務來說,有兩種方法。一種方法是在服務(客戶端)啟動時,將服務(服務端)的信息以環境變量的形式注入到(客戶端)中。另一種方法是使用虛擬DNS,服務(客戶端)只要知道服務的名稱即可,不需要關注服務的IP地址。
對于集群外部來說,也有兩種方法。一種是通過物理服務器的IP地址和端口號,也就是NodeIP + Port的形式。另一種是在公有云場景下,通過公有云的負載均衡來實現。
-
管理
+關注
關注
2文章
384瀏覽量
26382 -
容器
+關注
關注
0文章
495瀏覽量
22060 -
kubernetes
+關注
關注
0文章
224瀏覽量
8712
發布評論請先 登錄
相關推薦
評論