Kubernetes 之 StatefulSet基本原理

发布于:2024-06-01 ⋅ 阅读:(121) ⋅ 点赞:(0)

Kubernetes 之 StatefulSet

StatefulSet 定义

StatefulSet 是一个有状态的集合,不同于一般 Pod 的一致性,不同的 Stateful Set 创建的 Pod 之间存在数据上的差异。同时它们是有序的,这样它们在故障或删除后恢复,自身的名字也不会变化,以达到维护整个分布式系统的目的。例如在 Redis 主从集群中,我们不能用 Pod 模式来部署,以为主从容器之间的配置信息是不一样的,这时候我们就需要 Stateful Set 来实现我们的需求。

StatefulSet 的使用

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
    - port: 80
      name: web
  clusterIP: None
  selector:
    app: pod-nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: stateful-set-web
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: pod-nginx
  template:
    metadata:
      labels:
        app: pod-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:
        storageClassName: nfs-client
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 100Mi
---
kind: Pod
apiVersion: v1
metadata:
  name: stateful-set-test
spec:
  containers:
    - name: stateful-set-test
      image: docker.io/k8s-test:v1.0
  restartPolicy: "Never"

root@k8s-master1:~# kubectl get pods -owide
NAME                                     READY   STATUS    RESTARTS      AGE   IP               NODE          NOMINATED NODE   READINESS GATES
nfs-client-provisioner-d5bf6698d-mxjw2   1/1     Running   1 (61m ago)   23h   10.244.194.109   k8s-worker1   <none>           <none>
stateful-set-test                        1/1     Running   0             62s   10.244.126.56    k8s-worker2   <none>           <none>
stateful-set-web-0                       1/1     Running   0             62s   10.244.194.114   k8s-worker1   <none>           <none>
stateful-set-web-1                       1/1     Running   0             61s   10.244.126.57    k8s-worker2   <none>           <none>

root@k8s-master1:~# kubectl get pvc
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
www-stateful-set-web-0   Bound    pvc-81e64b41-f60d-488f-8862-90c91f821641   100Mi      RWO            nfs-client     <unset>                 5m50s
www-stateful-set-web-1   Bound    pvc-2d269bcd-297f-4bd9-9e5d-f24c41fc5c6b   100Mi      RWO            nfs-client     <unset>                 5m40s

root@k8s-master1:~# kubectl exec -it stateful-set-test -- /bin/sh
/ # curl nginx
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Nginx Test</title>
</head>
<body>
Hello Web1
</body>
</html>
/ # curl nginx
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Nginx Test</title>
</head>
<body>
Hello Web2
</body>
</html>

网站公告

今日签到

点亮在社区的每一天
去签到