Kubernetes 系列(一)Pod

作者: LemonNan
原文地址: https://juejin.im/post/6862733649272537102

简单介绍

Pod 在 kubernetes 中是一个非常重要的基本概念, 别名容器组, 它是 Kubernetes 调度的最小单位.

每个Pod 都有一个被称为 “根容器” 的 Pause 容器, Pause 容器对应的镜像属于 Kubernetes 平台的一部分, 除了这个 Pause 容器, Pod 中还有一个或者或多个用户的业务容器.一般是一个 Pod 只包含一个业务 container, 除非是一些比较紧密联系的应用才会将多个容器(container) 放到一个 Pod 里面.
Pod 是一个逻辑概念, 使用 Pod 有以下好处:

  • Pod 整体状态: Pause 容器的状态作为整体的 Pod 的状态, Pause 容器跟业务无关并且不易死亡
  • 共享特性: Pod 里的多个业务容器共享 Pause 容器的IP, 共享 Pause 容器挂接的 Volume, 这样既解决了容器间通信问题, 也解决了文件共享问题.

操作流程

尝试运行一个 Kubernetes 环境下的一个 nginx.

nginx.yaml

首先创建一个简单的测试的 yaml 文件, nginx.yaml

apiVersion: v1	
kind: Pod				# 创建的是Pod类型
metadata:				# 元数据, 一些基础信息
  name: nginx-test	# 名称
  labels:
    name: nginx			# 标签
spec:
  containers:
  - name: nginx 		# 容器名称
    image: nginx:latest	# 使用的镜像
    ports:
    - containerPort: 80 # 容器监听的端口号

实操

创建 Pod

接下来就是根据 yaml 文件创建Pod.

# 执行
kubectl create -f ./nginx.yaml
# 结果输出
pod/nginx-test created

获取IP

接下来查看刚创建的 Pod 信息, 获取 Pod 的 IP 地址 172.17.0.7

# 查看pod信息
kubectl get pods -o wide
# 获取IP: 172.17.0.7
NAME                                READY   STATUS             RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
nginx-test                          1/1     Running            0          53s   172.17.0.7   minikube   <none>           <none>

进入到 minikube

# minikube 默认用户名:docker 密码:tcuser , 我的地址是 192.168.99.100
ssh docker@192.168.99.100

访问 Pod

# 访问 pod 的 ip
curl 172.17.0.7

下面是结果图
在这里插入图片描述

最后

本文是 Kubernetes 系列的第一篇, 简单的介绍了 Kubernetes 中最基础的一个概念 Pod 及 Pod 的一个简单实用, 下一篇将介绍在 Kubernetes 下如何使用跟 Pod 密切关联的 Service.

### Kubernetes 创建 Pod 的详细流程 #### 、提交请求至 API Server 当用户通过 `kubectl` 提交了个用于创建 Pod 的 YAML 文件时,该命令实际上会把文件中的配置发送给集群的入口——API Server。API Server 负责接收并处理所有的 REST 请求,它会对传来的数据执行系列的安全措施,比如身份验证和权限校验等操作来保障系统的安全性[^2]。 #### 二、资源对象存储于 Etcd 中 旦上述安全检查顺利完成,API Server 并不会立即着手构建新的 Pod 实体;相反地,其首要任务是将接收到的信息转换成种内部使用的结构化形式(例如以 JSON 或者 YAML 表达的对象),随后将其持久化保存到键值数据库 Etcd 当中。这步骤确保了即使发生意外情况也能恢复未完成的任务状态[^3]。 #### 三、调度器选取节点 紧接着,Scheduler 组件开始发挥作用。它依据预定策略挑选最合适的计算节点作为即将部署的目标位置,并向选定目标发出指示以便后续工作能够顺利开展。值得注意的是,在此之前 Scheduler 已经从 Etcd 获取到了待分配的工作负载详情以及当前可用资源状况等相关情报[^1]。 #### 四、Kubelet 执行实际创建工作 随着指定主机被确认下来之后,位于各台机器上的代理服务 Kubelet 收到来自控制平面的通知消息后便开始了真正的行动:下载镜像、准备必要的环境变量设置等系列前置条件满足以后,最终调用 Docker Daemon 来实例化具体的容器实体。与此同时,为了保持与管理端之间的沟通顺畅无阻,Kubelet 还需定期汇报最新进展直至整个生命周期结束为止[^4]。 #### 五、CNI 插件负责网络连接建立 对于那些涉及到跨宿主机通信需求的应用场景而言,则还需要额外借助 CNI (Container Network Interface) 类型插件的帮助才能达成目的。这类工具通常会在新成员加入集群之时自动为其分配 IP 地址以及其他必要参数从而使得各个组成部分之间可以相互识别访问[^5]。 ```bash # 使用 kubectl 命令查看 pod 状态变化过程 $ kubectl get pods -w ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柠檬楠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值