https://jimmysong.io/kubernetes-handbook/concepts/pod-overview.html
1. Pod操作
1.0 pod资源定义
yaml
# 必选,api版本号
apiVersion: v1
# 必选,类型为pod
kind: pod
# 必选,定义元数据
metadata:
# 必选,pod名称
name: string
# pod所属的命名空间,默认在default的namespace
namespace: string
# 自定义标签
lables:
# 自定义标签名字
- name: string
# 自定义注释列表
annotations:
- name: string
# pod中容器的详细定义(期望)
spec:
# 通过nodeName调度到node1节点
nodeName: node1
# nodeSelector节点选择器
nodeSelector:
# 指定调度到标签为bussiness=game的节点
bussiness: game
# 必选,pod中容器列表
containers:
# 必选,容器名称
- name: string
# 必选,容器的镜像名称
image: string
# 获取镜像的策略,Alawys表示下载镜像,IfNotPresent表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
imagePullPolicy: [Always | Never | IfNotPresent]
# 容器的启动命令列表,如不指定,使用打包时使用的启动命令
command: [string]
# 容器的启动命令参数列表
args: [string]
# 容器的工作目录
workingDir: string
# 挂载到容器内部的存储卷位置
volumeMounts:
# 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的卷名
- name: string
# 存储卷在容器内mount的绝对路径,应少于512字符
mountPath: string
# 是否为只读模式
readOnly: boolean
# 需要暴露的端口号列表
Ports:
# 端口号名称
- name: string
# 容器需要监听的端口号
containerPort: int
# 容器所在宿主机需要监听的端口号,默认与Container相同
hostPort: int
# 端口协议,支持TCP和UDP,默认TCP
protocol: string
# 容器运行前需设置的环境变量列表
env:
# 环境变量名称
- name: string
# 环境变量的值
value: string
# 资源限制和请求的设置
resources:
# 资源限制的设置
limits:
# cpu的限制,单位为core数,将用于docker run --cpu-shares参数
cpu: string
# 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
memory: string
# 资源请求的限制
requests:
# cpu请求,容器启动的初始可用数量
cpu: string
# 内存请求,容器启动的初始可用数量
memory: string
# 对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
livenessProbe:
# 对Pod容器内检查方式设置为exec方式
exec:
# exec方式需要制定的命令或脚本
command:
- cat
- /tmp/healthy
# 对Pod内个容器健康检查方法设置为HttpGet,需要制定path、port
httpGet:
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
# 对Pod内个容器健康检查方式设置为tcpSocket方式
tcpSocket:
port: number
# 容器启动完成后首次探测的时间,单位为秒,pod启动延迟5秒后探测
initialDelaySeconds: 0
# 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
timeoutSeconds: 0
# 对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
periodSeconds: 0
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
# Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Never表示不再重启该Pod
restartPolicy: [Always | Never | OnFailure]
# 设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
nodeSelector: obeject
# pull镜像时使用的secret名称,以key:secretkey格式指定
imagePullSecrets:
- name: string
# 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
hostNetwork: false
# 在该pod上定义共享存储卷列表
volumes:
# 共享存储卷名称 (volumes类型有很多种)
- name: string
# 类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
emptyDir: {}
# 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
hostPath: string
# Pod所在宿主机的目录,将被用于同期中mount的目录
path: string
# 类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
secret:
scretname: string
items:
- key: string
path: string
# 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
configMap:
name: string
items:
- key: string
path: string
# 必选,api版本号
apiVersion: v1
# 必选,类型为pod
kind: pod
# 必选,定义元数据
metadata:
# 必选,pod名称
name: string
# pod所属的命名空间,默认在default的namespace
namespace: string
# 自定义标签
lables:
# 自定义标签名字
- name: string
# 自定义注释列表
annotations:
- name: string
# pod中容器的详细定义(期望)
spec:
# 通过nodeName调度到node1节点
nodeName: node1
# nodeSelector节点选择器
nodeSelector:
# 指定调度到标签为bussiness=game的节点
bussiness: game
# 必选,pod中容器列表
containers:
# 必选,容器名称
- name: string
# 必选,容器的镜像名称
image: string
# 获取镜像的策略,Alawys表示下载镜像,IfNotPresent表示优先使用本地镜像,否则下载镜像,Never表示仅使用本地镜像
imagePullPolicy: [Always | Never | IfNotPresent]
# 容器的启动命令列表,如不指定,使用打包时使用的启动命令
command: [string]
# 容器的启动命令参数列表
args: [string]
# 容器的工作目录
workingDir: string
# 挂载到容器内部的存储卷位置
volumeMounts:
# 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的卷名
- name: string
# 存储卷在容器内mount的绝对路径,应少于512字符
mountPath: string
# 是否为只读模式
readOnly: boolean
# 需要暴露的端口号列表
Ports:
# 端口号名称
- name: string
# 容器需要监听的端口号
containerPort: int
# 容器所在宿主机需要监听的端口号,默认与Container相同
hostPort: int
# 端口协议,支持TCP和UDP,默认TCP
protocol: string
# 容器运行前需设置的环境变量列表
env:
# 环境变量名称
- name: string
# 环境变量的值
value: string
# 资源限制和请求的设置
resources:
# 资源限制的设置
limits:
# cpu的限制,单位为core数,将用于docker run --cpu-shares参数
cpu: string
# 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
memory: string
# 资源请求的限制
requests:
# cpu请求,容器启动的初始可用数量
cpu: string
# 内存请求,容器启动的初始可用数量
memory: string
# 对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
livenessProbe:
# 对Pod容器内检查方式设置为exec方式
exec:
# exec方式需要制定的命令或脚本
command:
- cat
- /tmp/healthy
# 对Pod内个容器健康检查方法设置为HttpGet,需要制定path、port
httpGet:
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
# 对Pod内个容器健康检查方式设置为tcpSocket方式
tcpSocket:
port: number
# 容器启动完成后首次探测的时间,单位为秒,pod启动延迟5秒后探测
initialDelaySeconds: 0
# 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
timeoutSeconds: 0
# 对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
periodSeconds: 0
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
# Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Never表示不再重启该Pod
restartPolicy: [Always | Never | OnFailure]
# 设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
nodeSelector: obeject
# pull镜像时使用的secret名称,以key:secretkey格式指定
imagePullSecrets:
- name: string
# 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
hostNetwork: false
# 在该pod上定义共享存储卷列表
volumes:
# 共享存储卷名称 (volumes类型有很多种)
- name: string
# 类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
emptyDir: {}
# 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
hostPath: string
# Pod所在宿主机的目录,将被用于同期中mount的目录
path: string
# 类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
secret:
scretname: string
items:
- key: string
path: string
# 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
configMap:
name: string
items:
- key: string
path: string
1.1 查看
- 查看帮助文档
bash
kubectl explain namespace
kubectl explain service.kind
kubectl explain service.metadata
kubectl explain pod.spec.containers
kubectl explain namespace
kubectl explain service.kind
kubectl explain service.metadata
kubectl explain pod.spec.containers
1. 查看pod运行节点
shell
[root@kube-master ~]# kubectl get pod -n kube-system -o wide |grep master
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-hbkgs 1/1 Running 1 (35m ago) 3h48m 10.103.236.201 k8s-master01 <none> <none>
etcd-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-apiserver-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-controller-manager-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-proxy-8z6lf 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-scheduler-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
[root@kube-master ~]# kubectl get pod -n kube-system -o wide |grep master
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-node-hbkgs 1/1 Running 1 (35m ago) 3h48m 10.103.236.201 k8s-master01 <none> <none>
etcd-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-apiserver-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-controller-manager-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-proxy-8z6lf 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
kube-scheduler-k8s-master01 1/1 Running 1 (35m ago) 5h34m 10.103.236.201 k8s-master01 <none> <none>
-n 指定命名空间
-o wide 显示更加详细信息
-o name 只显示名字
-o yaml/json 以yaml/json语法格式显示资源对象
-w 持续监听
2. 查看pod详细信息
shell
#pod以宿主机的ip网段启动的原因,在clico中配置了, hostNetwork: true
[root@kube-master ~]# kubectl get pod calico-typha-67c6dc57d6-5627c -oyaml -n kube-system
#pod以宿主机的ip网段启动的原因,在clico中配置了, hostNetwork: true
[root@kube-master ~]# kubectl get pod calico-typha-67c6dc57d6-5627c -oyaml -n kube-system
bash
kubectl get pods -o wide -n kube-public
# 查看标签
kubectl get node -n kube-public --show-labels
# 查看详细信息
kubectl describe pod 查看容器名
# 以yaml形式查看
kubectl get pod 查看容器名 -o yaml
# 查看容器日志
kubectl logs -f 容器名
# 查看哪些pod在使用此标签
kubectl get pod -l app=my-nginx2 -n kube-public
kubectl get endpoints --show-labels
# 查看命名空间
kubectl get namespaces
# 查看所有命令空间pod
kubectl get pod --all-namespaces 或者 kubectl get pod -A
# 查看指定命名空间pod信息
kubectl get pod -n kube
# 查看所有pod标签信息
kubectl get pods --show-labels
# 查看指定标签的pod
kubectl get pods -l app=rs-demo
# 格式化输出自定义列信息
kubectl get pod -o custom-columns=pod_name:metadata.name,pod_image:spec.containers[0].image
kubectl get pods -o wide -n kube-public
# 查看标签
kubectl get node -n kube-public --show-labels
# 查看详细信息
kubectl describe pod 查看容器名
# 以yaml形式查看
kubectl get pod 查看容器名 -o yaml
# 查看容器日志
kubectl logs -f 容器名
# 查看哪些pod在使用此标签
kubectl get pod -l app=my-nginx2 -n kube-public
kubectl get endpoints --show-labels
# 查看命名空间
kubectl get namespaces
# 查看所有命令空间pod
kubectl get pod --all-namespaces 或者 kubectl get pod -A
# 查看指定命名空间pod信息
kubectl get pod -n kube
# 查看所有pod标签信息
kubectl get pods --show-labels
# 查看指定标签的pod
kubectl get pods -l app=rs-demo
# 格式化输出自定义列信息
kubectl get pod -o custom-columns=pod_name:metadata.name,pod_image:spec.containers[0].image
1.2 创建pod
bash
[root@kube-master ~]# kubectl run [pod名称] --image=[镜像]:[镜像版本] --port=[对外端口] --namespace [namespace]
[root@kube-master ~]# kubectl run [pod名称] --image=[镜像]:[镜像版本] --port=[对外端口] --namespace [namespace]
1.3 交互Pod
bash
#单pod
[root@kube-master ~]# kubectl exec -it pod_name -- /bin/bash
root@nginx-6799fc88d8-49dd6:/#
#多个pod
# 进入容器内部
# - your_container 你的容器名称,对应上面获取pod详情结果的 nginx
[root@kube-master ~]# kubectl exec your_pod -n your_namespace -it -c your_container /bin/bash
#单pod
[root@kube-master ~]# kubectl exec -it pod_name -- /bin/bash
root@nginx-6799fc88d8-49dd6:/#
#多个pod
# 进入容器内部
# - your_container 你的容器名称,对应上面获取pod详情结果的 nginx
[root@kube-master ~]# kubectl exec your_pod -n your_namespace -it -c your_container /bin/bash
1.4 查看Pod阶段
shell
kubectl describe pod <pod_name>
kubectl describe pod <pod_name>
1.5 删除pod
bash
kubectl delete pod pod-name
kubectl delete pod pod-name
- 批量删除pod
bash
kubectl get pod -nmonitor | grep pod_name | awk '{print $1}' | xargs kubectl delete pod -n monitor
kubectl get pod -nmonitor | grep pod_name | awk '{print $1}' | xargs kubectl delete pod -n monitor
1.6 修改pod
bash
kubectl edit pod 查看容器名
kubectl edit pod 查看容器名
1.7 Pod创建流程
1.kubectl发送部署请求到API Server
2.API Server通知Controller Manager创建一个deployment资源
3.Scheduler执行调度任务,将三个副本Pod分别发到node节点
4.node节点上的kubectl在各自的节点上创建并运行Pod
5.API Server通知ControllerManger,调用ServiceController创建一个Service资源
6.kube-proxy Watch到Service资源创建,而后在本地节点创建对应负载均衡规则
7.CoreDNS Watch到Service资源创建,为其创建DNS解析记录,可以在内部通过dns进行访问
注解,
1.应用的配置和当前状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些数据
2.网络插件calico会为每个Pod都分配IP,可以实现跨节点通信,而无需NAT地址转换
2. Pod Logs
语法:
bash
kubectl logs <pod-name> [-c <container-name>] [--previous]
kubectl logs <pod-name> [-c <container-name>] [--previous]
2.1 崩溃前日志
- 单容器
shell
kubectl logs pod-name --previous
kubectl logs pod-name --previous
- 多容器
shell
kubectl logs pod-name --previous -c container-name
kubectl logs pod-name --previous -c container-name
2.2 描述
kubectl describe pod <pod-name>
kubectl describe pod <pod-name>
2.3 检查事件
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events --sort-by=.metadata.creationTimestamp
2.4 端口转发
bash
kubectl port-forward <pod-name> <local-port>:<pod-port>
kubectl port-forward <pod-name> <local-port>:<pod-port>
访问,localhost:local-port
2.5 访问config和secrets
bash
kubectl get configmap <configmap-name> -oyaml
kubectl get secret <secret-name> -oyaml
kubectl get configmap <configmap-name> -oyaml
kubectl get secret <secret-name> -oyaml
2.6 debug containers
kubectl debug -it <pod-name> --image=busybox --target=<container-name>
kubectl debug -it <pod-name> --image=busybox --target=<container-name>
2.7 查看pod资源
kubectl top pod <pod-name>
kubectl top pod <pod-name>
2.8 网络策略和dns
kubectl get networkpolicy
kubectl get networkpolicy
bash
kubectl run -i --tty --rm debug --image=busybox --restart=Never -- nslookup <service-name>
kubectl run -i --tty --rm debug --image=busybox --restart=Never -- nslookup <service-name>
2.9 查看存储
bash
kubectl get pvc
kubectl describe pvc <pvc-name>
kubectl get pvc
kubectl describe pvc <pvc-name>
3. 优雅关闭Pod
yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- containerPort: 80
lifecycle:
preStop:
exec:
command: [
# Gracefully shutdown nginx
"sleep 5 && /usr/sbin/nginx -s quit",
]
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- containerPort: 80
lifecycle:
preStop:
exec:
command: [
# Gracefully shutdown nginx
"sleep 5 && /usr/sbin/nginx -s quit",
]
4. Pod查看pid
bash
kubectl describe pod <podName> -n <namespace>
或者是登录对应节点 通过如下命令查询
#节点是dockerd运行时
1. docker ps | grep <podName>
2. docker inspect <容器id> | grep -i pid
3. 或者使用这个命令:docker inspect <容器id> --format '{{.State.Pid}}'
#节点是containerd运行时
1. crictl pods | grep <pod名>,取第1列为pod_id
2. crictl ps | grep <pod_id>,取第1列为容器id
3. crictl inspect <容器id> | grep -i pid ,取第1行为容器pid
kubectl describe pod <podName> -n <namespace>
或者是登录对应节点 通过如下命令查询
#节点是dockerd运行时
1. docker ps | grep <podName>
2. docker inspect <容器id> | grep -i pid
3. 或者使用这个命令:docker inspect <容器id> --format '{{.State.Pid}}'
#节点是containerd运行时
1. crictl pods | grep <pod名>,取第1列为pod_id
2. crictl ps | grep <pod_id>,取第1列为容器id
3. crictl inspect <容器id> | grep -i pid ,取第1行为容器pid
- 进入pod
bash
kubectl get pod -n <namespace> -owide
# 容器ID
docker ps | grep nginx | grep -v pause | awk '{print $1}'
f807acc55709
# 查看容器Pid
docker inspect -f {{.State.Pid}} f807acc55709
#简单点
# 确定哪个节点运行容器。
kubectl get pod -owide
# 在对应的节点执行。
NAME=nginx
nsenter -t `docker ps | grep $NAME | grep -v "pause" | awk '{print $1}' | xargs docker inspect -f {{.State.Pid}}` -n
kubectl get pod -n <namespace> -owide
# 容器ID
docker ps | grep nginx | grep -v pause | awk '{print $1}'
f807acc55709
# 查看容器Pid
docker inspect -f {{.State.Pid}} f807acc55709
#简单点
# 确定哪个节点运行容器。
kubectl get pod -owide
# 在对应的节点执行。
NAME=nginx
nsenter -t `docker ps | grep $NAME | grep -v "pause" | awk '{print $1}' | xargs docker inspect -f {{.State.Pid}}` -n
5. Pod磁盘占用
5.1 查看磁盘
bash
1.首先在节点上查看dokcer目录使用的空间,得到是docker占用的磁盘。
du -sh --max-depth 1 /var/lib/docker/
2.在节点上运行以下命令,可以看到images和container占用信息。
docker system df
3.查看每个image、container详细大小
docker system df -v
4.节点上查看磁盘使用情况,并安装从大到小排序,可以看到各个容器的占用磁盘空间。
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr
1.首先在节点上查看dokcer目录使用的空间,得到是docker占用的磁盘。
du -sh --max-depth 1 /var/lib/docker/
2.在节点上运行以下命令,可以看到images和container占用信息。
docker system df
3.查看每个image、container详细大小
docker system df -v
4.节点上查看磁盘使用情况,并安装从大到小排序,可以看到各个容器的占用磁盘空间。
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr
- 效果
41.5MB (virtual 187MB) k8s_install-cni_calico-node-vxz2x_kube-system_ccd265b6-8419-4134-a342-af84e6b41fa2_0
3.73MB (virtual 159MB) k8s_consul_consul-2_monitor_c493006f-cded-4770-b6d3-9d83206b7df6_7
1.57MB (virtual 100MB) k8s_prometheus-alert-center_prometheus-alert-center-589ff75f48-f5sdv_monitor_3dd28fdd-7176-4add-98ff-95166c3b7aa2_1
41.5MB (virtual 187MB) k8s_install-cni_calico-node-vxz2x_kube-system_ccd265b6-8419-4134-a342-af84e6b41fa2_0
3.73MB (virtual 159MB) k8s_consul_consul-2_monitor_c493006f-cded-4770-b6d3-9d83206b7df6_7
1.57MB (virtual 100MB) k8s_prometheus-alert-center_prometheus-alert-center-589ff75f48-f5sdv_monitor_3dd28fdd-7176-4add-98ff-95166c3b7aa2_1
5.2 常用命令
bash
#1.获取镜像,ID,端口号,状态
docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}" | sort -hr
#2.列出正在运行的容器
docker ps -a -f "status=running"
#3.列出退出的容器
docker ps -a -f "status=exited"
#4.查看容器磁盘信息
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr
#5.获取容器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#6.获取容器的mac地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
#7.获取容器name
docker inspect --format='{{.Name}}' $(docker ps -aq)
docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
#8.获取容器的Hostname
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
#9.获取hostname,ip
docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#10.获取容器的log path
docker inspect --format='{{.LogPath}}' `docker ps -a -q`
#11.获取容器的镜像
docker inspect --format='{{.Config.Image}}' `docker ps -a -q`
#1.获取镜像,ID,端口号,状态
docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}" | sort -hr
#2.列出正在运行的容器
docker ps -a -f "status=running"
#3.列出退出的容器
docker ps -a -f "status=exited"
#4.查看容器磁盘信息
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr
#5.获取容器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#6.获取容器的mac地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
#7.获取容器name
docker inspect --format='{{.Name}}' $(docker ps -aq)
docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
#8.获取容器的Hostname
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
#9.获取hostname,ip
docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#10.获取容器的log path
docker inspect --format='{{.LogPath}}' `docker ps -a -q`
#11.获取容器的镜像
docker inspect --format='{{.Config.Image}}' `docker ps -a -q`
6.Pod滚动重启
1.通过修改 Pod 的 YAML 部署文件进行滚动更新
- 修改 Pod 的 YAML 文件,使其内容发生变化(例如更新镜像版本或环境变量)。
bash
kubectl apply -f your-pod.yaml
kubectl apply -f your-pod.yaml
2.通过 kubectl set image 命令进行滚动更新
bash
kubectl set image deployment deployment_name pod_name=new_image_name
比如:
kubectl set image deployment my-deployment my-pod=my-image:v2
kubectl set image deployment deployment_name pod_name=new_image_name
比如:
kubectl set image deployment my-deployment my-pod=my-image:v2
3.通过 rollout restart命令进行滚动更新
1. Kubernetes 1.15 之前的版本
在 Kubernetes 1.15 之前,可以通过修改 Deployment 的 annotations 来触发滚动重启。具体步骤如下:
bash
kubectl patch deployment deployment_name -p \
"{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"$(date +'%s')\"}}}}}"
kubectl patch deployment deployment_name -p \
"{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"$(date +'%s')\"}}}}}"
2. Kubernetes 1.15 及之后的版本
从 Kubernetes 1.15 开始,可以直接使用 kubectl rollout restart
命令进行滚动重启。具体步骤如下:
bash
kubectl rollout restart deployment your_deployment_name
kubectl rollout restart deployment your_deployment_name