返回顶部
首页 > 资讯 > 精选 >docker中stateful控制器怎么用
  • 846
分享到

docker中stateful控制器怎么用

2023-06-04 14:06:04 846人浏览 泡泡鱼
摘要

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

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

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

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

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

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

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

    statefulset控制器能实现有状态应用的管理,但实现起来也是非常麻烦的。需要把我们运维管理的过程写入脚本并注入到statefulset中才能使用。虽然互联网上有人做好了stateful的脚本,但是还是建议大家不要轻易的把RedisMysql等这样有状态的应用迁移到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控制器怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: docker中stateful控制器怎么用

本文链接: https://lsjlt.com/news/238316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • docker中stateful控制器怎么用
    这篇文章主要介绍了docker中stateful控制器怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。    在应用程序中,可以分...
    99+
    2023-06-04
  • docker中pod控制器怎么用
    这篇文章给大家分享的是有关docker中pod控制器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。    之前创建的pod,是通过资源配置清单定义的,如果手工把这样的...
    99+
    2023-06-04
  • Ubuntu中怎么使用Grafana监控Docker
    本文小编为大家详细介绍“Ubuntu中怎么使用Grafana监控Docker”,内容详细,步骤清晰,细节处理妥当,希望这篇“Ubuntu中怎么使用Grafana监控Docker”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-06-27
  • jmeter控制器怎么使用
    JMeter 控制器是用于管理测试计划中的元素顺序和执行流程的组件。下面是 JMeter 控制器的使用方法: 添加 JMeter...
    99+
    2023-10-26
    jmeter
  • docker中怎么用build制作镜像
    在Docker中,可以使用`docker build`命令来制作镜像。 首先,在项目的根目录下创建一个名为`Dockerfile`的...
    99+
    2023-10-26
    docker
  • 远程控制云服务器怎么用手机控制
    在使用远程控制云服务器之前,用户需要确保自己的设备已连接到网络。然后,用户需要使用手机或平板电脑进入云服务器的管理页面,并选择要控制的应用程序。在应用程序的操作过程中,用户需要输入相应的账户和密码,以确保账户的安全。 通过远程控制云服务器...
    99+
    2023-10-28
    用手 远程控制 服务器
  • javascript中控制台怎么使用
    这篇文章主要介绍“javascript中控制台怎么使用”,在日常操作中,相信很多人在javascript中控制台怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java...
    99+
    2024-04-02
  • Docker容器中怎么部署Zabbix监控系统
    本篇文章给大家分享的是有关Docker容器中怎么部署Zabbix监控系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装docker。y...
    99+
    2024-04-02
  • thinkphp5模板中怎么调用控制器文件
    本篇内容介绍了“thinkphp5模板中怎么调用控制器文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、ThinkPHP 5 中的控制器...
    99+
    2023-07-06
  • Javascript中怎么控制ScrollBar
    本篇文章为大家展示了Javascript中怎么控制ScrollBar,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。用Javascript控制ScrollBar(滚动...
    99+
    2024-04-02
  • MongoDb中怎么控制用户权限
    今天就跟大家聊聊有关MongoDb中怎么控制用户权限,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Mongodb创建用户的语法在不用的版本之间还是不...
    99+
    2024-04-02
  • Java中怎么控制CPU占用率
    Java中怎么控制CPU占用率,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。目的描述:控制CPU占用率CPU占用率:在任务管理器的一个刷新周期内,CPU忙(执行...
    99+
    2023-06-18
  • SQLServer中怎么使用事务控制
    在SQL Server中,可以使用BEGIN TRANSACTION,COMMIT和ROLLBACK语句来实现事务控制。以下是一个简...
    99+
    2024-03-12
    SQLServer
  • Docker容器监控方案怎么选
    本篇文章给大家分享的是有关Docker容器监控方案怎么选,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着线上服务的全面docker化,对do...
    99+
    2024-04-02
  • Docker中怎么样制作镜像
    小编给大家分享一下Docker中怎么样制作镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言以制作CentOS镜像为例,讲述对镜像自定义,打包以及推送的远程仓...
    99+
    2023-06-25
  • 腾讯云服务器远程控制怎么用手机控制
    腾讯云服务器远程控制需要按照官方的使用说明进行操作,以下是使用方法: 1.在手机上下载并安装“QQ管家”和“腾讯电脑管家”,打开手机“应用宝”或“QQ浏览器”应用商店,搜索并下载安装腾讯云服务器远程控制软件。 2.打开应用商店后,点击“腾...
    99+
    2023-10-27
    腾讯 用手 远程控制
  • jmeter的if控制器怎么使用
    这篇文章主要介绍“jmeter的if控制器怎么使用”,在日常操作中,相信很多人在jmeter的if控制器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jmeter的if控制器怎么使用”的疑惑有所帮助!...
    99+
    2023-06-21
  • 云服务器控制台怎么用
    配置云服务器 首先,在控制台中打开云服务器控制台。您可以通过控制台中的“设置”菜单或“设置”菜单项来访问控制台。您可以使用控制台提供的命令行工具来配置云服务器,如设置云服务器的IP地址、端口号、数据库类型、用户名和密码等。您还可以使用...
    99+
    2023-10-28
    控制台 服务器
  • Docker怎么限制容器可用的内存
    小编给大家分享一下Docker怎么限制容器可用的内存,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要限制容器对内存的使用?限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一旦内核检测到没有足...
    99+
    2023-06-07
  • Ubuntu下怎么使用Grafana监控Docker
    这篇文章主要介绍了Ubuntu下怎么使用Grafana监控Docker的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Ubuntu下怎么使用Grafana监控Docker文章都会有所收获,下面我们一起来看看吧。G...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作