我的编程空间,编程开发者的网络收藏夹
学习永远不晚

docker中stateful控制器怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

docker中stateful控制器怎么用

这篇文章主要介绍了docker中stateful控制器怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

    在应用程序中,可以分为有状态应用和无状态应用。

    无状态的应用更关注于群体,任何一个成员都可以被取代。

    对有状态的应用是关注个体。

    像我们前面用deployment控制器管理的nginx、myapp等都属于无状态应用。

    像mysqlredis,zookeeper等都属于有状态应用,他们有的还有主从之分、先后顺序之分。

    statefulset控制器能实现有状态应用的管理,但实现起来也是非常麻烦的。需要把我们运维管理的过程写入脚本并注入到statefulset中才能使用。虽然互联网上有人做好了stateful的脚本,但是还是建议大家不要轻易的把redis、mysql等这样有状态的应用迁移到k8s上。

    在k8s中,statefulset主要管理一下特效的应用:

        a)、每一个Pod稳定且有唯一的网络标识符;

        b)、稳定且持久的存储设备;

        c)、要求有序、平滑的部署和扩展;

        d)、要求有序、平滑的终止和删除;

        e)、有序的滚动更新,应该先更新从节点,再更新主节点;

     statefulset由三个组件组成:

        a) headless service(无头的服务,即没名字);

        b)statefulset控制器

        c)volumeClaimTemplate(存储卷申请模板,因为每个pod要有专用存储卷,而不能共用存储卷)

[root@master ~]# kubectl explain sts   #stateful的简称
[root@master stateful]# cat stateful-demo.yaml apiVersion: v1kind: Servicemetadata:  name: myapp-svc  labels:    app: myapp-svcspec:  ports:  - port: 80    name: web  clusterIP: None  selector:    app: myapp-pod---apiVersion: apps/v1kind: StatefulSetmetadata:  name: myappspec:  serviceName: myapp-svc  replicas: 2  selector:    matchLabels:      app: myapp-pod  template:    metadata:      labels:        app: myapp-pod    spec:      containers:      - name: myapp        image: ikubernetes/myapp:v1        ports:        - containerPort: 80          name: web        volumeMounts:        - name: myappdata          mountPath: /usr/share/nginx/html  volumeClaimTemplates: #存储卷申请模板,可以为每个pod定义volume;可以为pod所在的名称空间自动创建pvc。  - metadata:      name: myappdata    spec:      accessModes: ["ReadWriteOnce"]      #storageClassName: "gluster-dynamic"      resources:        requests:          storage: 5Gi #2G的pvc
[root@master stateful]# kubectl apply -f stateful-demo.yaml service/myapp-svc unchangedstatefulset.apps/myapp created
[root@master stateful]# kubectl get svcNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGEmyapp-svc    ClusterIP   None            <none>        80/TCP              12m

    看到myapp-svc是无头服务。

[root@master stateful]# kubectl get stsNAME      DESIRED   CURRENT   AGEmyapp     2         2         6m
[root@master stateful]# kubectl get pvcNAME                STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGEmyappdata-myapp-0   Bound     pv002     2Gi        RWO                           3smyappdata-myapp-1   Bound     pv003     1Gi        RWO,RWX                       1s
[root@master stateful]# kubectl get pvNAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                       STORAGECLASS   REASON    AGEpv001     1Gi        RWO,RWX        Retain           Available                                                        1dpv002     2Gi        RWO            Retain           Bound       default/myappdata-myapp-0                            1dpv003     1Gi        RWO,RWX        Retain           Bound       default/myappdata-myapp-1                            1dpv004     1Gi        RWO,RWX        Retain           Bound       default/mypvc                                        1dpv005     1Gi        RWO,RWX        Retain           Available
[root@master stateful]# kubectl get podsNAME                             READY     STATUS             RESTARTS   AGEmyapp-0                          1/1       Running            0          4mmyapp-1                          1/1       Running            0          4m
[root@master stateful]# kubectl delete -f stateful-demo.yaml service "myapp-svc" deletedstatefulset.apps "myapp" deleted

    上面删除会使pod和service删除,但是pvc是不会删除,所以还能恢复。

[root@master stateful]# kubectl exec -it myapp-0 -- /bin/sh/ # nslookup myapp-0.myapp-svc.default.svc.cluster.localnslookup: can't resolve '(null)': Name does not resolveName:      myapp-0.myapp-svc.default.svc.cluster.localAddress 1: 10.244.1.110 myapp-0.myapp-svc.default.svc.cluster.local/ # / # / # nslookup myapp-1.myapp-svc.default.svc.cluster.localnslookup: can't resolve '(null)': Name does not resolveName:      myapp-1.myapp-svc.default.svc.cluster.localAddress 1: 10.244.2.97 myapp-1.myapp-svc.default.svc.cluster.local

     myapp-0.myapp-svc.default.svc.cluster.local

    格式为:pod_name.service_name.namespace.svc.cluster.local   

    下面扩展myapp pod为5个:

[root@master stateful]# kubectl scale sts myapp --replicas=5statefulset.apps/myapp scaled
[root@master stateful]# kubectl get podsNAME                             READY     STATUS             RESTARTS   AGEclient                           0/1       Error              0          17dmyapp-0                          1/1       Running            0          37mmyapp-1                          1/1       Running            0          37mmyapp-2                          1/1       Running            0          46smyapp-3                          1/1       Running            0          43smyapp-4                          0/1       Pending            0          41s
[root@master stateful]# kubectl get pvcNAME                STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGEmyappdata-myapp-0   Bound     pv002     2Gi        RWO                           52mmyappdata-myapp-1   Bound     pv003     1Gi        RWO,RWX                       52mmyappdata-myapp-2   Bound     pv005     1Gi        RWO,RWX                       2mmyappdata-myapp-3   Bound     pv001     1Gi        RWO,RWX                       2mmyappdata-myapp-4   Pending                                                      2m

    另外也可以用patch打补丁的方法来进行扩容和缩容:

[root@master stateful]# kubectl patch sts myapp -p '{"spec":{"replicas":2statefulset.apps/myapp patched

    下面我们再来介绍一下滚动更新。

[root@master stateful]# kubectl explain sts.spec.updateStrategy.rollingUpdate

    假设有4个pod(pod0,pod1,pod2,pod3),如果设置partition为5,那么说明大于等于5的pod更新,我们四个Pod就都不更新;如果partition为4,那么说明大于等于4的pod更新,即pod3更新,其他pod都不更新;如果partiton为3,那么说明大于等于3的pod更新,那么就是pod2和pod3更新,其他pod都不更新。

[root@master stateful]# kubectl patch sts myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":4}}}}'statefulset.apps/myapp patched
[root@master stateful]# kubectl describe sts myappUpdate Strategy:    RollingUpdatePartition:        4

    下面把myapp升级为v2版本

[root@master stateful]# kubectl set image sts/myapp myapp=ikubernetes/myapp:v2statefulset.apps/myapp image updated
[root@master ~]# kubectl get sts -o wideNAME      DESIRED   CURRENT   AGE       CONTAINERS   IMAGESmyapp     2         2         1h        myapp        ikubernetes/myapp:v2
[root@master ~]# kubectl get pods myapp-4 -o yaml containerStatuses:  - containerID: docker://898714f2e5bf4f642e2a908e7da67eebf6d3074c89bbd0d798d191a2061a3115    image: ikubernetes/myapp:v2

    可以看到pod myapp-4使用的模板版本是v2了。

感谢你能够认真阅读完这篇文章,希望小编分享的“docker中stateful控制器怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

docker中stateful控制器怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker中stateful控制器怎么用

这篇文章主要介绍了docker中stateful控制器怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在应用程序中,可以分为有状态应用和无状态应用。 无状态
2023-06-04

docker中pod控制器怎么用

这篇文章给大家分享的是有关docker中pod控制器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 之前创建的pod,是通过资源配置清单定义的,如果手工把这样的pod删除后,不会自己重新创建,这样创建
2023-06-04

Ubuntu中怎么使用Grafana监控Docker

本文小编为大家详细介绍“Ubuntu中怎么使用Grafana监控Docker”,内容详细,步骤清晰,细节处理妥当,希望这篇“Ubuntu中怎么使用Grafana监控Docker”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
2023-06-27

jmeter控制器怎么使用

JMeter 控制器是用于管理测试计划中的元素顺序和执行流程的组件。下面是 JMeter 控制器的使用方法:添加 JMeter 控制器:在 JMeter 工作区右键单击测试计划,选择"Add" -> "Logic Controller" -
2023-10-26

docker中怎么用build制作镜像

在Docker中,可以使用`docker build`命令来制作镜像。首先,在项目的根目录下创建一个名为`Dockerfile`的文件,它包含了构建镜像的指令。在`Dockerfile`中,可以指定基础镜像、复制文件、安装软件包、设置环境
2023-10-26

远程控制云服务器怎么用手机控制

在使用远程控制云服务器之前,用户需要确保自己的设备已连接到网络。然后,用户需要使用手机或平板电脑进入云服务器的管理页面,并选择要控制的应用程序。在应用程序的操作过程中,用户需要输入相应的账户和密码,以确保账户的安全。通过远程控制云服务器,用户可以实现许多方便的功能,如控制云服务器上的应用程序、修改应用程序设置、查看服务
远程控制云服务器怎么用手机控制
2023-10-28

Linux环境中Docker容器的版本控制方法

在Linux环境中,Docker容器的版本控制可以通过以下几种方法实现:使用Dockerfile进行版本控制:Dockerfile是一个文本文件,其中包含了构建镜像的所有指令。通过修改Dockerfile并重新构建镜像,可以创建不同版本的容
Linux环境中Docker容器的版本控制方法
2024-10-07

thinkphp5模板中怎么调用控制器文件

本篇内容介绍了“thinkphp5模板中怎么调用控制器文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、ThinkPHP 5 中的控制器
2023-07-06

Java中怎么控制CPU占用率

Java中怎么控制CPU占用率,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。目的描述:控制CPU占用率CPU占用率:在任务管理器的一个刷新周期内,CPU忙(执行
2023-06-18

SQLServer中怎么使用事务控制

在SQL Server中,可以使用BEGIN TRANSACTION,COMMIT和ROLLBACK语句来实现事务控制。以下是一个简单的示例:BEGIN TRANSACTIONUPDATE table_nameSET column1 =
SQLServer中怎么使用事务控制
2024-03-12

jmeter的if控制器怎么使用

这篇文章主要介绍“jmeter的if控制器怎么使用”,在日常操作中,相信很多人在jmeter的if控制器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jmeter的if控制器怎么使用”的疑惑有所帮助!
2023-06-21

Docker中怎么样制作镜像

小编给大家分享一下Docker中怎么样制作镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言以制作CentOS镜像为例,讲述对镜像自定义,打包以及推送的远程仓
2023-06-25

云服务器控制台怎么用

配置云服务器首先,在控制台中打开云服务器控制台。您可以通过控制台中的“设置”菜单或“设置”菜单项来访问控制台。您可以使用控制台提供的命令行工具来配置云服务器,如设置云服务器的IP地址、端口号、数据库类型、用户名和密码等。您还可以使用控制台提供的脚本语言(如Python)来设置云服务器,以及设置其他设置。设置云服务器配置
云服务器控制台怎么用
2023-10-28

腾讯云服务器远程控制怎么用手机控制

腾讯云服务器远程控制需要按照官方的使用说明进行操作,以下是使用方法:1.在手机上下载并安装“QQ管家”和“腾讯电脑管家”,打开手机“应用宝”或“QQ浏览器”应用商店,搜索并下载安装腾讯云服务器远程控制软件。2.打开应用商店后,点击“腾讯云服务器”选项进入下载界面,下载完成后将文件名改为“.apk”,保存到手机SD卡。3.打开手机“QQ管家”
2023-10-27

Docker怎么限制容器可用的内存

小编给大家分享一下Docker怎么限制容器可用的内存,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要限制容器对内存的使用?限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一旦内核检测到没有足
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录