k8s学习八:pod

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: k8s学习八:pod

pod

在k8s中,最小单元就是pod了,程序运行部署在容器中,而容器必须存在于pod中

pod可以认为是容器的封装,一个pod可以存放一个或者多个容器:

root@master:/home/tioncico# kubectl get pods
NAME                             READY   STATUS    RESTARTS      AGE
go-deployment-86f769995d-frw28   1/1     Running   0             38s
nginx-7cbb8cd5d8-w9tn2           1/1     Running   4 (12d ago)   18d

查看pod详细信息

root@master:/home/tioncico# kubectl describe pod go-deployment
Name:         go-deployment-86f769995d-frw28
Namespace:    default
Priority:     0
Node:         node-1/192.168.192.10
Start Time:   Mon, 26 Sep 2022 05:56:03 +0000
Labels:       app=go
              pod-template-hash=86f769995d
Annotations:  <none>
Status:       Running
IP:           10.244.1.10
IPs:
  IP:           10.244.1.10
Controlled By:  ReplicaSet/go-deployment-86f769995d
Containers:
  go:
    Container ID:  docker://fa6cfef2511074866a6b626295314cb4b9dc275894ec7d137616d800e1a84bae
    Image:         tioncico/go:v1.0.1
    Image ID:      docker-pullable://tioncico/go@sha256:08271bc1b9ac9317c577bf2888f36c0897996f5bae1085e941dcee62a21a8776
    Port:          8080/TCP
    Host Port:     0/TCP
    Command:
      ./main
      -v
      v1.0.1
    State:          Running
      Started:      Mon, 26 Sep 2022 05:56:11 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7fcwk (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-7fcwk:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
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  8m4s   default-scheduler  Successfully assigned default/go-deployment-86f769995d-frw28 to node-1
  Normal  Pulling    8m1s   kubelet            Pulling image "tioncico/go:v1.0.1"
  Normal  Pulled     7m57s  kubelet            Successfully pulled image "tioncico/go:v1.0.1" in 4.542296147s
  Normal  Created    7m57s  kubelet            Created container go
  Normal  Started    7m56s  kubelet            Started container go
root@master:/home/tioncico#

可以看到pod有着以下几个关键信息

pod-label

pod-label的作用就是在pod中添加标识,用来对资源进行区分和选择,例如上面的 app=go

同样可以添加版本,环境,架构等等标签  version:"1.0.1"  environment:"dev"

通过label,可以对资源进行筛选,区分

root@master:/home/tioncico# kubectl get pod -l app=go
NAME                             READY   STATUS    RESTARTS   AGE
go-deployment-86f769995d-frw28   1/1     Running   0          13m
root@master:/home/tioncico#

pod-namespace

Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。

默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。

查看列表

root@master:/home/tioncico# kubectl get namespace
NAME                   STATUS   AGE
default                Active   18d //默认的命名空间,没有声明的都会在默认
kube-flannel           Active   18d //k8s flannel插件
kube-node-lease        Active   18d //集群节点心跳维护
kube-public            Active   18d //k8s公共资源你,可以被所有人访问
kube-system            Active   18d //k8s系统创建的资源
kubernetes-dashboard   Active   18d //k8s dashboard 
root@master:/home/tioncico#

查看详情

root@master:/home/tioncico# kubectl  describe  ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active
No resource quota.
No LimitRange resource.

创建


root@master:/home/tioncico#  kubectl create ns dev-test
namespace/dev-test created

删除

root@master:/home/tioncico# kubectl delete ns dev-test
namespace "dev-test" deleted

yaml配置

可通过  kubectl get ns default -o yaml 输出yaml格式的配置项

root@master:/home/tioncico# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2022-09-07T08:11:59Z"
  labels:
    kubernetes.io/metadata.name: default
  name: default
  resourceVersion: "205"
  uid: d1f23d3c-ed99-41e8-83b3-366e203d2384
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
root@master:/home/tioncico#

pod-controller

Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:

  • 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建
  • 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建

什么是Pod控制器

Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod。

在kubernetes中,有很多类型的pod控制器,每种都有自己的适合的场景,常见的有下面这些:

  • ReplicationController:比较原始的pod控制器,已经被废弃,由ReplicaSet替代
  • ReplicaSet:保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级
  • Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、回退版本
  • Horizontal Pod Autoscaler:可以根据集群负载自动水平调整Pod的数量,实现削峰填谷
  • DaemonSet:在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务
  • Job:它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务
  • Cronjob:它创建的Pod负责周期性任务控制,不需要持续后台运行
  • StatefulSet:管理有状态应用

在我之前的文章中,基本是deployment控制器,然后控制replicaSet来控制pod的,其他控制器可以自行了解试试

image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
7天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
7天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 &quot;busybox-container&quot; 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
7天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
7天前
|
存储 Kubernetes 调度
深入理解Kubernetes中的Pod与Container
深入理解Kubernetes中的Pod与Container
15 0
|
7天前
|
Kubernetes Java 调度
Kubernetes中的Pod垃圾回收策略是什么
Kubernetes中的Pod垃圾回收策略是什么
|
7天前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理
|
运维 Kubernetes Cloud Native
如何轻松学习 Kubernetes?
《深入浅出 Kubernetes》一书共汇集 12 篇技术文章,帮助你一次搞懂 6 个核心原理,吃透基础理论,一次学会 6 个典型问题的华丽操作!
如何轻松学习 Kubernetes?
|
运维 Kubernetes 负载均衡
如何轻松学习 Kubernetes?
本文分享阿里技术专家关于 Kubernetes 的一些观点和看法,并给出学习 Kubernetes 的方法建议 ,最后分享 Kubernetes 集群上的问题排查经验。
11411 0
如何轻松学习 Kubernetes?
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景