「定义」:Pod是Kubernetes中最小的部署单元,是一个或多个紧密关联容器的组合。「调度」:Pod作为一个整体被调度到Kubernetes集群中的节点上。「生命周期」:Pod的生命周期由包含的容器的生命周期决定。
「容器定义:」 Pod中的容器通过Pod的容器列表定义,这些容器可以共享相同的网络和存储。「共享资源:」 容器共享相同的网络命名空间,可以通过localhost进行通信。它们也可以访问共享的存储卷。
「共享网络:」 所有Pod中的容器共享同一个IP地址和端口空间,它们可以使用localhost进行直接通信。「Service:」 Pod可以通过Service抽象进行访问,Service提供了负载均衡和服务发现的功能。
「Pending」:Pod正在等待调度到某个节点上。「Running」:Pod中的至少一个容器正在运行。「Succeeded」:Pod中的所有容器已成功运行完成。「Failed」:Pod中的至少一个容器已经以非正常状态退出。「Unknown」:Pod的状态无法确定。
「Pod定义文件:」 使用YAML文件定义Pod的配置,包括容器规范、环境变量、资源限制等。「kubectl命令:」 使用kubectl命令行工具创建、删除、管理Pod。「ReplicaSets和Deployments:」 通过ReplicaSets和Deployments来管理Pod的复制和更新。
「定义:」 一个Pod可以包含多个容器,这些容器共享相同的网络和存储。「使用场景:」 多容器Pod适用于需要协同工作的应用,例如日志收集、辅助任务等。
## 直接运行一个nginx pod
kubectl run pod-kubectl --image=nginx:latest
-------
pod/pod-kubectl created
## 查看pod 列表
kubectl get pod
-------
NAME READY STATUS RESTARTS AGE
pod-kubectl 1/1 Running 0 66s
查看更多信息的列表
kubectl get pod -owide
-------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-kubectl 1/1 Running 0 4m12s 10.188.36.65 k8s-node1 <none> <none>
# 查看pod具体信息
kubectl describe pod pod-kubectl
在master节点访问nginx
curl 10.188.36.65
-------
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
pod-nginx-simple.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nignx-simple
spec:
containers:
- name: pod-nignx-simple
image: nginx:1.14.2
ports:
- containerPort: 80
按照文件创建资源
kubectl apply -f
-------
pod/pod-nignx-simple created
kubectl get pod -owide
-------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-kubectl 1/1 Running 0 30m 10.188.36.65 k8s-node1 <none> <none>
pod-nignx-simple 1/1 Running 0 67s 10.188.169.130 k8s-node2 <none> <none>
spec.containers[].imagePullPolicy: IfNotPresent
Always(重新下载镜像)| Never(仅使用本地) | IfNotPresent(优先使用本地)
当你为 Pod 中的 Container 指定了资源 request(请求) 时, kube-scheduler 就利用该信息决定将 Pod 调度到哪个节点上。当你为 Container 指定了资源 limit(限制) 时,kubelet 就可以确保运行的容器不会使用超出所设限制的资源。kubelet 还会为容器预留所 request(请求) 数量的系统资源,供其使用。「单位」:CPU(0.1/100m) Memory(100Ei、100Pi、100Ti、100Gi、100Mi、100Ki)「配置」:spec.containers[].resources.limits.cpuspec.containers[].resources.limits.memoryspec.containers[].resources.requests.cpuspec.containers[].resources.requests.memory
「配置」
apiVersion: v1
kind: Pod
metadata:
name: pod-nignx-simple-lifecycle
spec:
containers:
- name: pod-nignx-simple-lifecycle
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo postStart > /k8s.txt"]
preStop:
exec:
command: ["/bin/sh","-c","echo preStop >> /k8s.txt;sleep 3600;"]
ports:
- containerPort: 80
#进入容器
kubectl exec -it pod-nignx-simple-lifecycle -- /bin/bash
cat /k8s.txt
-------
postStart
# 删除容器
kubectl delete pod pod-nignx-simple-lifecycle
# 在另一个节点执行命令
kubectl exec -it pod-nignx-simple-lifecycle -- /bin/bash
cat /k8s.txt
-------
postStart
preStop
「定义」
「配置」
容器启动时创建healthy文件,休眠30秒,删除healthy文件,休眠3000秒 存活探针延时5秒调用,后面每隔5秒调用一次,验证存活
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx-simple-liveness-exec
spec:
containers:
- name: pod-nginx-simple-liveness-exec
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- touch /healthy; sleep 30; rm -f /healthy; sleep 3000
livenessProbe:
exec:
command:
- cat
- /healthy
initialDelaySeconds: 5
periodSeconds: 5
不断执行以下命令,观察探针情况
kubectl describe pod pod-nginx-simple-liveness-exec
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx-simple-liveness-http
spec:
containers:
- name: pod-nginx-simple-liveness-http
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /index.html
port: 80
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
运行执行,我们进入容器删除index.html
kubectl exec -it pod-nginx-simple-liveness-http -- /bin/bash
rm -rf /usr/share/nginx/html/index.html
等一会再执行
kubectl get pod
再执行describe,看pod情况
kubectl describe pod pod-nginx-simple-liveness-http
就绪探针同存活探针配置一样,唯一不同的就是readinessProbe
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx-simple-readiness
spec:
containers:
- name: pod-nginx-simple-readiness
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
path: /index.html
port: 80
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
同样,在容器启动一会之后,我们进入到容器删除index.html,在等一会看pod情况 可以看到就绪探针检测失败
pod ready数量为0,但是不会自动重启,和存活探针不同
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx-simple-startup
spec:
containers:
- name: pod-nginx-simple-startup
image: nginx:1.14.2
imagePullPolicy: IfNotPresent
startupProbe:
httpGet:
path: /index2.html
port: 80
initialDelaySeconds: 3
periodSeconds: 3
因为index2.html肯定不存在,所以肯定无法启动
修改成index.html 则探针检测成功,不再演示