发布时间: 2023-9-13 文章作者: myluzh 分类名称: Kubernetes 朗读文章
0x01 无状态和有状态区别
1.无状态*有序的(比如mysql主从)
StatefulSet是用于管理有状态应用的控制器,它为每个Pod分配唯一的标识符,并按照一定规则生成唯一的FQDN(Fully Qualified Domain Name)。这使得有状态应用能够更好地适应动态的集群环境。
而Deployment则是用于管理无状态应用的控制器,它不保证每个Pod的标识符和FQDN的唯一性,也不保证Pod的启动顺序。
0x02 部署有状态应用
StatefulSet yaml文件如下,注意:ClusterIP为none(无头service)
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx serviceName: nginx-svc template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeClaimTemplates: [] --- apiVersion: v1 kind: Service metadata: name: nginx-svc spec: type: ClusterIP clusterIP: None selector: app: nginx ports: - name: http port: 80 targetPort: 80
deployment与statefulset区别:有身份的(唯一标识的),根据主机名+按照一定规则生成域名
格式:主机名称.service名称.名称空间.svc.cluster.local
例如:nginx-0.nginx-svc.default.svc.cluster.local
# 查看pod,有三个pod每个都是唯一的名称 [root@master statefulset]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-0 1/1 Running 0 2m52s nginx-1 1/1 Running 0 2m35s nginx-2 1/1 Running 0 2m19s
# 查看无头svc,可以看到ClusterIP为None [root@master statefulset]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-svc ClusterIP None <none> 80/TCP 5m6s
标签: k8s StatefulSet
发表评论