目录
一、Pod介绍
Pod 是包含一个或多个容器的容器组,是 Kubernetes 中创建和管理的最小对象。
Pod 有以下特点:
- Pod是kubernetes中最小的调度单位(原子单元),Kubernetes直接管理Pod而不是容器。
- 其他所有资源都是围绕着为pod资源提供服务的,给pod提供服务的。
- 同一个Pod中的容器总是会被自动安排到集群中的同一节点(物理机或虚拟机)上,并且一起调度。
- Pod可以理解为运行特定应用的“逻辑主机”,这些容器共享存储、网络和配置声明(如资源限制)。
- 每个 Pod 有唯一的 IP 地址。 IP地址分配给Pod,在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,Pod 内的容器可以使用
localhost
互相通信。
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 "边车 (sidercar)" 容器负责从远端更新这些文件,如下图所示:
二、指令创建和管理Pod
三、资源清单创建pod
1.挂载hostPath存储卷
- 将物理机节点中的目录挂载到pod中,pod意外宕机,或者被删除,数据不丢失;
- 同一个pod中不同的容器之间数据共享;
- 同一个worker节点,不同的pod之间的数据共享;
- 在不同worker节点的pod无法数据共享;
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
#指定pod创建在哪个worker节点中;
nodeName: k8s1
volumes:
- name: hp-01
#声明存储卷类型是hostPath;物理机节点目录挂载
hostPath:
#指定hostPath的路径(物理机挂载路径)
path: /data/pod-volumes
containers:
- name: c1
image: nginx:1.16.1-alpine
volumeMounts:
- name: hp-01
mountPath: /usr/share/nginx/html/
2.NFS存储卷
所有节点安装nfs
k8s3编辑NFS配置文件
k8s1,k8s2节点开机挂载
编辑pod资源清单,挂载nfs
apiVersion: v1
kind: Pod
metadata:
name: volumes-nfs01
spec:
nodeName: k8s1
volumes:
- name: nfs-data
# 指定存储卷的类型是nfs
nfs:
#指定nfs在哪个节点
server: k8s3
# 指定nfs挂在路径
path: /data/nfs_data/nginx
containers:
- name: c1
image: nginx:1.16.1-alpine
volumeMounts:
- name: nfs-data
mountPath: /usr/share/nginx/html
---
apiVersion: v1
kind: Pod
metadata:
name: volumes-nfs02
spec:
nodeName: k8s2
volumes:
- name: nfs-data
# 指定存储卷的类型是nfs
nfs:
#指定nfs在哪个节点
server: k8s3
# 指定nfs挂在路径
path: /data/nfs_data/nginx
containers:
- name: c1
image: nginx:1.16.1-alpine
volumeMounts:
- name: nfs-data
mountPath: /usr/share/nginx/html
四、pod网络暴露
1.hostNetwork使用宿主机的网络
apiVersion: v1
kind: Pod
metadata:
name: pod-hnw
spec:
#声明使用宿主机的网络;
hostNetwork: true
containers:
- name: c1
image: nginx:1.16.1-alpine
2.宿主机端口映射
apiVersion: v1
kind: Pod
metadata:
name: my-pod-hpm
spec:
nodeName: k8s2
containers:
- name: c1
image: nginx:1.16.1-alpine
#声明容器与宿主机端口映射;
ports:
- name: c1-port
#容器端口
containerPort: 80
#宿主机端口
hostPort: 99
#指定访问协议(默认不写是TCP协议,其实不用写)
# protocol: TCP
五、pod中容器的环境变量env
pod中的环境变量跟linux一致,key=value
也就是说,我们通过pod资源清单的编写,可以为容器中声明env环境变量;
apiVersion: v1
kind: Pod
metadata:
name: pod-env
spec:
containers:
- name: c1
image: nginx:1.16.1-alpine
#声明环境变量
env:
#name就是key
- name: oslee
#value就是value值
value: hello
- name: k8s
value: 1.23.17