Kubernetes 核心概念 StatefulSet、Service

StatefulSet

StatefulSet旨在与有状态的应用及分布式系统一起使用。StatefulSet使用起来相当复杂,当应用具有以下特点时才建议使用StatefulSet

  1. 有唯一的稳定的网络标识符需求。
  2. 有稳定性、持久化数据存储需求。
  3. 有序的部署和扩展需求。
  4. 有序的删除和终止需求。
  5. 有序的自动滚动更新需求。
    如果应用不需要任何稳定的标示、有序的部署、删除和扩展,则该应用应使用一组无状态副本的控制器来部署应用。
    如Deployment或ReplicaSet更合适无状态服务需求。
    StatefulSet Pod的存储必须基于请求存储类的Persistent Volume Provisioner或由管理员预先配置来提供,基于数据安全性设计,删除或者缩放StatefulSet将不会删除与StatefulSet关联的Volume
#kubectl create -f StatefulSet.yml
apiVersion: app/v1beta1
kind: StatefulSet
metadata: 
    name: my-web
spec: 
   ServiceName: "nginx"
   replicas: 2
   template: 
       metadata:
           name: long-task
           labels:
              app: long-task
       spec:
          containers:
          - name: nginx
              image:nginx:latest
              ports:
              - containerPort: 80
                   name: frontend
              volumeMounts:
              - name: www
                  mountPath: /user/share/nginx/html
        volumeClaimTemplates:
        - metadata:
              name: www
            spec:
              accessModes: ["ReadWriteOnce"]
              storageClassName: my-storage-class
              resources:
                 requests:
                    storage: 1Gi
                    

ConfigMap

在实际的应用部署中,需要为各种应用、中间件配置各种参数,如数据库密码、用户名等。而且大多数生产环境配置比较复杂。
Kubernetes提供了configmap,可以在容器启动的时候将配置注入环境变量或者Volume里面。
只要容器里面的进程有Reload机制,就可以实现配置的动态下发。
生成命令 kubectl create configmap example-redis-config --from-file=/root/config.json
获取configmap kubectl get configmap example-redis-config - yaml
目前有三种类型的应用程序运行转态检查可供用户选择

  1. HTTP健康检查
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
    app: httpd
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: docker.io/httpd
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /index.html
        port: 80
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 5
      periodSeconds: 5
  1. Container Exec:kubelet将在容器中执行一个命令。如果它以状态0退出,则被视为成功。
# Container Exec
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: docker.io/alpine
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
  1. TCP检查,kubelet将试图打开与容器的套接字。如果不能建立连接,则认为发生故障。
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
    app: node
  name: liveness-tcp
spec:
  containers:
  - name: goproxy
    image: docker.io/googlecontainer/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20
发布了21 篇原创文章 · 获赞 2 · 访问量 2859

猜你喜欢

转载自blog.csdn.net/ysf465639310/article/details/104797662