k8s之statefulset控制器
operator:
statefulset:有状态副本集
特点
运行在: 1,稳定且唯一的网络标识符
2,稳定且持久的存储
3,有序,平滑地部署和扩展
4,有序,平滑地删除和终止
5,有序的滚动更新
三个组件:headless service(无头服务), statefuleset,volumeClaimTemplate(存储卷申请模板)
先准备pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
polity: fast
spec:
nfs:
path: /data/volumes/v1
server: node2
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv002
labels:
name: pv002
polity: fast
spec:
nfs:
path: /data/volumes/v2
server: node2
accessModes: ["ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv003
labels:
name: pv003
polity: fast
spec:
nfs:
path: /data/volumes/v3
server: node2
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv004
labels:
name: pv004
polity: fast
spec:
nfs:
path: /data/volumes/v4
server: node2
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv005
labels:
name: pv005
polity: fast
spec:
nfs:
path: /data/volumes/v5
server: node2
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 10Gi
kubectl apply -f pv-demo.yaml
kubectl get pv
实例
apiVersion: v1
kind: Service
metadata:
name: myapp-svc service名
labels:
app: myapp
spec:
ports:
- port: 80 service端口
name: web service端口名
clusterIP: None statefulset要求无头服务
selector: 与pod关联的标签
app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myapp statefulset控制器名 创建的pod名也为这个
spec:
serviceName: myapp-svc 关联的service服务名,必须是无头服务
replicas: 2
selector: 管理哪些pod,关联pod的label
matchLabels:
app: myapp-pod
template: 定义pod模板
metadata:
labels: 定义的pod的标签label
app: myapp-pod
spec:
containers:
- name: myapp pod中容器名
image: ikubernetes/myapp:v1
ports:
- containerPort: 80
name: web
volumeMounts:
- name: myappdata 挂载myappdata存储卷
mountPath: /usr/share/nginx/html 容器中挂载的路径
volumeClaimTemplates: pvc模板 为每个pod定义volume 自动创建pvc
- metadata:
name: myappdata 定义的pvc名
spec:
accessModes: ["ReadWriteOnce"] 单路读写
resources: 资源
requests: 请求
storage: 5Gi 大小5Gi存储空间
创建
kubectl explain sts
kubectl apply -f stateful-demo.yaml
验证:
kubectl get sts
kubectl get pvc
kubectl get svc
kubectl get pv
kubectl get pods
删除sts时
逆向删除pod
kubectl delete -f stateful-demo.yaml
删除时pvc还在,且一直保留给固定的pod
statefulset支持滚动更新,规模扩展
逆向更新
dns解析
kubectl exec -it myapp-0 -- /bin/sh
nslookup myapp-3.myapp-svc.default.svc.cluster.local
域名构成 pod名 service名 命名空间 集群域名svc.cluster.local
域名 pod_name.service_name.namaspace_name.svc.cluster.local
nslookup myapp-3.myapp-svc
扩容宿容
kubectl scale sts myapp --replicas=3
kubectl patch sts myapp -p '{"spec":{"replicas":2}}'
更新策略
kubectl explain sts.spec.updateStrategy
kubectl explain sts.spec.updateStrategy.rollingUpdate
分区更新
kubectl explain sts.spec.updateStrategy.rollingUpdate.partition
myapp-0
myapp-1
myapp-2
myapp-3
myapp-4
partition:N
N>=3
即更新3和4,即myapp-3,myapp-4 这叫金丝雀发布
验证
方法一
kubectl patch sts myapp -p '{"spec":{"replicas":5}}'
kubectl patch sts myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":4}}}}' 打上补丁 partition>=4
kubectl describe sts myapp 查看更新策略
kubectl set image sts/myapp myapp=ikubernetes/myapp:v2 改变镜像就会更新了
kubectl get sts -o wide
方法二
vim stateful-demo.yaml
kind: StatefulSet
...
spec:
updateStrategy:
rollingUpdate:
partition: 3
kubectl apply -f stateful-demo.yaml
如果版本没问题,就全部更新
vim stateful-demo.yaml
kind: StatefulSet
...
spec:
updateStrategy:
rollingUpdate:
partition: 0
kubectl apply -f stateful-demo.yaml
k8s之statefulset控制器的更多相关文章
- 5.深入k8s:StatefulSet控制器
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在上一篇中,讲解了容器持久化存储,从中我们知道什么是PV和PVC,这一篇我们讲通过Sta ...
- 容器编排系统K8s之StatefulSet控制器
前文我们聊到了k8s的configmap和secret资源的说明和相关使用示例,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14194944.html:今天 ...
- k8s StatefulSet控制器-独立存储
k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...
- Kubernetes K8S之资源控制器StatefulSets详解
Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- Kubernetes K8S之资源控制器Daemonset详解
Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...
- Kubernetes K8S之资源控制器Job和CronJob详解
Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- Kubernetes学习之路(十七)之statefulset控制器
目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...
- 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)
作者 | 阿里云售后技术专家 声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较 ...
- kubernetes学习控制器之StatefulSet控制器
StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Depl ...
- k8s之pod控制器
1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...
随机推荐
- mysqldump从mysql迁移数据到OceanBase
使用mysqldump导出数据 /usr/bin/mysqldump --single-transaction -B employees -S /data/mysql/mysql.sock -uroo ...
- MOS管耗散功率的计算
MOS管的功率,一般是指Maximum Power Dissipation--Pd,最大的耗散功率,具体是指MOS元件的容许损失,可从产品的热阻上求得.当Tc=25度时,通过附加最大容许损耗Pd,则变 ...
- 关于 False、True、0、1、tinyint(1) 的说明
MySQL 保存 Boolean 值时,用 1 代表 TRUE,0 代表 FALSE:类似一个 bit 位,默认没有数据,即为 0,也即 Faslse MySQL 存储 Boolean 值的类型为 t ...
- 在php类中使用函数
好久没更新了,今天复习歪麦编写php框架的文章,看到几个函数,在类中使用时,当参数需要调用类的方法时,都用数组的方式传参. 1. spl_autoload_register(array($this, ...
- Windows Api如何创建一个快捷方式并且在开始菜单搜索到自己的应用
原文链接:http://cshelloworld.com/home/detail/1804473083243925504 当我们点击win10系统搜索框的时候,输入名称 ,win10会帮助我们匹配到对 ...
- Selenium WebDriver上创建 WebDriver测试脚本
本文实现一个WebDriver测试脚本,介绍WebDrive的常用命令.UI元素定位的策略以及在脚本中的使用,还有Get命令. 你将学到: 脚本创建 代码走查 测试执行 定位Web元素 ...
- Bringing machine 'default' up with 'virtualbox' provider... Your VM has become "inaccessible." Unfortunately, this is a critical error with VirtualBox that Vagrant can not cleanly recover from.
启动虚拟机报错 vagrant up Bringing machine 'default' up with 'virtualbox' provider...Your VM has become &qu ...
- 在Proxmox VE pve中安装windows操作系统——以ltsc2019为例
pve创建ltsc2019还是比较简单的.只是没有virtio驱动的话,选择磁盘的时候找不到磁盘.这里主要是列出如何加载virtio驱动 1.创建虚拟机忽略.注意需要新建2个CDROM.一个为wind ...
- [每日算法 - 华为机试] leetcode45 :跳跃游戏 II 「动态规划神器推荐」
leetcode入口 45. 跳跃游戏 IIhttps://leetcode.cn/problems/jump-game-ii/ 题目描述 给定一个长度为 n 的 0 索引整数数组 nums.初始位置 ...
- while循环、dowhile循环、三种循环的区别
1.while循环 案例:使用while循环,打印出水仙花数 while执行流程: 1.先执行初始化语句 2.执行判断条件 结果为true,则执行第3步 结果为false,循环结束 3.执行循环体语句 ...