#### **一、理解Kubernetes Pod**
![](https://img.kancloud.cn/0a/e6/0ae6034035ecef9b324b887b07549e53_1257x725.png)
起初我们所有的应用都部署在物理服务器,后续为了解决成本等问题引来虚拟化技术,例如OpenStack,直到今天的Kubernetes平台上;
*****
Kubernetes就好比我们传统的数据中心,在Kubernetes数据中心中,没有物理机房及服务器的概念,所有的计算资源都是软件定义的,Pod可以认为是Kubernetes数据中心的一种虚拟资源,他具有逻辑上的CPU,内存,网络和存储。Pod是Kubernetes集群当中最小的资源单位。
* 容器是一种软件打包的技术,是一种资源隔离抽象;
* pod是容器的包装,是一种虚拟机抽象;
* Kubernetes是管理pod虚拟机数据中心的一种抽象概念
*****
2、为什么需要Pod
容器的本质: **一个视图被隔离、资源受限的进程** (容器里PID=1的进程就是应用本身),管理虚拟机就相当于管理基础设施,管理容器就相当于管理应用本身
Kubernetes其实就是云时代的操作系统(容器镜像就是这个操作系统的软件安装包)
案例1:
![](https://img.kancloud.cn/01/24/012477729e513c741a8e9b805ddee2a1_1110x416.png)
我们说Kubernetes类比于操作系统,容器就类比于进程,Pod就类比于进程组;上图中HelloWorld有4个进程组成,那么该程序该如何用容器运行起来呢?
方案1: 在一个Docker容器中,启动4个进程
疑问: 那么容器PID为1的进程该设置哪个呢?
在容器里运行复杂程序特别复杂
方案2: 定义4个容器启动,把他们定义到一个pod里
![](https://img.kancloud.cn/40/70/40703a433c2bf36f796168928ada9857_1439x736.png)
3、理解Pod
Pod是Kubernetes的原子调度单位,Pod是用来解决超亲密关系的两个应用服务,两个应用之间需要发生文件交换,并且需要通过localhost进行本地通讯,同时也会发生非常频繁的RPC调用。比如日志收集
**共享网络**
*****
![](https://img.kancloud.cn/d6/0d/d60dd34739e3a6ff40a55d543a425263_367x295.png)
* 容器A和容器B通过Pause(Infra Container)的方式共享同一个Network Namespace
* 他们之间使用Localhost进行通信
* 容器A和容器B看到的网络设备和Pause容器看到的完全一样
* 一个Pod只有一个IP地址,也就是这个Pod的Network Namespace对应的IP地址
* 整个Pod的生命周期跟Pause容器一致,而与容器A和B无关
**共享存储**
*****
![](https://img.kancloud.cn/c4/fa/c4fae03470e72eff50e6e6812ec0fce8_390x295.png)
同一个Pod中的多个容器能够共享Pod级别的存储卷Volume,Volume可以被定义为各种类型,多个容器各自进行挂载操作,将一个Volume挂载为容器内部需要的目录
案例1:
![](https://img.kancloud.cn/0f/72/0f72157f952160cc9c33c6cc0a4c95fd_788x753.png)
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部署工具