当前位置: 代码网 > 科技>人工智能>数据分析 > 【K8S系列】深入解析StatefulSet(一)

【K8S系列】深入解析StatefulSet(一)

2024年08月06日 数据分析 我要评论
简单介绍一下这个专栏要做的事:主要是深入解析每个知识点,帮助大家完全掌握k8s,Kubernetes StatefulSet是一种用于运行有状态应用的控制器。StatefulSet是一个有序的、可标识的Pod组,并且每个Pod都有一个独特的标识符。这使得StatefulSet能够管理有状态应用程序,例如数据库或队列服务,这些应用程序需要稳定的网络标识符或持久性存储,并且需要有序的、逐个更新的部署方式。应用实例之间有不对等关系实例对外部数据有依赖关系的应用就被称为“有状态应用。

序言

 专栏介绍

序号文章
第一讲深入解析 k8s:入门指南(一)
第二讲深入解析 k8s:入门指南(二)
第三讲深入解析pod对象(一)
第四讲深入解析pod对象(二)
第五讲深入解析无状态服务
第六讲深入解析有状态服务
第七讲深入解析控制器

第八讲

深入解析 replicaset
第九讲深入解析滚动升级

1 基础介绍

1.1 statefulset 介绍

1.2 statefulset资源状态

1.3 示例讲解

1 yaml文件

apiversion: apps/v1
kind: statefulset  #资源类型
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchlabels:
      app: nginx # has to match .spec.template.metadata.labels
  servicename: "nginx"
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchlabels
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.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
  status:
    observedgeneration: 2
    replicas: 3
    readyreplicas: 3
    currentreplicas: 3
    updatedreplicas: 3
    updaterevision: "2"
    currentrevision: "2"

2 statefulset 两种状态

2.1拓扑状态简介

2.2 存储状态简介

3 headless service

3.1headless service 介绍

3.2 使用场景

3.2 yaml示例讲解

apiversion: v1
kind: service #资源类型
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterip: none # 为none,思考一下
  selector:
    app: nginx
<pod-name>.<svc-name>.<namespace>.svc.cluster.local

 3.3 headless service 与service对比 

3.4 总结 

 4 拓扑状态

4.1 问题:

解答: 

$(podname)-$(ordinal).$(servicename).$(namespace).svc.cluster.local

4.2示例讲解

4.2.1 statefulset 的 yaml:

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: nginx:1.9.1
        ports:
        - containerport: 80
          name: web

4.2.2 创建 

$ kubectl create -f svc.yaml
$ kubectl get service nginx
name      type         cluster-ip   external-ip   port(s)   age
nginx     clusterip    none         <none>        80/tcp    10s
$ kubectl create -f statefulset.yaml
$ kubectl get statefulset web
name      desired   current   age
web       2         1         19s

4.2.3  查看hostname

$ kubectl exec web-0 -- sh -c 'hostname'
web-0
$ kubectl exec web-1 -- sh -c 'hostname'
web-1
$ kubectl run -i --tty --image busybox dns-test --restart=never --rm /bin/sh
$ nslookup web-0.nginx
server:    *.*.*.*
address 1: *.*.*.* kube-dns.kube-system.svc.cluster.local
 
name:      web-0.nginx
address 1: *.*.*.*
 
$ nslookup web-1.nginx
server:    *.*.*.*
address 1: *.*.*.* kube-dns.kube-system.svc.cluster.local
 
name:      web-1.nginx
address 1: *.*.*.*

4.2.3 测试

kubectl delete pod -l app=nginx
pod "web-0" deleted
pod "web-1" deleted
kubectl get pod -w -l app=nginx
name      ready     status              restarts   age
web-0     0/1       containercreating   0          0s
name      ready     status    restarts   age
web-0     1/1       running   0          2s
web-1     0/1       pending   0         0s
web-1     0/1       containercreating   0         0s
web-1     1/1       running   0         32s

4.2.4 测试总结

5 总结

6 投票

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com