statefulset基础模版

[root@master statefulset]# cat web.yaml
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet # statefulset 类型的资源
metadata:
name: web # statefulset 对象的名字
spec:
serviceName: "nginx" # 使用哪个service来管理dns
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports: # 容器内部要暴露的端口
- containerPort: 80 # 具体暴露的端口号
name: web #该端口配置的名字 // 先不写下面的,因为涉及到别的知识点 volumeMounts: # 加载数据卷
- name: www #指定加载哪个数据卷
mountPath: /usr/share/nginx/html # 加载到容器中的哪个目录
volumeClaimTemplates: # 数据卷模版
- metadata: # 数据卷描述
name: www # 数据卷的名称
annotations: # 数据卷的注解
volume.alpha.kubernetes,io.storage-class: anything
spec: # 数据卷的规约
accessModes: [ "ReadWriteOnce" ] # 访问模式
resources:
requests:
storage: 1Gi # 需要1G 的存储资源
[root@master statefulset]#
[root@master statefulset]# kubectl create -f web.yaml
service/nginx created
statefulset.apps/web created
[root@master statefulset]# kubectl get sts
NAME READY AGE
web 0/2 5s
[root@master statefulset]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d18h
nginx ClusterIP None <none> 80/TCP 8s
[root@master statefulset]# kubectl get pvc //注释掉之后这个是没有的
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
www-web-0 Pending 11s //修改后
[root@master statefulset]# kubectl create -f web.yaml
service/nginx created
statefulset.apps/web created
[root@master statefulset]# kubectl get sts
NAME READY AGE
web 2/2 9s
[root@master statefulset]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d19h
nginx ClusterIP None <none> 80/TCP 15s
[root@master statefulset]#
# 有一个疑问,k8s集群内部`kubectl get po`并没有这么多pod
[root@master ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 3 (4m8s ago) 5d18h
nginx-demo 1/1 Running 4 (4m8s ago) 5d23h
nginx-po 1/1 Running 4 (4m8s ago) 5d22h
web-0 1/1 Running 2 (4m8s ago) 20h
web-1 1/1 Running 2 (4m8s ago) 20h
[root@master ~]# # python 中列出pod ,列出的是所有的pod 等价于kubectl get -A po
[root@master ~]# kubectl get -A po
NAMESPACE NAME READY STATUS RESTARTS AGE
default my-pod 1/1 Running 3 (3m12s ago) 5d18h
default nginx-demo 1/1 Running 4 (3m12s ago) 5d23h
default nginx-po 1/1 Running 4 (3m12s ago) 5d22h
default web-0 1/1 Running 2 (3m12s ago) 20h
default web-1 1/1 Running 2 (3m12s ago) 20h
kube-flannel kube-flannel-ds-bkvjm 1/1 Running 4 (3m12s ago) 5d23h
kube-flannel kube-flannel-ds-hg6bh 1/1 Running 5 (3m56s ago) 6d14h
kube-system coredns-66f779496c-c5rmz 1/1 Running 4 (3m56s ago) 6d15h
kube-system coredns-66f779496c-jswxz 1/1 Running 4 (3m56s ago) 6d15h
kube-system etcd-master 1/1 Running 4 (3m56s ago) 6d15h
kube-system kube-apiserver-master 1/1 Running 4 (3m56s ago) 6d15h
kube-system kube-controller-manager-master 1/1 Running 5 (3m56s ago) 6d15h
kube-system kube-proxy-jr5m5 1/1 Running 4 (3m56s ago) 6d15h
kube-system kube-proxy-tcpzh 1/1 Running 4 (3m12s ago) 5d23h
kube-system kube-scheduler-master 1/1 Running 5 (3m57s ago) 6d15h
tigera-operator tigera-operator-55585899bf-s28bt 1/1 Running 8 (3m19s ago) 6d14h

拉取指定镜像测试

[root@master statefulset]# kubectl run -it --image busybox:1.28.4 dns-test  /bin/sh
If you don't see a command prompt, try pressing enter.
/ # ping web-0.nginx
PING web-0.nginx (10.244.1.45): 56 data bytes
64 bytes from 10.244.1.45: seq=0 ttl=64 time=0.048 ms
64 bytes from 10.244.1.45: seq=1 ttl=64 time=0.054 ms
^C
--- web-0.nginx ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.048/0.051/0.054 ms
/ # nslookup web-0.nginx # sts的名字-第几个.service的名字 是statefulset的访问格式
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: web-0.nginx
Address 1: 10.244.1.45 web-0.nginx.default.svc.cluster.local
/ #

扩容和缩容

# 扩容
[root@master statefulset]# kubectl scale sts web --replicas=6
statefulset.apps/web scaled # 缩容
[root@master statefulset]# kubectl scale sts web --replicas=3
statefulset.apps/web scaled
[root@master statefulset]# kubectl get sts
NAME READY AGE
web 3/3 20h
[root@master statefulset]#

灰度更新

[root@master statefulset]# kubectl scale sts web --replicas=6
statefulset.apps/web scaled
[root@master statefulset]# kubectl get sts
NAME READY AGE
web 6/6 20h [root@master statefulset]# kubectl edit sts web
statefulset.apps/web edited
# 进去之后修改
---
updateStrategy:
rollingUpdate:
partition: 3 # 把0修改为3
# 修改partition的值可以模拟灰度更新,就是说更新的时候先更新编号大于3的pod
--- # 查看
[root@master statefulset]# kubectl describe po web-1|grep nginx:
nginx:
Image: nginx:1.7.9
Normal Pulled 20h kubelet Container image "nginx:1.7.9" already present on machine
Normal Pulled 12h kubelet Container image "nginx:1.7.9" already present on machine
Normal Pulled 48m kubelet Container image "nginx:1.7.9" already present on machine
[root@master statefulset]# kubectl describe po web-5|grep nginx:
nginx:
Image: nginx:1.9.1
Normal Pulled 95s kubelet Container image "nginx:1.9.1" already present on machine
[root@master statefulset]#
# 确认新版本没有问题之后,在修改partition的值为0,来更新所有
[root@master statefulset]# kubectl edit sts web
statefulset.apps/web edited
[root@master statefulset]# kubectl describe po web-5|grep nginx:
nginx:
Image: nginx:1.9.1
Normal Pulled 6m13s kubelet Container image "nginx:1.9.1" already present on machine
[root@master statefulset]# kubectl describe po web-0|grep nginx:
nginx:
Image: nginx:1.9.1
Normal Pulled 4s kubelet Container image "nginx:1.9.1" already present on machine
[root@master statefulset]#

OnDelete策略更新

[root@master statefulset]# kubectl edit sts web
statefulset.apps/web edited
---
updateStrategy:
type: OnDelete #修改更新策略
--- [root@master statefulset]# kubectl edit sts web
statefulset.apps/web edited
---
spec:
containers:
- image: nginx:1.7.9 #修改镜像
imagePullPolicy: IfNotPresent
name: nginx
ports:
---
[root@master statefulset]# kubectl describe po web-0 |grep nginx:
nginx:
Image: nginx:1.9.1
Normal Pulled 13m kubelet Container image "nginx:1.9.1" already present on machine
[root@master statefulset]# kubectl describe po web-1 |grep nginx:
nginx:
Image: nginx:1.9.1
Normal Pulled 14m kubelet Container image "nginx:1.9.1" already present on machine
[root@master statefulset]# kubectl delete pod web-1
pod "web-1" deleted # 看似删除实则更新
[root@master statefulset]#
[root@master statefulset]# kubectl describe po web-1 |grep nginx:
nginx:
Image: nginx:1.7.9
Normal Pulled 3s kubelet Container image "nginx:1.7.9" already present on machine
[root@master statefulset]#

删除sts

rs是deployment的东西,所以sts没有rs

删除sts和headless service的时候分为两种,级联删除和非级联删除

级联删除

# 删除sts时候,会同时删除pods
[root@master statefulset]# kubectl get sts
NAME READY AGE
web 3/3 23h
[root@master statefulset]# kubectl delete sts web
statefulset.apps "web" deleted
[root@master statefulset]# kubectl get sts
No resources found in default namespace.
[root@master statefulset]# kubectl get po
NAME READY STATUS RESTARTS AGE
dns-test 1/1 Running 1 (160m ago) 162m
[root@master statefulset]# # 删除sts的时候,直接删除pod

非级联删除

[root@master statefulset]# kubectl get sts
NAME READY AGE
web 2/2 25s
[root@master statefulset]# kubectl get po
NAME READY STATUS RESTARTS AGE
dns-test 1/1 Running 1 (166m ago) 168m
web-0 1/1 Running 0 27s
web-1 1/1 Running 0 26s
[root@master statefulset]# kubectl delete sts web --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
statefulset.apps "web" deleted
[root@master statefulset]# kubectl get po
NAME READY STATUS RESTARTS AGE
dns-test 1/1 Running 1 (166m ago) 168m
web-0 1/1 Running 0 74s
web-1 1/1 Running 0 73s
[root@master statefulset]# kubectl get sts
No resources found in default namespace.
[root@master statefulset]#
# 非级联删除没有连带删除pod

k8s——statefulset的更多相关文章

  1. k8s statefulset controller源码分析

    statefulset controller分析 statefulset简介 statefulset是Kubernetes提供的管理有状态应用的对象,而deployment用于管理无状态应用. 有状态 ...

  2. k8s StatefulSet控制器-独立存储

    k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...

  3. 在Kubernetes上运行有状态应用:从StatefulSet到Operator

    一开始Kubernetes只是被设计用来运行无状态应用,直到在1.5版本中才添加了StatefulSet控制器用于支持有状态应用,但它直到1.9版本才正式可用.本文将介绍有状态和无状态应用,一个通过K ...

  4. k8s之statefulSet-有状态应用副本集控制器

    1.概述 无状态应用更关注群体,任何一个成员都可以被取代,有状态应用关注的是个体.用deployment控制器管理的nginx.myapp等都属于无状态应用,像mysql.redis.zookeepe ...

  5. 初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3

    系列介绍:这个系列是介绍如何用云原生技术来构建.测试.部署.和管理应用的内容专辑.做这个系列的初衷是为了推广云原生应用管理的最佳实践,以及传播开源标准和知识.在这个系列文章的开篇初探云原生应用管理(一 ...

  6. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  7. [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置

    所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...

  8. [k8s]zookeeper集群在k8s的搭建(statefulset模式)-pod的调度

    之前一直docker-compose跑zk集群,现在把它挪到k8s集群里. docker-compose跑zk集群 zk集群in k8s部署 参考: https://github.com/kubern ...

  9. 【Kubernetes】在K8s中创建StatefulSet

    在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...

  10. 在K8s中创建StatefulSet

    在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...

随机推荐

  1. pycharm更换主题,pycharm更换皮肤,pycharm更换不同颜色

    1.首先  点击File→进入setting 2. 在settings里面找到appearance 3.选择 Theme,下拉即可修改 4.选择不同的主题,darcula是黑色,其他两个是白色

  2. 【GDKOI 2024 TG Day2】不休陀螺(top) 题解

    考虑一个卡牌区间怎样才不是"陀螺无限". 一个是费用在打到一半时费用就不够了.考虑构造一个卡牌序列使其尽量能够在打到一半时费用就不够,如何构造呢? 把 \(a_i > b_i ...

  3. 第一次blog

    前言:我在大一上学期学习了c语言,然后在下学期学习了第二门语言java,因为之前c语言学的挺一般的,然后在这学期学习java感觉还是挺不简单的,要自学很多东西,在这段时间里,我学习了JAVA的基本语法 ...

  4. 用百度和神策做埋点为何pv差异很大?

    近期ClkLog收到一个客户反馈说我们与百度统计的PV数据差异很大.为了验证问题,开发进行了一次对页面浏览量统计的测试.针对同一个IP同一个时间的页面浏览量统计发现,百度的统计数据只有一条,而ClkL ...

  5. 力扣166(java)-分数到小数(中等)

    题目: 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 . 如果小数部分为循环小数,则将循环的部分括在括号内. 如果存在多个答案,只需返回 ...

  6. 使用AnalyticDB轻松实现以图搜图和人脸检索

    1. 背景 以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截 ...

  7. 代码安全无忧—云效Codeup代码加密技术发展之路

    简介: 从代码服务及代码安全角度出发,看看云效代码加密技术如何解决这一问题 代码数据存在云端,如何保障它的安全? 部分企业管理者对于云端代码托管存在一丝担心:我的代码存在云端服务器,会不会被泄露? 接 ...

  8. 一文详解 | 开放搜索兼容Elasticsearch做召回引擎

    ​简介:开放搜索发布开源兼容版,支持阿里云Elasticsearch做搜索召回引擎,本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库,提升查询语义理解能力,无需开发.算法投入,即可获 ...

  9. 【阿里云 CDP 公开课】 第二讲:CDH/HDP 何去何从

    ​简介:Hadoop社区版CDH/HDP已经不再更新,也将终止服务.后续的平台路线图怎么规划?Cloudera CDP整合了CDH和HDP,有哪些性能提升和功能增强?如何平滑的进行迁移?本文结合CDH ...

  10. [GPT] 哪些职业面临 AI 威胁?

      随着人工智能技术的不断发展和应用,一些重复性.机械化或标准化程度高的职业可能会面临被自动化取代的威胁.例如: 工厂生产线上的装配工人,因为许多工厂已经开始使用自动化机器人完成装配任务: 行政助理, ...