Skip to content

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地址转换

image-20240411232310722

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