Kubernetes 核心资源对象pod

pod

  • kubernetes的核心是管理容器
  • 在kubernetes当中,没有container的对象
  • 在kubernetes·当中,管理容器的最小单元是pod
  • 一个pod当中会包含一个容器或多个容器,99%的场景中,一个pod中一般只有一个容器
  • 如果一个pod中有多个容器,这些容器共享同一个ip地址,由于多个容器共享一个ip地址,所以这些容器不能监听在相同的端口上。
  • 事实上,kubernetes的一个pod至少包含两个容器,一个是正常的的应用容器,还有一个是pause容器,pause容器用于劫持pod当中的所有容器流量。

image.png

  • Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统
  • Kubernetes为每个Pod都分配了唯一的IP地址,称之为PodIP,一个Pod里的多个容器共享 PodIP地址。要求底层网络支持集群内任意两个Pod之间的直接通信,通常采用虚拟二层 网络技术来实现(Flannel)。
  • POD可以与其它主机上的POD直接通讯。
  • 如果有POD意外停止, K8S会根据资源设定重启或创建POD,直到符合预期设定值。

pod常用配置项

  • 指定pod名称 --name
  • 指定pod所使用的镜像
  • 配置镜像拉取策略
  • 配置pod重启策略 --restart
  • 配置pod所执行的任务 CMD
  • 配置pod监听的端口
  • 配置pod的/etc/hosts
  • 配置pod所需要的环境变量
-e 
nerdctl run -d -e aa=bb -e MYSQL_ROOT_PASSWORD=cka123

env: 
- name: aa
  value: bb
- name: MYSQL_ROOT_PASSWORD
  value: cka123


apiVersion: v1
kind: Pod
metadata:
  name: mysql-env
  namespace: cka 
  labels:
    name: mysql-env
spec:
  restartPolicy: Always 
  containers:
  - image: registry.cn-zhangjiakou.aliyuncs.com/breezey/mysql:5.7
    name: mysql
    imagePullPolicy: Always 
    ports:
    - name: mysql
      containerPort: 3306
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: wordpress
    - name: MYSQL_DATABASE
      value: wordpress
  • 配置pod的dns策略
  • 配置pod的网络类型
apiVersion: v1
kind: Pod
metadata:
  name: more-containers
  namespace: cka 
  labels:
    name: more-containers
spec:
  restartPolicy: Always 
  hostNetwork: false
  containers:
  - image: nginx:1.21
    name: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    env: 
    - name: aa
      value: bb
  • 配置pod的资源限制
  • 配置pod的健康检查
  • 配置pod的存储卷

pod配置示例

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 172.16.16.3:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=172.16.16.3
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-issuer=https://kubernetes.default.svc.cluster.local
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    image: registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.0
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 8
      httpGet:
        host: 172.16.16.3
        path: /livez
        port: 6443
        scheme: HTTPS
      initialDelaySeconds: 10
      periodSeconds: 10
      timeoutSeconds: 15
    name: kube-apiserver
    readinessProbe:
      failureThreshold: 3
      httpGet:
        host: 172.16.16.3
        path: /readyz
        port: 6443
        scheme: HTTPS
      periodSeconds: 1
      timeoutSeconds: 15
    resources:
      requests:
        cpu: 250m
    startupProbe:
      failureThreshold: 24
      httpGet:
        host: 172.16.16.3
        path: /livez
        port: 6443
        scheme: HTTPS
      initialDelaySeconds: 10
      periodSeconds: 10
      timeoutSeconds: 15
    volumeMounts:
    - mountPath: /etc/ssl/certs
      name: ca-certs
      readOnly: true
    - mountPath: /etc/pki
      name: etc-pki
      readOnly: true
    - mountPath: /etc/kubernetes/pki
      name: k8s-certs
      readOnly: true
  hostNetwork: true
  priorityClassName: system-node-critical
  securityContext:
    seccompProfile:
      type: RuntimeDefault
  volumes:
  - hostPath:
      path: /etc/ssl/certs
      type: DirectoryOrCreate
    name: ca-certs
  - hostPath:
      path: /etc/pki
      type: DirectoryOrCreate
    name: etc-pki
  - hostPath:
      path: /etc/kubernetes/pki
      type: DirectoryOrCreate
    name: k8s-certs
status: {}

基础必选参数

# pod的最基础的yaml文件最少需要以下的几个参数
apiVersion: v1 # API版本号,注意:具有多个,不同的对象可能会使用不同API
kind: Pod  # 对象类型,pod
metadata:  # 元数据
  name: string # POD名称
  namespace: string # 所属的命名空间
spec: # specification of the resource content(资源内容的规范)
  containers: # 容器列表
    - name: string # 容器名称
      image: string # 容器镜像

标签和注释

# 放在metadata中
metadata:
   labels: # 自定义标签的名称和值
     - key: value 
     - ...
    annotations: # 自定义注释的名称和值
      - key: value 
      - ...

容器

在容器列表containers中的各项定义

常用参数
spec:
  restartPolicy: Never
  containers:
    - name: string # 容器名称
# 镜像
      image: string
      imagePullPolicy: [Always| Never | IfNotPresent] 
      # 镜像拉取策略。Always:总是从远程拉取;Never:总是从本地拉取;IfNotPresent【默认选项】:本地不存在就远程拉取
# 启动参数
      command: [string] 
      # 容器启动命令列表,相当于Dockerfile中的ENDRYPOINT,是唯一的。如果不指定,就是使用容器本身的。示例:["/bin/sh","-c"]
      args: [string] 
      # 容器启动参数列表,相当于Dockerfile中的CMD,示例:["-c"]
# 容器工作目录
      workingDir: string
# 环境变量
      env:
        - name: string # 变量名称
          value: * # 变量值
        - name: string 
          valueFrome: # 指定值的来源
            configMapkeyRef: # 从ConfigMap中获取
              name: string # 指定ConfigMap
              key: string # 指定configMap中的key,赋值给变量
# 端口  
      ports: # 需要暴露的端口列表
        - name: string # 端口名称
          containerPort: int  # 容器端口
          hostPort: int # 容器所在主机需要监听的端口号,默认为与容器IP相同,一般可以不设置
          protocol: string # 端口协议,支持TCP和UDP,默认为TCP
# 挂载          
      volumeMounts: # 挂载定义的存储卷到容器,需要通过volumes定义
        - name: string # 定义的volume的名称
          mountPath: string # 容器内挂载的目录的绝对路径(少于512字符)
          readOnly: boolean(布尔值) # 是否只读
imagePullPolicy 镜像拉去方式配置
  • 支持三种ImagePullPolicy
    • Always:不检查本地是否存在镜像,总是从远程拉取
    • Never:总是使用本地镜像,而不从远程拉取
    • IfNotPresent:**【默认选项】**优先使用本地镜像,如果本地没有,就从远程拉取
  • 默认为IfNotPresent,但:latest标签的镜像默认为Always。
  • 拉取镜像时docker会进行校验,如果镜像中的MD5码没有变,则不会拉取镜像数据。
  • 生产环境中应该尽量避免使用:latest标签, 而开发环境中可以借助:latest标签自动拉取最 新的镜像。
restartPolicy 容器重启策略
  • 支持三种RestartPolicy
    • Always:不管因为什么原因,只要Pod退出,就会自动重启
    • OnFailure:失败退出(exit code不等于0)时重启
    • Never:只要退出就不再重启(Job和CronJob资源对象一般配置为Never)
  • 注意事项:
    • 重启是指在Pod所在Node上面本地重启, 并不会调度到其他Node上去
    • 并不是所有控制器都支持以上三种策略
dnsPolicy DNS策略配置
  • 通过设置dnsPolicy参数, 设置Pod中容器访问DNS的策略
    • ClusterFirst:pod启动时为其配置集群内部的DNS 【默认配置参数】
    • Default:pod启动时为其配置宿主机的DNS
    • None:不使用任何dns策略,用户需要自己为该Pod定义dns ,可做如下配置
spec:
  dnsPolicy:None
  dnsConfig:
    nameservers:
    - 223.5.5.5
    - 8.8.8.8
    options:
    - name:timeout
      value:"1"
    - name:signale-request-reopon

  - **ClusterFirstWithHostNetwork**
hostNetwork 网络配置
  • hostNetwork只有两个值
    • true:使用宿主机ip
    • false:集群分配ip**【默认值】**
apiVersion: v1
kind: Pod
metadata:
  name: more-containers
  namespace: cka 
  labels:
    name: more-containers
spec:
  restartPolicy: Always 
  hostNetwork: false
  containers:
  - image: nginx:1.21
    name: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    env: 
    - name: aa
      value: bb
initContainers 容器初始化
  • InitContainer在所有容器运行之前执 行(run-to-completion),常用来初始化配置。
  • 初始化容器一定会先于主容器启动
  • 初始化容器执行的任务不能是一个长时的任务
  • 初始化容器只有正常退出之后主容器才能启动
  • 初始化容器可以有多个,这多个初始化容器会顺序启动,并且全部正常退出之后,主容器才能启动
  • 初始化容器主要是在主容器启动之前为主容器做准备工作
  • 配置示例
apiVersion: v1
kind: Pod
metadata:
  name: webserver-initcontainers
  namespace: cka 
  labels:
    name: webserver-initcontainers
spec:
  restartPolicy: Always 
  volumes:
  - name: datadir 
    emptyDir: {}
  initContainers:
  - image: busybox:1.28
    name: busybox
    volumeMounts:
    - name: datadir
      mountPath: /tmp/xxx
    imagePullPolicy: IfNotPresent
    command:
    - /bin/sh 
    - -c 
    args:
    - "echo 'hello initcontainer' > /tmp/xxx/index.html"
  - image: busybox:1.28
    name: busybox-init
    volumeMounts:
    - name: datadir
      mountPath: /tmp/xxx
    imagePullPolicy: IfNotPresent
    command:
    - /bin/sh 
    - -c 
    args:
    - "echo 'two initcontainers' > /tmp/xxx/aaa.html"
  containers:
  - image: nginx:1.21
    name: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: datadir
      mountPath: /usr/share/nginx/html
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    env: 
    - name: aa
      value: bb
资源配额
  • pod的优先级:
    • QoS Class: BestEffort
    • QoS Class: Burstable
    • QoS Class: Guaranteed
  • 资源和请求的限制卸载resource下面
    • limits: 当前容器的最大资源使用量
      • 如果使用的cpu超出了限制,会触发cpu限流
      • 如果使用的memory超出了限制,会触发oom
    • requests: 当前容器占用的最小资源,这个配置是给调度器看的
      • 当requests = limits时,则Guaranteed,当出现资源不足时,kubernetes会优先保证这种pod的资源使用
      • 但是requests和limits不相等时,则Burstable
      • 没有配置resources,则BestEffort
resources:
  #0.05 32Mi 
  # 在宿主机上,0.05核和96Mi是空闲的, 但是在调度器的眼里,这个pod跑满了0.1核128Mi
  requests:
    cpu: "0.1"   0.05
    memory: 128Mi  96Mi
  limits:
    cpu: "200m"
    memory: 256Mi
 # 还可以写成如下的形式
 # one:只配置limits,此时 requests=limits
 resources:
  limits:
    cpu: "1"
    memory: 1Gi
# two
resources:
  requests:
    cpu: "100m"
    memory: 128Mi
  limits: 
    cpu: "200m"
    memory: "256Mi"
# three:只配置requests
resources:
  requests:
    memory: 32Mi

  • 相关参数解析
# 资源和请求的设置
resource:
  limits: # 资源限制
    cpu: string # CPU限制。两种方式可以直接指定使用核数,也可以用单位:m来指定。 
              # 0.5 :相当于0.5颗
              # 一台服务器的CPU总量等于核数乘以1000。设机器的核数为两核,则总量为2000m。此时设置CPU限制为100m,则相当于是使用了100/2000,也就是5%。此时0.5=500m
    memory: string # 内存限制。
                 # 单位:直接使用正整数表示Byte;k;m;g;t;p
                 # 不区分大小写(Kilobyte,Megabyte,Gigabyte,Terabyte,Petabyte)
  requests:  # 资源请求设置,也就是容器启动时的初始资源请求,一般和limits相同可不设
    cpu: string
    memory: string
健康检查
  • 三种探针来检查容器的健康状态
    • **startupProbe: **用于在启动阶段探活,其预期探活失败, 如果发现探活成功,则认为pod已经正常启动,此时startupProbe的使命结束,退出不再执行;如果最终失败,则pod无法就绪
    • **livenessProbe: **在starupProbe正常退出后,才会启动,用于周期性探活,其预期探活会成功, 如果失败,则杀掉pod,重新启动
    • **readinessProbe: **在startupProbe正常退出后,才会启动。用于周期性探活,其预期探活会成功,如果失败,则将pod标记为不健康
  • 参数解析
  livenessProbe: # 如果探测失败会重启容器
    exec: # 通过在容器内执行命令或脚本的方式,命令执行状态码为0,视为探测成功
      command: [string]
    httpGet: # 通过http get的方式访问容器IP地址,并指定端口和路径,如果响应码会2xx或3xx视为成功
      path: string # 访问路径,也就是UPI示例:/index.html
      port: number # 访问端口
      host: string # 访问的主机名,默认为容器IP,可不设
      scheme: string # 用于连接的协议,默认为http,可不设
      httpHeaders: # 自定义请求头
        - name: string # 名称
          value: string # 值
    tcpSocket: # 通过tcp协议对端口进行检测如果端口可以连通就视为检测成功
      port: number
# 检测参数配置
     initialDelaySeconds: number # 初始延迟秒数,也就容器启动多久后开始检测
     timeoutSeconds: number # 响应超时时间
     periodSeconds: number # 检测周期,也就检测时间间隔

  • 配置示例
apiVersion: v1
kind: Pod
metadata:
  name: webserver-health
  namespace: cka 
  labels:
    name: webserver-health
spec:
  tolerations:
    - operator: Exists
  restartPolicy: Always 
  hostNetwork: false
  volumes:
  - name: datadir 
    emptyDir: {}
  initContainers:
  - image: busybox:1.28
    name: busybox
    volumeMounts:
    - name: datadir
      mountPath: /tmp/xxx
    imagePullPolicy: IfNotPresent
    command:
    - /bin/sh 
    - -c 
    args:
    - "echo 'hello initcontainer' > /tmp/xxx/index.html"
  containers:
  - image: nginx:1.21
    name: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: datadir
      mountPath: /usr/share/nginx/html
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    env: 
    - name: aa
      value: bb
    startupProbe:
      tcpSocket:
        port: 80
      periodSeconds: 10
      failureThreshold: 30 
      successThreshold: 1
      timeoutSeconds: 1
      initialDelaySeconds: 5
    livenessProbe:
      httpGet:
        path: /
        scheme: HTTP 
        port: 80
      periodSeconds: 10
      failureThreshold: 3 
      successThreshold: 1
      timeoutSeconds: 1
    readinessProbe:
      httpGet:
        path: /healthz
        scheme: HTTP    
        port: 80
      periodSeconds: 1
      failureThreshold: 3 
      successThreshold: 1
      timeoutSeconds: 1


存储卷
  • 容器的数据无法持久化
    • hostPath: 将宿主机的目录挂载至容器的指定路径,如果一个pod在多个主机之间发生调度时,hostPath的数据是无法共享的。
    • emptyDir: 临时存储,存储在emptyDir当中的数据也不具备持久化的能力;emptyDir会随着pod的销毁而自动删除。
      • 主要使用的场景
        • 一个pod当中的多个容器共享同一份数据,而这个数据又不需要持久化
        • 缓存: emptyDir可以被定义为一个内存型存储,用于提供数据缓存
  • 相关参数说明
spec:
  volumes: # 存储卷有多种类型,以下为一些常用类型
    - name: string # 存储卷名称
      emptyDir: {} # 该类存储卷是临时生成的一个目录,与pod生命周期同步
    - name: string 
      hostPath: # 挂载宿主机的目录
        path: string   # 用于挂载的目录
    - name: string
      nfs:
        server: string # 服务IP地址
        path: string # 用于挂载的目录
    - name: string
      persistentVolumeClaim: # 调用已经创建的持久卷
            claimName: string # 持久卷声明的名称
    - name: string
      configMap: # 挂载ConfigMap到容器内
        name: string # ConfigMap的名称
        items: # 要调用的键,值会被写入文件,可以设定多个,在被volumeMounts调用时,这些文件会被一起放在挂载目录下,也可以挂入到一个文件
          - key: string
            path: string  # 文件名
    - name: string
      secret: # 挂载secret到容器内
        secretname: string
        items:
          - key: string
            path: string
  • 示例
apiVersion: v1
kind: Pod
metadata:
  name: webserver-emptydir-cache
  namespace: cka 
  labels:
    name: webserver-emptydir-cache
spec:
  dnsPolicy: None
  dnsConfig:
    nameservers:
    - 223.5.5.5
    - 8.8.8.8
    options:
    - name: timeout
      value: "1"
    - name: single-request-reopen
    - name: ndots
      value: "3"
  restartPolicy: Always 
  hostNetwork: false
  volumes:
  - name: datadir 
    hostPath:
      path: /data/website
  - name: cachedir
    emptyDir:
      medium: Memory
      sizeLimit: 32Mi
  - name: tmpdir  # 临时目录
    emptyDir: {}
  containers:
  - image: nginx:1.21
    name: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: datadir
      mountPath: /usr/share/nginx/html
    - name: cachedir
      mountPath: /tmp/xxx
    - name: tmpdir
      mountPath: /tmp/yyy
    ports:
    - name: http
      containerPort: 80
      protocol: TCP
    env: 
    - name: aa
      value: bb

其它

spec:
  restartPolicy: [Always|Never|OnFailure] # 重启策略                       # OnFailure:只有在pod为非0码退出时才重启
  nodeSelector: # 根据标签调度到的指定node节点,使用前需要对节点打标签
     key: value # 使用命令kubectl label nodes node-name key=value 
   imagePullSecrets: # 指定镜像拉取时使用账户密码。需要先保存到Secret中
      - name: string
   hostNetwork: false # 是否使用主机网络,默认为false

静态pod

  • kubelet: 调用containerd运行容器的,从master获取要运行的容器,在本地运行。

  • kubelet可以不依赖master而独立运行;我们可以直接调用kubelet创建pod, 这种绕过master直接向kubelet请求创建的Pod,被称之为静态Pod。

  • 静态pod是被kubelet直接创建的,它无法接受master的调度,k8s集群中默认有如下静态pod

    • etcd
    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
  • kubeadm初始化集群的方式就是借助了静态Pod的方式将容器运行在kubelet管理的静态Pod中

  • **由于静态Pod只受所在节点的kubelet控制,可以有效预防通过kubectl、或管理工具操作的误删除,可以用来部署核心组件应用。保障应用服务总是运行稳定数量和提供稳定服务 **

  • 静态pod的默认存放路径为**:/etc/kubernetes/manifests/**

    ![image.png](https://img-blog.csdnimg.cn/img_convert/15b8f44ba5b519d1e9bd02862d75a4d2.png#clientId=ue703e4b4-06a0-4&from=paste&height=98&id=u3685d915&margin=[object Object]&name=image.png&originHeight=196&originWidth=761&originalType=binary&ratio=1&size=26116&status=done&style=none&taskId=u8a097be1-b3de-4b6a-869f-731f70c5acd&width=380.5)
    
  • **创建静态Pod的方式有两种: 配置文件、HTTP **

    • 配置文件

      • 以配置文件方式部署静态Pod,需要开启kubelet组件的 –pod-manifest-path= 参数,来配置静态Pod的配置文件目录。配置文件是以标准的JSON 或 YAML 格式定义的Pod。kubelet会定期扫描静态配置文件目录,根据这个目录添加和移除的JSON或YAML文件来启动和删除静态Pod。
        • 如果把 pod的yaml描述文件放到 这个目录中,等kubelet扫描到文件,会自动在本机创建出来 pod;
        • 如果把 pod的yaml文件更改了,kubelet也会识别到,会自动更新 pod;
        • 如果把 pod的yaml文件删除了,kubelet会自动删除掉pod;
        • 因为静态pod 不能被 api-server 直接管理,所以它的更新删除操作不能由 kubectl 来执行,只能直接修改或删除文本文件。
    • HTTP

      • Kubelet周期地从 --manifest-url 参数指定的地址下载文件,并且把它翻译成JSON/YAML格式的pod定义。此后的操作方式与 --pod-manifest-path相同,kubelet会不时地重新下载该文件,当文件变化时对应地终止或启动静态pod

使用pod yaml文件创建容器

  • 编写yaml文件

apiVersion: v1
kind: Pod

其它

creationTimestamp: null
labels:
run: wgtest
name: nginxtest
spec:
containers:

  • image: nginx:1.21
    labels:
  • 使用yaml文件创建容器

kubectl apply -f nginx.yaml
image.png

创建容器

kubectl run webserver --image=nginx:1.21

查看容器详情

kubectl describe po webservice

[root@k8s01 ~]# kuberctl run webservice --image=nginx:1.21
-bash: kuberctl: command not found
[root@k8s01 ~]# kubectl run webservice --image=nginx:1.21
pod/webservice created
[root@k8s01 ~]# kubectl describe po webservice
Name: webservice
Namespace: default
Priority: 0
Node: k8s03/172.16.16.6
Start Time: Thu, 17 Mar 2022 15:42:55 +0800
Labels: run=webservice
Annotations: cni.projectcalico.org/containerID: 977ffdc7825ff1653b6cee63bb09b68 4a5fe798d6a6626a690dbedc64196c2a7
cni.projectcalico.org/podIP: 10.244.235.129/32
cni.projectcalico.org/podIPs: 10.244.235.129/32
Status: Pending
IP:
IPs:
Containers:
webservice:
Container ID:
Image: nginx:1.21
Image ID:
Port:
Host Port:
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-k4n5v ( ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-k4n5v:
Type: Projected (a volume that contains injected data fro m multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional:
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists fo r 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message


Normal Scheduled 20s default-scheduler Successfully assigned default/webs ervice to k8s03
Normal Pulling 19s kubelet Pulling image “nginx:1.21”
[root@k8s01 ~]# kubectl describe po webservice
Name: webservice
Namespace: default
Priority: 0
Node: k8s03/172.16.16.6
Start Time: Thu, 17 Mar 2022 15:42:55 +0800
Labels: run=webservice
Annotations: cni.projectcalico.org/containerID: 977ffdc7825ff1653b6cee63bb09b684a5fe798d6a6626a690dbedc64196c2a7
cni.projectcalico.org/podIP: 10.244.235.129/32
cni.projectcalico.org/podIPs: 10.244.235.129/32
Status: Running
IP: 10.244.235.129
IPs:
IP: 10.244.235.129
Containers:
webservice:
Container ID: containerd://f16e8ec598f85340489875e166c3d30927a1ac2b6b4108ee937b907425355bc9
Image: nginx:1.21
Image ID: docker.io/library/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Port:
Host Port:
State: Running
Started: Thu, 17 Mar 2022 15:43:17 +0800
Ready: True
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-k4n5v (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-k4n5v:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional:
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
** Type Reason Age From Message**
** ---- ------ ---- ---- -------**
** Normal Scheduled 46s default-scheduler Successfully assigned default/webservice to k8s03**
** Normal Pulling 45s kubelet Pulling image “nginx:1.21”**
** Normal Pulled 24s kubelet Successfully pulled image “nginx:1.21” in 21.34189988s**
** Normal Created 24s kubelet Created container webservice**
** Normal Started 24s kubelet Started container webservice**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

班婕妤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值