CKA认证 | Day4 K8s管理应用生命周期(下)

第四章 K8s管理应用程序生命周期(下)

1、Pod对象

1.1 Pod 的基本概念

Pod 是 Kubernetes 中最基本和最重要的概念之一,是一个逻辑抽象概念,Kubernetes创建和管理的最小单元, 一个Pod由一个容器或多个容器组成。它简化了容器的部署、管理和扩展。通过 Pod可以轻松地将应用程序的不同组件组织在一起,确保它们共享资源和网络环境。

Pod 的主要特点:

① 容器共享网络和存储

  • 共享网络命名空间:Pod 中的所有容器共享同一个网络命名空间,这意味着它们可以使用 localhost 相互通信。
  • 共享存储卷:Pod 中的容器可以共享存储卷,便于数据交换和持久化。

② 生命周期管理

  • Pod 生命周期:Pod 的生命周期由 Kubernetes 管理,包括创建、运行、更新和终止。
  • 健康检查:Kubernetes 可以通过健康检查(Liveness Probes 和 Readiness Probes)自动管理Pod 的健康状态。

③ 自动调度

  • 节点调度:Kubernetes 自动将 Pod 调度到集群中的适当节点上,基于资源需求、策略和约束条件。
  • 高可用性和容错:如果节点发生故障,Kubernetes 会自动将 Pod 重新调度到其他节点上,确保服务的高可用性。

1.2 Pod 存在的意义

Pod主要用法:

  1. 主容器(Main Container):主要应用程序容器,通常是一个长时间运行的服务。又或者是运行单个容器,最常见的用法可以将Pod看做是单 个容器的抽象封装;
  2. 辅助容器(Sidecar Container):辅助容器,用于支持主容器的功能,如日志收集、监控代理等。又或者是运行多个容器: 通过在Pod中定义专门容器来执行主业务容器需要的辅助工作,这样好处是将辅助功能同主业务 容器解耦,实现独立发布和能力重用。

如某些场景下,有部分代码考虑是否在源代码的基础上增加,随着用户量的上升可能导致源代码的臃肿。前期可以将非核心的功能进行解耦出来,对以后业务的扩展会有很多帮助,例如:

• 日志收集

• 应用监控

1.3 Pod 资源共享实现机制

① 共享网络:将业务容器网络加入到“负责网络的容器 infa container”实现网络共享

解释:该网络容器会在创建Pod之前先创建,创建完成后其它容器会加入到这个容器实现网络共享,因为都在同一个网络协议栈(容器共享网络命名空间)

补充:Pod为k8s中的最小调度单元,所以一个Pod中如果存在多个容器,使用的IP,即POD IP,也是唯一的一个IP,可以通过这个IP访问Pod里面任何一个容器,IP是共享的。

共享网络YAML示例:

# kubectl apply -f pod-net-test.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: test
  name: pod-net-test 
  namespace: default
spec:
  containers:
  - image: busybox 
    name: bs
    command: ["/bin/sh","-c","sleep 12h"]
  - image: nginx
    name: web
# 测试
# kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP              NODE             NOMINATED NODE   READINESS GATES
pod-net-test   2/2     Running   0          42m   10.244.114.27   k8s-node2-1-73   <none>           <none>

# 进入容器
# kubectl exec -it pod-net-test -- bash   //默认会进入其中一个
Defaulted container "web" out of: web, bs

# 指定容器进入
# kubectl exec -it pod-net-test -c web -- bash
root@pod-net-test:/# curl -i 127.0.0.1    //访问容器本地IP,可获得Nginx信息


# kubectl exec -it pod-net-test -c bs -- sh   //busybox不支持bash终端
/ # wget 127.0.0.1    //可获得Nginx的index.html页面
/ # netstat -nlptu | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 :::80                   :::*                    LISTEN      -

结论:在 bs 容器中可看到监听 80端口,但是没有相关服务进程,通过127.0.0.1访问,即可得到nginx容器的index.html 页面


② 共享存储:容器通过数据卷共享数据

共享存储YAML示例:

# kubectl apply -f pod-volume-test.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: test
  name: p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

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

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

打赏作者

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

抵扣说明:

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

余额充值