1. 程式人生 > >三 、kubernetes基本概念

三 、kubernetes基本概念

 

Container

Container(容器)是一種行動式、輕量級的作業系統級虛擬化技術。它使用 namespace 隔離不同的軟體執行環境,並通過映象自包含軟體的執行環境,
從而使得容器可以很方便的在任何地方執行。由於容器體積小且啟動快,因此可以在每個容器映象中打包一個應用程式。這種一對一的應用映象關係擁有很多好處。使用容器,
不需要與外部的基礎架構環境繫結, 因為每一個應用程式都不需要外部依賴,更不需要與外部的基礎架構環境依賴。完美解決了從開發到生產環境的一致性問題。
容器同樣比虛擬機器更加透明,這有助於監測和管理。尤其是容器程序的生命週期由基礎設施管理,而不是由容器內的程序對外隱藏時更是如此。最後,
每個應用程式用容器封裝,管理容器部署就等同於管理應用程式部署。
在 Kubernetes 必須要使用 Pod 來管理容器,每個 Pod 可以包含一個或多個容器。

Pod

關於Pod的概念主要有以下幾點:

  • Pod是kubernetes中你可以建立和部署的最小也是最簡的單位。一個Pod代表著叢集中執行的一個程序;
  • 在Kubrenetes叢集中Pod的使用方式;
  • Pod中如何管理多個容器

理解Pod:

上面已經說了“Pod是kubernetes中你可以建立和部署的最小也是最簡的單位。一個Pod代表著叢集中執行的一個程序。”Pod中封裝著應用的容器(有的情況下是好幾個容器),
儲存、獨立的網路IP,管理容器如何執行的策略選項。Pod代表著部署的一個單位:kubernetes中應用的一個例項,可能由一個或者多個容器組合在一起共享資源。
請注意:Docker是kubernetes中最常用的容器執行時,但是Pod也支援其他容器執行時。

Kubrenetes叢集中Pod的兩種使用方式:

(1)一個Pod中執行一個容器
“每個Pod中一個容器”的模式是最常見的用法;在這種使用方式中,你可以把Pod想象成是單個容器的封裝,kuberentes管理的是Pod而不是直接管理容器。

實戰:建立一個nginx容器

apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
  labels:
    app: web
spec:
  containers:
  - name: front-end
    image: nginx:1.7.9
    ports:
    - containerPort: 80
建立Pod:
kubectl create -f ./pod1-deployment\
檢視Pod:
kubectl get po
檢視Pod詳細情況:
kubectl describe po nginx-test
進入到Pod(容器)內部:
kubectl exec -it nginx-test  /bin/bash

(2)在一個Pod中同時執行多個容器
說明:在一個Pod中同時執行多個容器是一種比較高階的用法。只有當你的容器需要緊密配合協作的時候才考慮用這種模式。
一個Pod中也可以同時封裝幾個需要緊密耦合互相協作的容器,它們之間共享資源。這些在同一個Pod中的容器可以互相協作成為一個service單位——一個容器共享檔案,
另一個“sidecar”容器來更新這些檔案。Pod將這些容器的儲存資源作為一個實體來管理。

實戰:在一個pod裡放置兩個容器:nginx與redis

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
  - name: front-end
    image: nginx:1.7.9
    ports:
    - containerPort: 80
  - name: rss-reader
    image: redis
    ports:
    - containerPort: 88
建立Pod:
kubectl create -f ./test-deployment
檢視pod
kubectl get po
檢視Pod詳細情況
kubectl describe po rss-site 
進入front-end內部:
kubectl exec -it rss-site  -c front-end /bin/bash 
進入rss-reade內部:
kubectl exec -it rss-site  -c rss-reader  /bin/bash

以上是關於Pod的簡單介紹,如需瞭解更多,請參考Pod