service
apiVersion: v1
kind: Service
metadata:
name: archiver-svc
namespace: archiver
labels:
external-dns.alpha.kubernetes.io/controller: dns-controller
service.beta.kubernetes.io/loadbalancer-controller: hcl
app.kubernetes.io/app-service-code: archiver
app.kubernetes.io/app: archiver
spec:
type: ClusterIP
ports:
- port: 8000
targetPort: 8000
protocol: TCP
name: http
selector:
app.kubernetes.io/app-service-code: archiver
app.kubernetes.io/app: archiver
- 名称:archiver-svc(命名空间 archiver)
- 类型:ClusterIP(仅集群内可访问,默认自动分配集群内 IP)
- 端口映射:Service 的 8000 端口映射到 Pod 的 8000 端口(targetPort: 8000)
- 标签选择器:通过
app.kubernetes.io/app-service-code: archiver 和 app.kubernetes.io/app:
archiver 匹配 Pod
Service 本身不提供服务,仅通过标签选择器将流量转发到匹配的 Pod。如果 Service 无法找到对应的 Pod,会出现Endpoint 为空的情况,即使 Service 存在,也无法访问应用。
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
# Deployment 名称
name: nginx-deploy
# 命名空间(默认 default,可自定义)
namespace: default
# 标签(便于筛选和管理)
labels:
app: nginx
env: prod
spec:
# 副本数
replicas: 3
# 标签选择器:匹配 Pod 模板的 labels
selector:
matchLabels:
app: nginx
# 策略:更新策略(可选,默认 RollingUpdate)
strategy:
# 滚动更新(逐步替换旧 Pod)
type: RollingUpdate
rollingUpdate:
# 最多不可用的 Pod 数(百分比或数值)
maxUnavailable: 1
# 最多超出期望副本数的 Pod 数
maxSurge: 1
# Pod 模板(定义 Pod 的配置)
template:
metadata:
# Pod 的标签(必须与 selector.matchLabels 匹配)
labels:
app: nginx
spec:
# 容器列表(一个 Pod 可包含多个容器)
containers:
- name: nginx
# 镜像地址(建议指定版本,避免拉取 latest 镜像)
image: nginx:1.25
# 镜像拉取策略(Always/Never/IfNotPresent)
imagePullPolicy: IfNotPresent
# 容器端口(仅用于声明,不暴露给集群外)
ports:
- containerPort: 80
protocol: TCP
# 资源限制(推荐配置,避免资源抢占)
resources:
requests:
# 申请的最小资源
cpu: 100m
memory: 128Mi
limits:
# 允许使用的最大资源
cpu: 200m
memory: 256Mi
# 健康检查(存活探针,可选但推荐)
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
# 就绪探针(可选但推荐)
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
# 环境变量(可选)
env:
- name: TZ
value: Asia/Shanghai
# 重启策略(Always/OnFailure/Never,默认 Always)
restartPolicy: Always
- Deployment 的 spec.selector.matchLabels 必须与 Pod 模板的标签完全匹配,否则 Deployment 无法识别和管理它创建的 Pod。
简单说:Deployment 通过这个标签 "认亲",知道哪些 Pod 是自己的孩子。