【kubernetes】-3 pod基础和yaml文件
文章目录
- pod基础和YAML文件
- 1、pod简要介绍
- 1.1 pod中的容器种类
- 1.2 pod的特性
- 1.2.1 共享资源
- 1.2.2 pod的三种类型
- 1.2.3 镜像下载策略
- 1.2.4 pod容器的重启策略
- 2、YAML文件
- 1. Deployment 示例
- 2. Service 示例
- 常用操作
- 创建资源
- 查看资源
- 查看生成的YAML格式
- 使用yaml文件格式导出并修改配置
- 查看字段帮助信息
- **Kubernetes 中的端口说明**
pod基础和YAML文件
1、pod简要介绍
1.1 pod中的容器种类
- init容器–初始化容器
初始化容器式第一个运行的容器,作用是为后面的容器运行准备初始化运行环境,并且完成之后退出
- pause容器–基础容器
为业务容器提供共享namespace,例如mount namespace 、network namespace 等
- 业务容器:
实际运行的业务应用,一个pod中可以有多个业务容器,在kubectl get pod 中,业务容器的数量会被计算到READY的就绪指标中 例如 :READY 1/1
1.2 pod的特性
1.2.1 共享资源
- 同一个pod中的容器运行在同一个node节点上
- 容器之间通过localhost相互通信,共享一个IP和端口范围
- 共享同一个存储卷(volume),实现容器之间的数据共享
1.2.2 pod的三种类型
- 自主式pod
- 由scheduler调度到node节点部署
- 不被控制器管理,没有自愈能力(pod挂了不会被重建)
- 没有副本管理能力,不支持滚动更新
- 配置信息存储在etcd中
- 创建命令:
kubectl run
- 控制器管理的pod
- 由scheduler调度到node节点部署
- 被控制器(如deployment、statefulset)管理
- 具有自愈能力
- 支持副本文件滚动更新
- 配置信息存储在etcd中
- 创建命令
kubectl create deployment...
- 静态pod
- 不由scheduler调度,也不通过API server创建
- 由kubelet自行创建和管理
- 配置信息存储在node节点的
/etc/kubernetes/manifests
目录中 - kubelet会自动根据该目录中的YAML文件创建静态pod
- 删除YAML文件后,kubelet会自动删除静态pod
1.2.3 镜像下载策略
通过imagepullpolice
字段定义
- IfNotPresent
- 优先使用Node节点本地已存在的镜像
- 如果本地没有,则从仓库中拉取镜像
- 默认策略:适用于标签为非latest的镜像
- Always
- 总是从仓库拉取镜像,无论本地是否存在
- 默认策略:适用于标签为latest或者无标签的镜像
- Never
- 仅适用于Node节点本地的镜像,总是不从仓库拉取镜像
1.2.4 pod容器的重启策略
通过restarpolice字段定义
- Always
- 当容器退出时,总是重启容器(无论退出状态码如何)
- 默认策略:适用于Deployment、Statefulset、Daemonset等控制器管理的pod
- OnFailure
- 仅当容器异常退出时(退出状态码为非0),重启容器
- 正常退出的容器不会重启
- Never
- 当容器退出时,总是不能重启容器
【注】:deployment、statefulset、daemonset 控制器的pod容器重启策略只能设置为always
2、YAML文件
1. Deployment 示例
apiVersion: apps/v1 # API 版本,如果是业务场景一般首选使用 apps/v1。带有beta字样的代表的是测试版本,不用在生产环境中
kind: Deployment # 定义资源的类型/角色,deployment为无状态应用控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata: # 定义资源的元数据信息,比如资源的名称、namespace、标签等信息name: nginx-deployment # 资源名称,在同一个namespace空间中必须是唯一的labels: # 标签app: nginx
spec: # 定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性replicas: 3 # 副本数量selector: # 标签选择器matchLabels: # 定义匹配标签app: nginx # 需与 .spec.template.metadata.labels 定义的标签保持一致template: # Pod 模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配metadata:labels: # 定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致app: nginxspec:containers: # 容器定义- name: nginx # 容器名称,一个 - name: 定义一个容器image: nginx:1.15.4 # 镜像以及版本ports:- containerPort: 80 # 容器端口
- API 资源版本标签
- 通过以下命令查看支持的 API 版本:
kubectl api-versions
常用版本:
apps/v1
:业务场景首选。v1
:核心资源(如 Pod、Service)的稳定版本。beta
:测试版本,不建议用于生产环境。
2. Service 示例
apiVersion: v1
kind: Service
metadata:name: nginx-service # 服务名称labels:app: nginx
spec:type: NodePort # 服务类型ports:- port: 8080 # 服务端口targetPort: 80 # 容器端口nodePort: 30007 # 节点端口selector:app: nginx # 选择器,匹配 Pod 标签
常用操作
创建资源
kubectl create -f nginx-deployment.yaml
kubectl create -f nginx-service.yaml
查看资源
kubectl get pods -o wide
kubectl get svc
查看生成的YAML格式
# 查看 Pod 的 YAML 配置
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml# 查看 Deployment 的 YAML 配置
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
使用yaml文件格式导出并修改配置
# 导出 Pod 配置到 nginx-test.yaml
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml# 导出 Deployment 配置到 nginx-deploy.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml
查看字段帮助信息
kubectl explain deployments.spec.template.spec.containers
#或
kubectl explain pods.spec.containers
Kubernetes 中的端口说明
port
:Service 在集群内部的访问端口,通过clusterIP:port
访问。nodePort
:外部访问 Service 的端口,通过nodeIP:nodePort
访问(默认范围:30000-32767)。targetPort
:Pod 的端口,流量从port
或nodePort
转发到 Pod 的targetPort
。 8080containerPort
:Pod 内容器的端口,targetPort
映射到containerPort
。