#### **一、理解Kubernetes Pod**

起初我們所有的應用都部署在物理服務器,后續為了解決成本等問題引來虛擬化技術,例如OpenStack,直到今天的Kubernetes平臺上;
*****
Kubernetes就好比我們傳統的數據中心,在Kubernetes數據中心中,沒有物理機房及服務器的概念,所有的計算資源都是軟件定義的,Pod可以認為是Kubernetes數據中心的一種虛擬資源,他具有邏輯上的CPU,內存,網絡和存儲。Pod是Kubernetes集群當中最小的資源單位。
* 容器是一種軟件打包的技術,是一種資源隔離抽象;
* pod是容器的包裝,是一種虛擬機抽象;
* Kubernetes是管理pod虛擬機數據中心的一種抽象概念
*****
2、為什么需要Pod
容器的本質: **一個視圖被隔離、資源受限的進程** (容器里PID=1的進程就是應用本身),管理虛擬機就相當于管理基礎設施,管理容器就相當于管理應用本身
Kubernetes其實就是云時代的操作系統(容器鏡像就是這個操作系統的軟件安裝包)
案例1:

我們說Kubernetes類比于操作系統,容器就類比于進程,Pod就類比于進程組;上圖中HelloWorld有4個進程組成,那么該程序該如何用容器運行起來呢?
方案1: 在一個Docker容器中,啟動4個進程
疑問: 那么容器PID為1的進程該設置哪個呢?
在容器里運行復雜程序特別復雜
方案2: 定義4個容器啟動,把他們定義到一個pod里

3、理解Pod
Pod是Kubernetes的原子調度單位,Pod是用來解決超親密關系的兩個應用服務,兩個應用之間需要發生文件交換,并且需要通過localhost進行本地通訊,同時也會發生非常頻繁的RPC調用。比如日志收集
**共享網絡**
*****

* 容器A和容器B通過Pause(Infra Container)的方式共享同一個Network Namespace
* 他們之間使用Localhost進行通信
* 容器A和容器B看到的網絡設備和Pause容器看到的完全一樣
* 一個Pod只有一個IP地址,也就是這個Pod的Network Namespace對應的IP地址
* 整個Pod的生命周期跟Pause容器一致,而與容器A和B無關
**共享存儲**
*****

同一個Pod中的多個容器能夠共享Pod級別的存儲卷Volume,Volume可以被定義為各種類型,多個容器各自進行掛載操作,將一個Volume掛載為容器內部需要的目錄
案例1:

4、多容器Pod
*****
Kubernetes 集群中的 Pod 主要有兩種用法:
* **運行單個容器的 Pod**。"每個 Pod 一個容器"模型是最常見的 Kubernetes 用例; 在這種情況下,可以將 Pod 看作單個容器的包裝器,并且 Kubernetes 直接管理 Pod,而不是容器。
* **運行多個協同工作的容器的 Pod**。 Pod 可能封裝由多個緊密耦合且需要共享資源的共處容器組成的應用程序。 這些位于同一位置的容器可能形成單個內聚的服務單元 —— 一個容器將文件從共享卷提供給公眾, 而另一個單獨的“掛斗”(sidecar)容器則刷新或更新這些文件。 Pod 將這些容器和存儲資源打包為一個可管理的實體。
官網參考文檔:[https://kubernetes.io/zh/docs/concepts/workloads/pods/](https://kubernetes.io/zh/docs/concepts/workloads/pods/)
### **總結: 一般情況下一個Pod中只運行一個容器,但是除個別情況外,一個Pod會起兩個容器,一個為主容器,另一個為輔助容器**
#### **二、實戰發布Pod**
```
apiVersion: v1
kind: Pod
metadata:
name: petclinic
spec:
containers:
- name: petclinic
image: spring2go/spring-petclinic:1.0.1.RELEASE
restartPolicy: OnFailure
```
發布Petclinic Pod
```
```
- 一、Kubernetes基本概念
- 1、kubernetes架構
- 2、Kuberenetes的Pod
- 3、Kubernetes的各類控制器
- 二、Kubernetes集群安裝部署
- 1、基于Kubeadm安裝高可用集群(1.19.3)
- 2、基于二進制方式部署高可用kubernetes(1.19.3)
- 3、延長Kubernetes證書時間
- 三、Kubernetes高級概念及應用
- 1、Kubernetes存儲卷
- 2、Kubernetes資源請求和限額
- 3、Kubernetes就緒探針和存活探針
- 4、Kubernetes的RBAC權限控制
- 5、Kubernetes的調度策略及污點
- 6、ConfigMap與Secret
- 四、深入理解Kubernetes網絡
- 1、Kubernetes的Pod網絡
- 2、Kubernetes的Service網絡
- 3、Kubernetes外部接入網絡(NodePort+LoadBalancer+Ingress)
- 五、Ceph存儲
- 1、基于Rook部署Ceph集群
- 2、創建RBD塊存儲類型的類及使用
- 3、創建共享文件類型的存儲類(Cephfs)
- 六、NAS存儲
- 1、創建共享文件類型的存儲類(NFS Storage Class)
- 七、Kubernetes實戰之各類中間件部署
- 1、部署Redis集群(Cluster)
- 2、部署MongoDB集群
- 3、部署MySQL主從
- 4、部署Kafka集群及Zookeeper集群
- 5、部署DevOps各類服務(gitlab/jenkins/jira/confluence/openldap)等
- 八、Kubernetes微服務部署案例
- 九、Kubernetes運維篇之日志收集
- 十、Kubernetes運維篇之服務監控(Prometheus)
- 十一、Kubernetes微服務CI/CD
- 十二、Helm部署工具