全书目录

第十一篇:Kubernetes 完全指南 —— 星际舰队宇宙

第十二章:把整条链串起来 —— 一次完整发布到底发生了什么

1 分钟 199 字 第 235 / 962 个阅读单元

现在把对象关系一口气串起来。

text
外部用户
   │
   ▼
Ingress
   │
   ▼
Service
   │
   ▼
Deployment
   │
   ▼
ReplicaSet
   │
   ▼
Pods
   │
   ▼
Nodes

ConfigMap / Secret ----> Pods
Scheduler -------------> Pods -> Nodes
HPA -------------------> Deployment.replicas

你真正交付时,通常会有这样一组文件:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: city-config
data:
  APP_ENV: "production"
---
apiVersion: v1
kind: Secret
metadata:
  name: city-secret
type: Opaque
stringData:
  API_TOKEN: "replace-me"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: city-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: city-app
  template:
    metadata:
      labels:
        app: city-app
    spec:
      containers:
        - name: app
          image: ghcr.io/example/city-app:1.0.0
          ports:
            - containerPort: 8080
          envFrom:
            - configMapRef:
                name: city-config
            - secretRef:
                name: city-secret
          readinessProbe:
            httpGet:
              path: /healthz
              port: 8080
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /livez
              port: 8080
            periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
  name: city-app-svc
spec:
  selector:
    app: city-app
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: city-app-ing
spec:
  ingressClassName: nginx
  rules:
    - host: city.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: city-app-svc
                port:
                  number: 80
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: city-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: city-app
  minReplicas: 3
  maxReplicas: 12
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

一键应用:

bash
kubectl apply -f k8s/

然后检查整条链:

bash
kubectl get configmap,secret
kubectl get deploy,rs,pods
kubectl get svc,ing
kubectl get hpa
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl rollout status deployment/city-app

你会逐渐发现,Kubernetes 真正常用的不是“记几十个对象”,而是记住这条运行链:

配置进 Pod,Pod 被 Deployment 管,Deployment 被 Service 暴露,Service 被 Ingress 对外接入,HPA 决定副本数,Scheduler 决定落哪台 Node。