前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s——针对有状态服务实现数据持久化

k8s——针对有状态服务实现数据持久化

作者头像
小手冰凉
发布于 2020-09-15 02:37:03
发布于 2020-09-15 02:37:03
2.3K00
代码可运行
举报
文章被收录于专栏:小手冰凉小手冰凉
运行总次数:0
代码可运行
1、什么是有状态服务和无状态服务?

对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而对于无状态请求,服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。

无状态的服务器程序,最著名的就是WEB服务器。每次HTTP请求和以前都没有什么关系,只是获取目标URI。得到目标内容之后,这次连接就被杀死,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如COOKIE。服务端在响应客户端的请求的时候,会向客户端推送一个COOKIE,这个COOKIE记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个COOKIE,服务端可以根据这个COOKIE判断这个请求的上下文关系。COOKIE的存在,是无状态化向状态化的一个过渡手段,他通过外部扩展手段,COOKIE来维护上下文关系。

状态化的服务器有更广阔的应用范围,比如MSN、网络游戏等服务器。他在服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。这样,客户端可以很容易使用缺省的信息,服务端也可以很容易地进行状态管理。比如说,当一个用户登录后,服务端可以根据用户名获取他的生日等先前的注册信息;而且在后续的处理中,服务端也很容易找到这个用户的历史信息。

状态化服务器在功能实现方面具有更加强大的优势,但由于他需要维护大量的信息和状态,在性能方面要稍逊于无状态服务器。无状态服务器在处理简单服务方面有优势,但复杂功能方面有很多弊端,比如,用无状态服务器来实现即时通讯服务器,将会是场恶梦。

2、K8s有状态服务和无状态服务的数据持久化有什么区别?

在k8s中,对web这种无状态服务实现数据持久化时,采用我之前的博文:K8s——数据持久化自动创建PV的方式对其实现即可。但是如果对数据库这种有状态的服务使用这种数据持久化方式的话,那么将会有一个很严重的问题,就是当对数据库进行写入操作时,你会发现只能对后端的多个容器中的其中一个容器进行写入,当然,nfs目录下也会有数据库写入的数据,但是,其无法被其他数据库读取到,因为在数据库中有很多影响因素,比如server_id,数据库分区表信息等。

当然,除了数据库之外,还有其他的有状态服务不可以使用上述的数据持久化方式。

3、数据持久化实现方式——StatefullSet

StatefulSet也是一种资源对象(在kubelet 1.5版本之前都叫做PetSet),这种资源对象和RS、RC、Deployment一样,都是Pod控制器。

Kubernetes中,大多数的Pod管理都是基于无状态、一次性的理念。例如Replication Controller,它只是简单的保证可提供服务的Pod数量。如果一个Pod被认定为不健康的,Kubernetes就会以对待牲畜的态度对待这个Pod——删掉、重建。相比于牲畜应用,PetSet(宠物应用),是由一组有状态的Pod组成,每个Pod有自己特殊且不可改变的ID,且每个Pod中都有自己独一无二、不能删除的数据。

  众所周知,相比于无状态应用的管理,有状态应用的管理是非常困难的。有状态的应用需要固定的ID、有自己内部可不见的通信逻辑、特别容器出现剧烈波动等。传统意义上,对有状态应用的管理一般思路都是:固定机器、静态IP、持久化存储等。Kubernetes利用PetSet这个资源,弱化有状态Pet与具体物理设施之间的关联。一个PetSet能够保证在任意时刻,都有固定数量的Pet在运行,且每个Pet都有自己唯一的身份。

一个“有身份”的Pet指的是该Pet中的Pod包含如下特性:

  • 静态存储;
  • 有固定的主机名,且DNS可寻址(稳定的网络身份,这是通过一种叫 Headless Service 的特殊Service来实现的。 和普通Service相比,Headless Service没有Cluster IP,用于为一个集群内部的每个成员提供一个唯一的DNS名字,用于集群内部成员之间通信 。);
  • 一个有序的index(比如PetSet的名字叫mysql,那么第一个启起来的Pet就叫mysql-0,第二个叫mysql-1,如此下去。当一个Pet down掉后,新创建的Pet会被赋予跟原来Pet一样的名字,通过这个名字就能匹配到原来的存储,实现状态保存。)

1、应用举例:

  • 数据库应用,如Mysql、PostgreSQL,需要一个固定的ID(用于数据同步)以及外挂一块NFS Volume(持久化存储)。
  • 集群软件,如zookeeper、Etcd,需要固定的成员关系。 2、使用限制
  • 1.4新加功能,1.3及之前版本不可用;
  • DNS,要求使用1.4或1.4之后的DNS插件,1.4之前的插件只能解析Service对应的IP,无法解析Pod(HostName)对应的域名;
  • 需要持久化数据卷(PV,若为nfs这种无法通过调用API来创建存储的网络存储,数据卷要在创建PetSet之前静态创建;若为aws-ebs、vSphere、openstack Cinder这种可以通过API调用来动态创建存储的虚拟存储,数据卷除了可以通过静态的方式创建以外,还可以通过StorageClass进行动态创建。需要注意的是,动态创建出来的PV,默认的回收策略是delete,及在删除数据的同时,还会把虚拟存储卷删除);
  • 删除或缩容PetSet不会删除对应的持久化数据卷,这么做是出于数据安全性的考虑;
  • 只能通过手动的方式升级PetSet。

示例

这种方式,与K8s——数据持久化自动创建PV的方式有很多相同点,都需要底层NFS存储、rbac授权账户,nfs-client-Provisioner提供存储,SC存储类这些东西,唯一不同的是,这种针对于有状态服务的数据持久化,并不需要我们手动创建PV。

搭建registry私有仓库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# docker run -itd --name registry -p 5000:5000 -v /data/registry:/var/lib/registry --restart always registry
//更改docker配置文件 ,以便指定私有仓库
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 
...
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s02:/usr/lib/systemd/system/docker.service   
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s03:/usr/lib/systemd/system/
[root@docker-k8s01 ~]# systemctl daemon-reload 
[root@docker-k8s01 ~]# systemctl restart docker 

搭建NFS服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# yum -y install nfs-utils
[root@docker-k8s01 ~]# cat /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@docker-k8s01 ~]# mkdir /nfsdata
[root@docker-k8s01 ~]# systemctl enable rpcbind
[root@docker-k8s01 ~]# systemctl enable nfs-server
[root@docker-k8s01 ~]# systemctl restart nfs-server
[root@docker-k8s01 ~]# systemctl restart rpcbind
[root@docker-k8s01 ~]# showmount -e
Export list for docker-k8s01:
/nfsdata *

至此,准备工作就做好了。

1、使用自定义镜像,创建StatefulSet资源对象,要求每个都做数据持久化。副本数量为6个。数据持久化目录为:/usr/local/apache2/htdocs

创建rbac授权

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//编写rbac的yaml文件

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-provisioner-runner
  namespace: default
rules:
   -  apiGroups: [""]
      resources: ["persistentvolumes"]
      verbs: ["get", "list", "watch", "create", "delete"]
   -  apiGroups: [""]
      resources: ["persistentvolumeclaims"]
      verbs: ["get", "list", "watch", "update"]
   -  apiGroups: ["storage.k8s.io"]
      resources: ["storageclasses"]
      verbs: ["get", "list", "watch"]
   -  apiGroups: [""]
      resources: ["events"]
      verbs: ["watch", "create", "update", "patch"]
   -  apiGroups: [""]
      resources: ["services", "endpoints"]
      verbs: ["get","create","list", "watch","update"]
   -  apiGroups: ["extensions"]
      resources: ["podsecuritypolicies"]
      resourceNames: ["nfs-provisioner"]
      verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
//执行yaml文件
[root@docker-k8s01 ~]# kubectl apply -f rbac.yaml 

创建NFS-clinet-Provisioner

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//编写yaml文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: nfs-client-provisioner
  namespace: default
spec: 
  replicas: 1
  strategy: 
    type: Recreate
  template: 
    metadata: 
      labels: 
        app: nfs-client-provisioner
    spec: 
      serviceAccount: nfs-provisioner
      containers: 
        - name: nfs-client-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner 
          volumeMounts: 
            - name: nfs-client-root 
              mountPath: /persistentvolumes
          env: 
            - name: PROVISIONER_NAME
              value: zyz
            - name: NFS_SERVER
              value: 192.168.171.151
            - name: NFS_PATH
              value: /nfsdata
      volumes: 
        - name: nfs-client-root
          nfs: 
            server: 192.168.171.151
            path: /nfsdata
//执行编写好的yaml文件
[root@docker-k8s01 ~]# kubectl apply -f nfs-deployment.yaml 

创建SC(storageClass)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//编写sc的yaml文件

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: 
  name: test-sc
provisioner: zyz
reclaimPolicy: Retain

[root@docker-k8s01 ~]# kubectl apply -f sc.yaml 

创建Pod

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//编写yaml文件
apiVersion: v1
kind: Service
metadata: 
  name: headless-svc
  labels: 
    app: headless-svc
spec: 
  ports: 
  - name: testweb
    port: 80
  selector: 
    app: headless-pod
  clusterIP: None

---
apiVersion: apps/v1
kind: StatefulSet
metadata: 
  name: statefulset
spec: 
  serviceName: headless-svc
  replicas: 6
  selector: 
    matchLabels: 
      app: headless-pod
  template: 
    metadata: 
      labels: 
        app: headless-pod
    spec: 
      containers: 
      - name: testhttpd
        image: 192.168.171.151:5000/zyz:v1
        ports: 
        - containerPort: 80
        volumeMounts: 
        - name: test
          mountPath: /usr/local/apache2/htdocs
  volumeClaimTemplates:
  - metadata:
      name: test
      annotations:
        volume.beta.kubernetes.io/storage-class: test-sc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# kubectl apply -f statefulset.yaml 
//查看Pod运行状态
[root@docker-k8s01 ~]# kubectl get pod -w
NAME                                     READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-89699f486-qg7qw   1/1     Running   0          33m
statefulset-0                            1/1     Running   0          12m
statefulset-1                            1/1     Running   0          42s
statefulset-2                            1/1     Running   0          36s
statefulset-3                            1/1     Running   0          33s
statefulset-4                            1/1     Running   0          30s
statefulset-5                            1/1     Running   0          26s
//查看pv及pvc的状态是否为bound,是否已经自动创建
[root@docker-k8s01 ~]# kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
persistentvolume/pvc-050c1c1b-bd54-43ff-a654-1783003d350a   100Mi      RWO            Delete           Bound    default/test-statefulset-5   test-sc                 2m2s
persistentvolume/pvc-53ba1821-5bed-4258-8291-604ca1656cda   100Mi      RWO            Delete           Bound    default/test-statefulset-2   test-sc                 2m13s
persistentvolume/pvc-b45b773a-475e-4e47-a670-436a604647d7   100Mi      RWO            Delete           Bound    default/test-statefulset-3   test-sc                 2m10s
persistentvolume/pvc-c9a44625-15d4-4ce9-8177-2e6c72178dd7   100Mi      RWO            Delete           Bound    default/test-statefulset-4   test-sc                 2m7s
persistentvolume/pvc-f0f4f4c1-6a00-498d-92a9-b794622dce3e   100Mi      RWO            Delete           Bound    default/test-statefulset-0   test-sc                 2m22s
persistentvolume/pvc-f7d3c7b2-c16d-4204-b2d7-14d3377b48d1   100Mi      RWO            Delete           Bound    default/test-statefulset-1   test-sc                 2m19s

NAME                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-statefulset-0   Bound    pvc-f0f4f4c1-6a00-498d-92a9-b794622dce3e   100Mi      RWO            test-sc        13m
persistentvolumeclaim/test-statefulset-1   Bound    pvc-f7d3c7b2-c16d-4204-b2d7-14d3377b48d1   100Mi      RWO            test-sc        2m19s
persistentvolumeclaim/test-statefulset-2   Bound    pvc-53ba1821-5bed-4258-8291-604ca1656cda   100Mi      RWO            test-sc        2m13s
persistentvolumeclaim/test-statefulset-3   Bound    pvc-b45b773a-475e-4e47-a670-436a604647d7   100Mi      RWO            test-sc        2m10s
persistentvolumeclaim/test-statefulset-4   Bound    pvc-c9a44625-15d4-4ce9-8177-2e6c72178dd7   100Mi      RWO            test-sc        2m7s
persistentvolumeclaim/test-statefulset-5   Bound    pvc-050c1c1b-bd54-43ff-a654-1783003d350a   100Mi      RWO            test-sc        2m3s

2、完成之后,要求第0--5个Pod的主目录应该为: Version:--v1

将服务进行扩容:副本数量更新为10个,验证是否会继续为新的Pod创建持久化的PV,PVC

//编写脚本定义首页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# cat a.sh 
#!/bin/bash
for i in `ls /nfsdata`
do
    echo "test---v1" > /nfsdata/${i}/index.html
done
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//查看节点IP,随机验证首页文件
[root@docker-k8s01 ~]# kubectl get pod -o wide
[root@docker-k8s01 ~]# curl 10.244.1.3
test---v1
[root@docker-k8s01 ~]# curl 10.244.2.2
test---v1
[root@docker-k8s01 ~]# curl 10.244.2.3
test---v1
[root@docker-k8s01 ~]# curl 10.244.1.4
test---v1
//进行扩容更新
apiVersion: v1
kind: Service
metadata:
  name: headless-svc
  labels:
    app: headless-svc
spec:
  ports:
  - name: testweb
    port: 80
  selector:
    app: headless-pod
  clusterIP: None

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset
spec:
  updateStrategy:
    rollingUpdate:
      partition: 4
  serviceName: headless-svc
  replicas: 10
  selector:
    matchLabels:
      app: headless-pod
  template:
    metadata:
      labels:
        app: headless-pod
    spec:
      containers:
      - name: testhttpd
        image: 192.168.171.151:5000/zyz:v2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: test
          mountPath: /usr/local/apache2/htdocs
  volumeClaimTemplates:
  - metadata:
      name: test
      annotations:
        volume.beta.kubernetes.io/storage-class: test-sc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
//查看其更新过程
[root@docker-k8s01 ~]# kubectl get pod -w
NAME                                     READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-89699f486-zqxsm   1/1     Running   0          18m
statefulset-0                            1/1     Running   0          17m
statefulset-1                            1/1     Running   0          17m
statefulset-2                            1/1     Running   0          17m
statefulset-3                            1/1     Running   0          16m
statefulset-4                            1/1     Running   0          16m
statefulset-5                            1/1     Running   0          16m
statefulset-6                            1/1     Running   0          7s
statefulset-7                            1/1     Running   0          4s
statefulset-8                            0/1     Pending   0          1s
statefulset-8                            0/1     Pending   0          1s
statefulset-8                            0/1     ContainerCreating   0          1s
statefulset-8                            1/1     Running             0          3s
statefulset-9                            0/1     Pending             0          0s
statefulset-9                            0/1     Pending             0          0s
statefulset-9                            0/1     Pending             0          2s
statefulset-9                            0/1     ContainerCreating   0          2s
statefulset-9                            1/1     Running             0          3s
statefulset-5                            1/1     Terminating         0          16m
statefulset-5                            0/1     Terminating         0          16m
statefulset-5                            0/1     Terminating         0          17m
statefulset-5                            0/1     Terminating         0          17m
statefulset-5                            0/1     Pending             0          0s
statefulset-5                            0/1     Pending             0          0s
statefulset-5                            0/1     ContainerCreating   0          0s
statefulset-5                            1/1     Running             0          2s
statefulset-4                            1/1     Terminating         0          17m
statefulset-4                            0/1     Terminating         0          17m
statefulset-4                            0/1     Terminating         0          17m
statefulset-4                            0/1     Terminating         0          17m
statefulset-4                            0/1     Pending             0          0s
statefulset-4                            0/1     Pending             0          0s
statefulset-4                            0/1     ContainerCreating   0          0s
statefulset-4                            1/1     Running             0          0s
//查看其为扩容后的容器创建的pv及pvc
[root@docker-k8s01 ~]# kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   REASON   AGE
persistentvolume/pvc-2a4e3249-8513-4e42-b883-aca51399d667   100Mi      RWO            Delete           Bound    default/test-statefulset-3   test-sc                 19m
persistentvolume/pvc-394568f7-5a38-413f-aaf2-4fa9f452a515   100Mi      RWO            Delete           Bound    default/test-statefulset-8   test-sc                 2m25s
persistentvolume/pvc-40149679-e321-450d-8286-f4cd9a67f20f   100Mi      RWO            Delete           Bound    default/test-statefulset-5   test-sc                 19m
persistentvolume/pvc-4f0a4fe3-8fa1-4bb9-ab7f-8652e2f4667c   100Mi      RWO            Delete           Bound    default/test-statefulset-0   test-sc                 19m
persistentvolume/pvc-6c9bb0ed-4705-451b-a75e-2876c83a9cee   100Mi      RWO            Delete           Bound    default/test-statefulset-7   test-sc                 2m28s
persistentvolume/pvc-88652b42-f9cb-4c83-8660-5edfb2c7476f   100Mi      RWO            Delete           Bound    default/test-statefulset-4   test-sc                 19m
persistentvolume/pvc-8d20cbb9-6aac-4ea6-8517-bd0c124b37a4   100Mi      RWO            Delete           Bound    default/test-statefulset-9   test-sc                 2m22s
persistentvolume/pvc-8d65da35-2219-459b-a26d-6e7ee0b7be48   100Mi      RWO            Delete           Bound    default/test-statefulset-6   test-sc                 2m31s
persistentvolume/pvc-c2efd8ce-f90b-4eef-8f49-cdc55c375701   100Mi      RWO            Delete           Bound    default/test-statefulset-2   test-sc                 19m
persistentvolume/pvc-e2a2b826-b8c3-485f-89ce-d0e54b3012f2   100Mi      RWO            Delete           Bound    default/test-statefulset-1   test-sc                 19m

NAME                                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-statefulset-0   Bound    pvc-4f0a4fe3-8fa1-4bb9-ab7f-8652e2f4667c   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-1   Bound    pvc-e2a2b826-b8c3-485f-89ce-d0e54b3012f2   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-2   Bound    pvc-c2efd8ce-f90b-4eef-8f49-cdc55c375701   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-3   Bound    pvc-2a4e3249-8513-4e42-b883-aca51399d667   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-4   Bound    pvc-88652b42-f9cb-4c83-8660-5edfb2c7476f   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-5   Bound    pvc-40149679-e321-450d-8286-f4cd9a67f20f   100Mi      RWO            test-sc        19m
persistentvolumeclaim/test-statefulset-6   Bound    pvc-8d65da35-2219-459b-a26d-6e7ee0b7be48   100Mi      RWO            test-sc        2m31s
persistentvolumeclaim/test-statefulset-7   Bound    pvc-6c9bb0ed-4705-451b-a75e-2876c83a9cee   100Mi      RWO            test-sc        2m28s
persistentvolumeclaim/test-statefulset-8   Bound    pvc-394568f7-5a38-413f-aaf2-4fa9f452a515   100Mi      RWO            test-sc        2m25s
persistentvolumeclaim/test-statefulset-9   Bound    pvc-8d20cbb9-6aac-4ea6-8517-bd0c124b37a4   100Mi      RWO            test-sc        2m22s
[root@docker-k8s01 ~]# kubectl get pod -o wide
NAME                                     READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
nfs-client-provisioner-89699f486-zqxsm   1/1     Running   0          21m     10.244.1.2   docker-k8s02   <none>           <none>
statefulset-0                            1/1     Running   0          20m     10.244.1.3   docker-k8s02   <none>           <none>
statefulset-1                            1/1     Running   0          19m     10.244.2.2   docker-k8s03   <none>           <none>
statefulset-2                            1/1     Running   0          19m     10.244.2.3   docker-k8s03   <none>           <none>
statefulset-3                            1/1     Running   0          19m     10.244.1.4   docker-k8s02   <none>           <none>
statefulset-4                            1/1     Running   0          2m15s   10.244.2.7   docker-k8s03   <none>           <none>
statefulset-5                            1/1     Running   0          2m27s   10.244.1.8   docker-k8s02   <none>           <none>
statefulset-6                            1/1     Running   0          2m52s   10.244.2.5   docker-k8s03   <none>           <none>
statefulset-7                            1/1     Running   0          2m49s   10.244.1.6   docker-k8s02   <none>           <none>
statefulset-8                            1/1     Running   0          2m46s   10.244.2.6   docker-k8s03   <none>           <none>
statefulset-9                            1/1     Running   0          2m43s   10.244.1.7   docker-k8s02   <none>           <none>
//访问查看其首页文件
[root@docker-k8s01 ~]# curl 10.244.2.5
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<ul></ul>
</body></html>
[root@docker-k8s01 ~]# curl 10.244.1.8
test---v1

服务进行更新:在更新过程中,要求id3以后的全部更新为Version:v2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//编写脚本文件
[root@docker-k8s01 ~]# cat b.sh 
#!/bin/bash
for i in `ls /nfsdata/`
do
  if [ `echo $i | awk -F - '{print $4}'` -gt 3 ]
  then
    echo "test---v2" > /nfsdata/${i}/index.html
  fi
done
[root@docker-k8s01 ~]# sh b.sh 

//查看Pod IP,访问验证是否更新成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@docker-k8s01 ~]# kubectl get pod -o wide
NAME                                     READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
nfs-client-provisioner-89699f486-zqxsm   1/1     Running   0          25m     10.244.1.2   docker-k8s02   <none>           <none>
statefulset-0                            1/1     Running   0          24m     10.244.1.3   docker-k8s02   <none>           <none>
statefulset-1                            1/1     Running   0          24m     10.244.2.2   docker-k8s03   <none>           <none>
statefulset-2                            1/1     Running   0          24m     10.244.2.3   docker-k8s03   <none>           <none>
statefulset-3                            1/1     Running   0          24m     10.244.1.4   docker-k8s02   <none>           <none>
statefulset-4                            1/1     Running   0          6m36s   10.244.2.7   docker-k8s03   <none>           <none>
statefulset-5                            1/1     Running   0          6m48s   10.244.1.8   docker-k8s02   <none>           <none>
statefulset-6                            1/1     Running   0          7m13s   10.244.2.5   docker-k8s03   <none>           <none>
statefulset-7                            1/1     Running   0          7m10s   10.244.1.6   docker-k8s02   <none>           <none>
statefulset-8                            1/1     Running   0          7m7s    10.244.2.6   docker-k8s03   <none>           <none>
statefulset-9                            1/1     Running   0          7m4s    10.244.1.7   docker-k8s02   <none>           <none>
//访问statefulset4
[root@docker-k8s01 ~]# curl 10.244.2.7
test---v2
//访问statefulset0
[root@docker-k8s01 ~]# curl 10.244.1.3
test---v1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VulnHub靶场 PwnLab: init 渗透测试思路
是个白名单验证只能上传图片马,然后使用index.php的文件包含漏洞getshell,这里需要登陆才能上传文件
曈曈too
2024/08/24
1611
VulnHub靶场 PwnLab: init 渗透测试思路
从Vulbhub-djinn靶机学习命令注入和Python input() 漏洞
靶机描述:Level: Beginner-Intermediate flags: user.txt and root.txt Description: The machine is VirtualBox as well asVMWare compatible. The DHCP will assign an IPautomatically. You'll see the IP right on the loginscreen. You have to find and read two flags (user androot) which is present in user.txt and root.txtrespectively. Format: Virtual Machine (Virtualbox - OVA) Operating System: Linux
Power7089
2019/12/12
8200
从Vulbhub-djinn靶机学习命令注入和Python input() 漏洞
黑客技能训练:攻破MrRobot
今天挑战的是Mr Robot。 首先在Nmap扫描之前提一个小技巧。 PPPOE宽带拨号环境下nmap不能直接使用,需要提升权限,要使用-e 参数加上网卡设备名 当前我使用的是无线宽带,通过无线网卡实
lonelyvaf
2018/06/07
8620
HTB:Charon渗透测试
靶机地址:https://www.hackthebox.eu/home/machines/profile/42
亿人安全
2022/08/30
7170
HTB:Charon渗透测试
靶机实战 |『VulnHub系列』Bottleneck 1-Walkthrough
发现这个img标签的src的值有点特别,对其进行base64解码,得到图片名称bottleneck_dontbe.png
Power7089
2019/11/09
2.1K0
靶机实战 |『VulnHub系列』Bottleneck 1-Walkthrough
Vulnhub Funbox4靶机渗透练习
使用gobuster工具继续对目录igmseklhgmrjmtherij2145236 、upload扫描
红队蓝军
2025/02/12
580
Vulnhub Funbox4靶机渗透练习
MinUv1靶机渗透
看链接以为是文件包含,试验了一下,都是403,估摸着是有waf拦截了,最后尝试了一下命令注入,发现可行
Elapse
2020/08/17
9140
【HTB系列】靶机Vault的渗透测试详解
We are proud to announce our first client: Sparklays (Sparklays.com still under construction)
Ms08067安全实验室
2019/09/25
9290
Vulnhub-DOUBLETROUBLE靶机渗透实战
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。
网络安全自修室
2024/05/23
3120
Vulnhub-DOUBLETROUBLE靶机渗透实战
CTF挑战130分 | Rickdiculously 1.0
Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚机到获取操作系统的root权限和查看flag。
FB客服
2018/07/30
1.2K0
CTF挑战130分 | Rickdiculously 1.0
vulnhub-Raven2
Raven 2是中级boot2root VM, 有4个flag需要搜集,在多次被攻破后,Raven Security 采取了额外的措施来加固其Web服务器,以防止黑客入侵。您是否仍然可以攻破Raven?
LuckySec
2022/11/02
6560
vulnhub-Raven2
【VulnHub】Raven: 2 靶机的渗透测试
4. 查看wordpress的wp-config.php配置文件得到数据库账号密码
Ms08067安全实验室
2019/10/15
1.4K0
【Vulnhub靶机系列】DC5
那说明下面这一块footer是另外一个文件加载的,如果是写死在网页里面的话不会出现这种情况
Ms08067安全实验室
2022/09/26
6140
VulnHub靶机学习——Eric
声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
Power7089
2019/11/25
1K0
记一次渗透后运用多种方式提权实战
近期在学习Linux提权,完成了vulnhub上的42challenge靶场。该靶场在web渗透阶段表现的中规中矩,但在获得shell后的提权过程中,表现很出色。提权题目设计的逻辑严谨(不会出现突然的脑洞让你卡住),注重基础知识的考察,要求的知识面也很广,涉及到密码破解、程序逆向分析、第三方应用提权、进程提权、ssh免密登录、Linux ACL访问控制权限等方面的知识,属于不可多得的精品之作,下面就开始这次靶场实战之旅。
FB客服
2021/03/24
1.9K0
VulnHub通关日记-DC_5-Walkthrough
DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing.
Gcow安全团队
2020/03/06
7880
Vulnhub靶机:DC-1
Vulnhub是一个提供各种漏洞环境的靶场平台,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。每个镜像会有破解的目标,挑战的目标是获取操作系统的root权限和查看flag。
小简
2022/12/29
1.6K0
Vulnhub靶机:DC-1
vulnhub靶场之DC-8靶场实战(超详细)
访问网站首页,http://192.168.111.143/?nid=1,通过nid进行传参
红队蓝军
2024/08/14
4870
vulnhub靶场之DC-8靶场实战(超详细)
Vulhub系列:EVM 1
This is super friendly box intended for Beginner's This may work better with VirtualBox than VMware
Ms08067安全实验室
2019/12/02
8800
VulnHub靶场 DarkHole:1
目标靶机开启了22端口,运行版本号为OpenSSH 8.2p1的SSH服务;开启了80端口,http服务,其中间件为Apache/2.4.41。
潇湘信安
2023/03/10
9730
VulnHub靶场 DarkHole:1
相关推荐
VulnHub靶场 PwnLab: init 渗透测试思路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验