Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用(上)》创建完StatefulSet后,本文继续介绍StatefulSet 扩展、更新、删除等内容。

StatefulSet 中的 Pod

验证序数索引和稳定的网络身份

StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。

查看 Pod 的主机名
for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done
------
web-0
web-1
查看Pod DNS
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm

此时会启动一个新的shell,在shell中执行nslookup web-0.nginx
输出类似如下所示:

If you don't see a command prompt, try pressing enter./ # nslookup web-0.nginx
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName:      web-0.nginx
Address 1: 10.244.2.24 web-0.nginx.default.svc.cluster.local

再次执行kubectl delete pod -l app=nginx。 删除nginx pod后,等待其重新running起来。重新执行查看查看 Pod 的主机名和查看Pod DNS命令。发现输出是一致的,并不会因此Pod重新创建而改变DNS和主机名称。(此处不再展示重新查询结果,可自行手动尝试)

稳定的存储

获取web-0和web-1的PersistentVolumeClaims(PVC)

kubectl get pvc -l app=nginx
------
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Bound    pvc-e474e3c6-7793-4b16-b852-c293adbd1903   1Gi        RWO            standard       56m
www-web-1   Bound    pvc-fd575798-fe7a-42e4-96cb-0365d6761e68   1Gi        RWO            standard       56m

扩展 StatefulSet

扩容

在一个窗口中打开kubectl get pods --watch -l app=nginx

在另一个窗口执行kubectl scale sts web --replicas=5
可以看到:

缩容

接下来将副本数量改成3个

kubectl patch sts web -p '{"spec":{"replicas":3}}'

Pod 有序终止

控制器会一次删除一个 Pod,按照其序数索引的相反顺序,并等待每个Pod 完全关闭,然后再删除下一个。

更新 StatefulSet

在 Kubernetes 1.7 及更高版本中,StatefulSet 控制器支持自动更新。使用的策略由spec.updateStrategyStatefulSet API 对象的字段决定。此功能可用于升级 StatefulSet 中 Pod 的容器镜像、资源请求和/或限制、标签和注释。有两种有效的更新策略,RollingUpdate和 OnDelete。

RollingUpdate更新策略是 StatefulSets 的默认策略。

滚动更新

更新RollingUpdate策略将以相反的顺序更新 StatefulSet 中的所有 Pod,同时尊重 StatefulSet 保证。

修改web StatefulSet 以应用RollingUpdate更新策略:

kubectl patch statefulset web -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}'

修改web StatefulSet,更改容器镜像

kubectl patch statefulset web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"gcr.io/google_containers/nginx-slim:0.8"}]'

另一个终端输出大概如下:

web-2   0/1     Terminating         0          7m7sweb-2   0/1     Terminating         0          7m7sweb-2   0/1     Terminating         0          7m7sweb-2   0/1     Pending             0          0sweb-2   0/1     Pending             0          0sweb-2   0/1     ContainerCreating   0          0sweb-2   1/1     Running             0          4sweb-1   1/1     Terminating         0          14m
web-1   0/1     Terminating         0          14m
web-1   0/1     Terminating         0          14m
web-1   0/1     Terminating         0          14m
web-1   0/1     Terminating         0          14m
web-1   0/1     Pending             0          0s
web-1   0/1     Pending             0          0s
web-1   0/1     ContainerCreating   0          0s
web-1   1/1     Running             0          4s
web-0   1/1     Terminating         0          14m
web-0   0/1     Terminating         0          15m
web-0   0/1     Terminating         0          15m
web-0   0/1     Terminating         0          15m
web-0   0/1     Terminating         0          15m
web-0   0/1     Pending             0          0s
web-0   0/1     Pending             0          0s
web-0   0/1     ContainerCreating   0          0s
web-0   1/1     Running             0          5s

StatefulSet 中的 Pod 按相反顺序更新。StatefulSet 控制器终止每个 Pod,并等待其转换为 Running 和 Ready,然后再更新下一个 Pod。
已经收到更新的 Pod 将恢复到更新后的版本,尚未收到更新的 Pod 将恢复到之前的版本。通过这种方式,控制器尝试在出现间歇性故障的情况下继续保持应用程序的健康和更新的一致性。

查看所有Pod镜像

for p in 0 1 2; do kubectl get pod "web-$p" --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done
------
gcr.io/google_containers/nginx-slim:0.8
gcr.io/google_containers/nginx-slim:0.8
gcr.io/google_containers/nginx-slim:0.8

关于更新的更多细节(暂存部署、分阶段部署等),可以查阅:https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/

删除 StatefulSet

StatefulSet 支持非级联删除和级联删除。在非级联删除中,删除 StatefulSet 时,StatefulSet 的 Pod 不会被删除。在级联删除中,StatefulSet 及其 Pod 都会被删除。

非级联删除

执行 kubectl delete statefulset web --cascade=orphan

获取 Pod,检查它们的状态

kubectl get pods -l app=nginx

即使已web被删除,所有 Pod 仍在运行并准备就绪。删除web-0:

级联删除

直接执行:

kubectl delete statefulset web

输出:
statefulset “web” deleted,会将statefulset和所有pod全部删除。

清理

kubectl delete statefulset web
kubectl delete svc nginx

删除本教程中使用的 PersistentVolume 的持久存储介质。

kubectl get pvc
kubectl get pv
----
# 进行删除
kubectl delete pvc www-web-0 www-web-1 www-web-2 www-web-3 www-web-4
kubectl get pvc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收集的50家国产MCU信息

全球MCU市场多为欧美、日本和台湾地区企业占据,仅欧企恩智浦、美企Microchip、美企ST、欧企英飞凌就占据超80%的份额,TI、Nuvoton、罗姆、三星、东芝五家企业占据11.4%,而中国大陆企业所占份额6.5%不到。这意味着,留给中国本土供应…

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command

在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。 CanExecute():判断是否继续执…

赋值运算符和拷贝构造函数的区别与联系

转载:http://blog.csdn.net/hebbely/article/details/65437510 简述: C中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。拷贝构造函数使用已有的对象创建一个新的对象,赋值运…

硬件有没有35岁危机?

大家好,我篇文章是我的朋友记得诚写的,分享给大家!35岁危机指的是,很多企业停止招聘35岁及以上的员工,甚至会裁掉年纪大的人。我们经常说程序员,说互联网从业者有35岁危机。这个危机一方面是自己的焦虑&…

强大的独立日期选择器(date picker)插件 - Kalendae

日期:2012-4-16 来源:GBin1.com 在线演示 本地下载 今天分享一个独立的日期选择插件Kalendae,Kalendae是 一个强大健壮的独立日期选择器。如果你不想使用重量的jQuery UI类库的话,这个插件肯定是一个不错的备选。Kalendae包含了…

35家名企嵌入式/软件秋招岗位等你来!

大家好,我是写代码的篮球球痴。前两天一个小伙伴在微信让我帮忙推荐嵌入式招聘岗位。我实话实说,是有认识的人让我推荐简历的,但是相对于专业的招聘网站,我手里能拿出来的岗位实在是少之又少,专业的招聘网站会对不同的…

尝试梳理下ARM处理器的发展历史

大家好,这篇文章是我的朋友Michael Yao写的,我觉得非常不错,分享给大家。1. 前言本文尝试简单梳理下ARM处理器的发展历史、架构的演进,包括不同处理器的应用方向,但我们重点还是围绕Cortex-A系列展开,也会介…

linux下的CPU、内存、IO、网络的压力测试

一、对CPU进行简单测试: 1、通过bc命令计算特别函数 例:计算圆周率 echo "scale5000; 4*a(1)" | bc -l -q MATH LIBRARY If bc is invoked with the -l option, a math library is preloaded and the default scale is set to 20.…

给你这张图,你能搜索到来历吗

如果我们想让搜索引擎帮我们找到这张图的来历,可能吗? 这是目前搜索引擎做不到的。如果能做到呢? 转载于:https://www.cnblogs.com/shangge/archive/2008/07/23/1249767.html

晚上读内核代码

最近因为要解决一个bug,需要在内核的f_hid.c里面做一些适配,需要把这部分代码研究透彻。在这几天之前我是根本不知道什么是In端点,Out端点,以及什么是endpoint 0的,而且最近的一段时间,我一直是在写应用方面…

Linux进程调度与性能优化 | 真货

作者简介:张毅峰,某主机厂架构师。一、eBPF安全可观测性的前景展望本次分享将从监控和可观测性、eBPF安全可观测性分析、内核安全可观测性展望三个方面展开。1.监控(Monitoring)vs可观测性(Observability)从上图可以看到,监控只是可观测性的冰…

教师生涯由此开始

招聘会时间:2012-03-28 09:00 招聘会地址:就业办507 为加强教师队伍建设,建设教育强县,经研究,我县决定面向全国“985”、“211”工程高等师范院校应届毕业生选聘普通高中和初中教师38名。现将有关事项公告如下&#x…

二叉树前序、中序、后序遍历非递归写法的透彻解析

前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序…

深夜看代码2

昨天的文章晚上读内核代码有人评论说好像说了一些什么,好像又没有说什么,所以我到底是在说什么呢?因为今天已经把内核修改好了,自己也测试了,所以这次好好说下,我到底是说了什么,又做了什么。—…

F#学习之路(2) 深刻理解函数(上)

函数在函数式编程语言中是一等公民,是函数式语言中最重要的基本组成元素,也是其名称的由来。 F# 中的函数之如C#中的类,是组织程序结构的最基本单元。是命令式编程语言中函数或OO编程语言中方法的超集。超集,有多强大&#xff1f…

C++ 线程安全的单例模式

转载:https://www.cnblogs.com/ccdev/archive/2012/12/19/2825355.html 废话不多说,常用的代码积淀下来。 一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。 需要用锁,来保证其…

写代码多就牛逼?

最近遇到了一些人、一些事,然后就想着拿出来总结总结,并谈谈自己的一些看法,所以就有了这篇文章。首先,我们来看看下面遇到过的两种情景。情景1:在工作中经常会遇到这样一些人:要他们实现一些功能&#xff…

推荐12款非常有用的流行 jQuery 插件

jQuery 是一个非常优秀的 JavaScript 框架,在现在的 Web 开发项目中扮演着重要角色。jQuery 使用简单灵活,同时还有许多成熟的插件可供选择,它可以帮助你在项目中加入一些非常好的效果,让网站有更好的可用性和用户体验。今天这篇文…

Linux以及各大发行版介绍

什么是Linux? 也许很多人会不屑的说,Linux不就是个操作系统么。错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核…