3.2 Kubenetes Controller

状态

无状态:

  • 认为pod是一致的
  • 没有顺序要求
  • 不用考虑在哪个node上执行
  • 随意伸缩
    有状态:
  • 上面的都需要考虑
  • 让每个pod都独立,保持pod的启动顺序和唯一性
  • 唯一的网络标识符

deployment vs statefulSet

StatefulSet has uniqe ID
hostname.service.namespace.svc.cluster.local
nginx-statefulset-0.nginx.default.svc.cluster.local

部署有状态应用

  • 无头service, ClusterIP:none
  • StatefulSet
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None #这就代表无头的ip
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet #有序部署
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

  1. kubectl apply -f web.yaml
  2. kubectl get statefulset web
    Screenshot-2023-06-05-205718
  3. kubectl get service nginx
    Screenshot-2023-06-05-205617