k8s——statefulset
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的更多相关文章
- k8s statefulset controller源码分析
statefulset controller分析 statefulset简介 statefulset是Kubernetes提供的管理有状态应用的对象,而deployment用于管理无状态应用. 有状态 ...
- k8s StatefulSet控制器-独立存储
k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...
- 在Kubernetes上运行有状态应用:从StatefulSet到Operator
一开始Kubernetes只是被设计用来运行无状态应用,直到在1.5版本中才添加了StatefulSet控制器用于支持有状态应用,但它直到1.9版本才正式可用.本文将介绍有状态和无状态应用,一个通过K ...
- k8s之statefulSet-有状态应用副本集控制器
1.概述 无状态应用更关注群体,任何一个成员都可以被取代,有状态应用关注的是个体.用deployment控制器管理的nginx.myapp等都属于无状态应用,像mysql.redis.zookeepe ...
- 初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3
系列介绍:这个系列是介绍如何用云原生技术来构建.测试.部署.和管理应用的内容专辑.做这个系列的初衷是为了推广云原生应用管理的最佳实践,以及传播开源标准和知识.在这个系列文章的开篇初探云原生应用管理(一 ...
- 教你在Kubernetes中快速部署ES集群
摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...
- [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置
所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...
- [k8s]zookeeper集群在k8s的搭建(statefulset模式)-pod的调度
之前一直docker-compose跑zk集群,现在把它挪到k8s集群里. docker-compose跑zk集群 zk集群in k8s部署 参考: https://github.com/kubern ...
- 【Kubernetes】在K8s中创建StatefulSet
在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...
- 在K8s中创建StatefulSet
在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个 ...
随机推荐
- iOS的cer、p12格式证书解析监控
之前博客写过直接解析ipa包获取mobileprovision文件来监控APP是否过期来,但APP的推送证书还没有做, 大家都知道,iOS的推送证书不会放到ipa包里,只能通过直接解析p12或cer. ...
- 深度解读《深度探索C++对象模型》之数据成员的存取效率分析(一)
接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 在<深度解 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇
1.简介 这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法.答案当然是:肯定有的.宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享. ...
- 了解3D世界的黑魔法-纯Java构造一个简单的3D渲染引擎
简介: 对于非渲染引擎相关工作的开发者来说,可能认为即使构建最简单的3D程序也非常困难,但事实上并非如此,本篇文章将通过简单的200多行的纯 Java代码,去实践正交投影.简单三角形光栅化.z缓冲(深 ...
- 云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator
作者 | 刘睿.杜恒 导读:RocketMQ Operator 现已加入 OperatorHub,正式进入 Operator 社区.本文将从实践出发,结合案例来说明,如何通过 RocketMQ Ope ...
- 好云推荐官丨飞天加速之星怎样选择云服务器ECS?
编者按:本文来自"好云推荐官"活动的技术博主投稿,作者(昵称天狼)曾入选首届"飞天加速之星",获得飞天人气奖. 你是否还在苦苦地寻找一家合适的云厂商,寻找合 ...
- 阿里巴巴超大规模Kubernetes基础设施运维体系揭秘
简介:ASI:Alibaba Serverless infrastructure,阿里巴巴针对云原生应用设计的统一基础设施.ASI 基于阿里云公共云容器服务 ACK之上,支撑集团应用云原生化和云产品 ...
- 2024 CKA考试
一.考试形式 第一次考试可能有点紧张,训练时1小时不到搞定,考试用了1个半小时,记得考试前多练几次题目,就算紧张也可以在120分钟里考完,可以记住关键词去kubernetes.io中查找 考试模式:线 ...
- netcore依赖注入通过反射简化
aspnetcore里面用到许多的service,好多业务代码都要通过Service.AddScoped.Singleton.Transient等注入进去,类太多了写起来和管理起来都很麻烦,所以借鉴了 ...
- FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支持的字幕类型包括srt.ass等,凡是涉及到给视频画 ...