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一个 ...
随机推荐
- Flutter笔记-基础组件
图片和Icon 加载网络图片以及本地图片 Image( image: NetworkImage( "https://img-s-msn-com.akamaized.net/tenant/am ...
- python爬虫实战以及数据可视化
需要准备的环境: (1)python3.8 (2)pycharm (3)截取网络请求信息的工具,有很多,百度一种随便用即可. 第一:首先通过python的sqlalchemy模块,来新建一个表. 第二 ...
- ArcPy自动绘制大量地图并设置地图要素:Python
本文介绍基于Python语言中ArcPy模块,实现ArcMap自动批量出图,并对地图要素进行自定义批量设置的方法. 1 任务需求 首先,我们来明确一下本文所需实现的需求. 现有通过Pyth ...
- 剑指offer21(Java)-调整数组顺序使奇数位于偶数前面(简单)
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分. 示例: 输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[ ...
- 性能提升一倍!云原生网关支持 TLS 硬件加速
简介:业界在优化 HTTPS 的性能上也做了诸多探索,传统的软件优化方案有 Session 复用.OCSP Stapling.False Start.dynamic record size.TLS1. ...
- 浅谈 Linux 高负载的系统化分析
简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析. 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体 ...
- LlamaIndex 高层次概念
本篇内容为您快速介绍在构建基于大型语言模型(LLM)的应用程序时会频繁遇到的一些核心概念. 增强检索生成(RAG) LLM 是基于海量数据训练而成,但并未涵盖您的具体数据.增强检索生成(Retriev ...
- WPF 编写一个测试 WM_TOUCH 触摸消息延迟的应用
我听说在 Win10 到 Win11 的系统版本左右,微软加上了一大波触摸性能优化,准确来说是 HID 性能优化.我想测试一下在这些系统下,采用从 Windows 消息接收到 WM_TOUCH 触摸消 ...
- 推荐一款轻量级堡垒机系统让你防护“rm -rf 删库跑路”
大家好,我是 Java陈序员. 我们在开发工作中,会经常与服务器打交道,而服务器的资源又是十分宝贵,特别是服务器里面的数据资源. 但是,偶尔会经常因为疏忽而导致服务器数据资源丢失,给自己和公司带来巨大 ...
- 二:飞凌嵌入式FCU1201
场景一 充电基础设施 场景二 现代机械加工对复杂化.精密化.大型化以及自动化设备的要求不断提高,数控机床设备日益得到广泛应用.数控机床设备对加工质量及效率起着关键乃至核心作用,其造价往往相当昂贵.因此 ...