Pod,Deployment,ReplicaSet,Service关系

本文深入解析Kubernetes中Pod作为最小部署单元的角色,及其与Deployment的关系。阐述了Pod如何封装应用程序容器、存储资源及网络配置,并解释了为什么通常不直接使用Pod,而是通过Deployment进行应用部署。同时,对比了Deployment与ReplicationController的功能优势。

k8s中创建busybox容器,使用deployment和pod的区别,

Kubernetes(四) - Pod和Deployment

k8s(Kubernetes)中Pod,Deployment,ReplicaSet,Service之间关系分析

Pod最小的单元

Pod封装了一个或多个应用程序的容器(比如nginx等),存储资源,唯一的网络IP以及管理容器的一些选项
Pod标示的是一个部署单元,可以理解为Kubernetes中的应用程序的单个实例,它可能由单个容器组成,也可能由少量紧密耦合并共享资源的容器组成。

如果多个容器在同一Pod下他们公用一个IP所以不能出现重复的端口号,比如在一个Pod下运行两个nginx就会有一个容器异常,一个Pod下的多个容器可以使用localhost来访问对方端口

应为Pod是最小的单元如果在Pod中容器出现异常终止了是不会重启,在实际使用场景下基本不会直接使用Pod而是使用Deployment部署自己的应用

Deployment部署

在早期版本使用Replication Controller对Pod副本数量进行管理,在新的版本中官方推荐使用Deployment来代替RC,Deployment相对RC有这些好处

Deployment拥有更加灵活强大的升级、回滚功能,并且支持滚动更新
使用Deployment升级Pod只需要定义Pod的最终状态,k8s会为你执行必要的操作(RC要自己定义如何操作)

busybox.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      restartPolicy: Always
      containers:
      - name: busybox
        command:
        - sleep
        - "3600"
        image: busybox:1.28.3





# cat<<EOF | kubectl apply -f -
# apiVersion: v1
# kind: Pod
# metadata:
#   name: busybox
#   namespace: default
# spec:
#   containers:
#   - name: busybox
#     image: busybox:1.28.3
#     command:
#       - sleep
#       - "3600"
#     imagePullPolicy: IfNotPresent
#   restartPolicy: Always
# EOF

### KubernetesPodDeploymentService Ingress 的作用与配置方法 在 Kubernetes 中,PodDeploymentService Ingress 是构建管理容器化应用的核心组件,它们各自承担不同的职责,并在项目部署交付中形成完整的链路。 #### Pod:容器运行的最小单元 PodKubernetes 中最小的可部署单元,包含一个或多个共享资源的容器。每个 Pod 代表一个运行实例,通常用于承载应用的容器化服务。Pod 的生命周期是短暂的,当 Pod 被删除或节点故障时,Pod 会终止,其状态不会被保留。 ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 ``` #### Deployment:实现应用的声明式管理滚动更新 Deployment 用于管理 Pod 的副本集(ReplicaSet),实现应用的自动扩缩容、滚动更新版本回滚。通过定义期望状态,Kubernetes 会确保实际状态与期望一致,从而实现高可用自愈能力。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 ``` #### Service:实现 Pod 的网络访问与负载均衡 Service 为一组 Pod 提供稳定的网络访问入口,并实现负载均衡。即使 Pod 发生变化,Service 的 IP 端口保持不变,确保外部访问的稳定性。Service 通过标签选择器(selector)关联到对应的 Pod。 ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 ``` #### Ingress:实现外部 HTTP/HTTPS 路由管理 Ingress 是 Kubernetes 中用于管理外部访问的 API 资源,通常与 Ingress Controller(如 Nginx Ingress Controller)配合使用,提供基于路径或域名的路由规则,将外部请求转发到对应的 Service。Ingress 支持 SSL 终止、路径重写、虚拟主机等功能,适用于对外暴露 Web 服务。 ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /app pathType: Prefix backend: service: name: nginx-service port: number: 80 ``` ### 各组件在项目部署交付中的关系 在项目部署交付过程中,PodDeploymentService Ingress 各司其职,形成完整的部署链路。Deployment 负责 Pod 的创建与管理,确保应用的可用性;ServicePod 提供稳定的访问地址;Ingress 则作为外部访问的统一入口,提供基于路径或域名的路由控制。这种分层结构使得应用部署具备良好的可维护性、扩展性安全性。 在实际部署中,通常先定义 Deployment 来管理 Pod,再通过 Service 暴露服务,最后使用 Ingress 对外提供访问路径。这种模式广泛应用于微服务架构云原生项目的交付中,提升了部署的灵活性可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值