Pod 是一个逻辑抽象概念,Kubernetes 创建和管理的最小单元,一个 Pod 由一个容器或多个容器组成。
Pod 特点
- 一个 Pod 可以理解为是一个应用实例,提供服务
- Pod 中容器始终部署在一个 Node 上
- Pod 中容器共享网络、存储资源
Pod 主要用法
- 运行单个容器:最常见的用法,在这种情况下,可以将 Pod 看做是单个容器的抽象封装
- 运行多个容器:属于边车模式(Sidecar),通过在 Pod 中定义专门容器,来执行主业务容器需要的辅助工作,这样好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用。例如:日志收集、应用监控。
- 共享存储:容器通过数据卷共享数据
- 共享网络:引入一个叫 infra container,创建 pod 时先创建,负责 pod 网络管理,自定义的容器都会加入到这个网络
测试示例 deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: pod-test
namespace: voip
spec:
replicas: 3
selector:
matchLabels:
app: pod-test
template:
metadata:
labels:
app: pod-test
spec:
containers:
- name: nginx
image: nginx:1.14.2
volumeMounts:
- name: log
mountPath: /data
ports:
- containerPort: 80
- name: busybox
image: busybox
command:
- sleep
- 24h
volumeMounts:
- name: log
mountPath: /data2
volumes:
- name: log
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: pod-test
namespace: voip
spec:
selector:
app: pod-test
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
部署
kubectl apply -f deploy.yaml
查看某个命名空间下的 pod
kubectl get pods -n voip
NAME READY STATUS RESTARTS AGE
pod-test-7646bbb5bf-7m6ks 2/2 Running 0 4m34s
pod-test-7646bbb5bf-8652t 2/2 Running 0 4m34s
pod-test-7646bbb5bf-r72sg 2/2 Running 0 4m34s
进入第一个 pod 的 nginx 容器内
kubectl exec -it pod-test-7646bbb5bf-7m6ks -c nginx -n voip -- bash
cd /data
touch access.log
ls
进入第一个 pod 的 busybox 容器内
kubectl exec -it pod-test-7646bbb5bf-7m6ks -c busybox -n voip -- sh
cd /data2
ls
ifconfig
netstat -antp
/data2 # netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
创建 Pod
kubectl run nginx --image=nginx
查看 Pod
kubectl get pods
kubectl describe pod nginx
查看日志
kubectl logs nginx -f
删除 Pod
kubectl delete pod nginx