美文网首页
k8s deployment+statefulset资源

k8s deployment+statefulset资源

作者: Joening | 来源:发表于2023-05-09 17:36 被阅读0次

部署deployment + statefulset 服务测试

部署deployment

环境准备:

环境中需要部署storageclass 可以提供创建pv,pvc能力
环境中需要部署ingress-controller 可以使用域名访问pod

资源创建

pv-pvc资源创建
# pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-pv
  namespace: default
spec:
  persistentVolumeReclaimPolicy: "Recycle"
  accessModes:
  - ReadWriteOnce
  storageClassName: "nfs-storage"
  capacity:
    storage: 2Gi
  nfs:
    server: 10.0.0.13
    path: /data/


    
# pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-pvc
  namespace: default
spec:
  accessModes: 
  - ReadWriteOnce
  storageClassName: "nfs-storage"
  resources:
    requests:
      storage: 1Gi

deployment资源创建
apiVersion: apps/v1
kind: Deployment
metadata:
  name: default-deploy-nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      iter: nginx
  template:
    metadata:
      labels: 
        iter: nginx
    spec:
      initContainers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh"]
        args: ["-c","echo statefulset-deploy-nginx-pod > /data/index.html"]
        volumeMounts:
        - name: mount-deploy
          mountPath: /data/
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: mount-deploy
          mountPath: /usr/share/nginx/html

      volumes:
      - name: mount-deploy
        persistentVolumeClaim:
          claimName: default-pvc

service资源创建
apiVersion: v1
kind: Service
metadata:
  name: default-svc-nginx
  namespace: default
spec:
  selector:
     iter: nginx
  ports:
  - name: www
    port: 80
    targetPort: 80

ingress资源创建
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: default-ing-nginx
  namespace: default
spec:
  rules:
  - host: www.nginx.com
    http:
      paths:
      - path: /
        backend:
          serviceName: default-svc-nginx
          servicePort: 80

资源检查

[root@master deployment]# kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS          REASON   AGE
persistentvolume/default-pv                                 2Gi        RWO            Recycle          Bound    default/default-pvc               nfs-storage                    23m
persistentvolume/pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4   1Gi        RWO            Delete           Bound    default/test-default-sts-test-1   managed-nfs-storage            47m
persistentvolume/pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d   1Gi        RWO            Delete           Bound    default/test-default-sts-test-2   managed-nfs-storage            47m
persistentvolume/pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f   1Gi        RWO            Delete           Bound    default/test-default-sts-test-0   managed-nfs-storage            48m

NAME                                            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/default-pvc               Bound    default-pv                                 2Gi        RWO            nfs-storage           22m
persistentvolumeclaim/test-default-sts-test-0   Bound    pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f   1Gi        RWO            managed-nfs-storage   48m
persistentvolumeclaim/test-default-sts-test-1   Bound    pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4   1Gi        RWO            managed-nfs-storage   47m
persistentvolumeclaim/test-default-sts-test-2   Bound    pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d   1Gi        RWO            managed-nfs-storage   47m

[root@master deployment]# kubectl get ing,svc,pod
NAME                                   HOSTS              ADDRESS   PORTS   AGE
ingress.extensions/default-ing         www.qiaoning.com             80      40m
ingress.extensions/default-ing-nginx   www.nginx.com                80      16m

NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/default-svc         ClusterIP   None             <none>        80/TCP    47m
service/default-svc-nginx   ClusterIP   10.254.151.219   <none>        80/TCP    17m
service/kubernetes          ClusterIP   10.254.0.1       <none>        443/TCP   62m

NAME                                          READY   STATUS    RESTARTS   AGE
pod/default-deploy-nginx-b6978cc8d-752tb      1/1     Running   0          6m51s
pod/default-deploy-nginx-b6978cc8d-bq8lf      1/1     Running   0          6m51s
pod/default-deploy-nginx-b6978cc8d-k24lc      1/1     Running   0          6m51s
pod/default-sts-test-0                        1/1     Running   0          49m
pod/default-sts-test-1                        1/1     Running   0          48m
pod/default-sts-test-2                        1/1     Running   0          48m
pod/nfs-client-provisioner-64949c6bfc-q2xlv   1/1     Running   0          54m
[root@master deployment]# 

配置hosts并测试

[root@master deployment]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.12 master
10.0.0.13 node  www.nginx.com

[root@master deployment]# curl www.nginx.com 
statefulset-deploy-nginx-pod

statefulset服务测试

statefulset资源创建
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: default-sts-test
  namespace: default
spec:
  serviceName: default-svc
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: www
          containerPort: 80
        volumeMounts:
        - name: test
          mountPath: /usr/share/nginx/html

  volumeClaimTemplates:
  - metadata:
      name: test
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi

service资源创建
apiVersion: v1
kind: Service
metadata:
  name: default-svc
  namespace: default
spec:
  selector:
    app: nginx
  clusterIP: None
  ports:
  - name: www
    port: 80
    targetPort: 80

ingress资源创建

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: default-ing
  namespace: default
spec:
  rules:
  - host: www.qiaoning.com
    http:
      paths:
      - path: / 
        backend:
          serviceName: default-svc
          servicePort: 80

资源检查
[root@master statefulset]# kubectl get pods,pvc,pv,sts,ing,svc
NAME                                          READY   STATUS    RESTARTS   AGE
pod/default-deploy-nginx-b6978cc8d-752tb      1/1     Running   0          9m33s
pod/default-deploy-nginx-b6978cc8d-bq8lf      1/1     Running   0          9m33s
pod/default-deploy-nginx-b6978cc8d-k24lc      1/1     Running   0          9m33s
pod/default-sts-test-0                        1/1     Running   0          52m
pod/default-sts-test-1                        1/1     Running   0          50m
pod/default-sts-test-2                        1/1     Running   0          50m
pod/nfs-client-provisioner-64949c6bfc-q2xlv   1/1     Running   0          57m

NAME                                            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/default-pvc               Bound    default-pv                                 2Gi        RWO            nfs-storage           25m
persistentvolumeclaim/test-default-sts-test-0   Bound    pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f   1Gi        RWO            managed-nfs-storage   52m
persistentvolumeclaim/test-default-sts-test-1   Bound    pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4   1Gi        RWO            managed-nfs-storage   50m
persistentvolumeclaim/test-default-sts-test-2   Bound    pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d   1Gi        RWO            managed-nfs-storage   50m

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS          REASON   AGE
persistentvolume/default-pv                                 2Gi        RWO            Recycle          Bound    default/default-pvc               nfs-storage                    26m
persistentvolume/pvc-05eb79f7-4554-4e0f-a6a5-b2e42e7c52d4   1Gi        RWO            Delete           Bound    default/test-default-sts-test-1   managed-nfs-storage            50m
persistentvolume/pvc-2236aadf-bd89-4975-afa1-1ad2d49eee8d   1Gi        RWO            Delete           Bound    default/test-default-sts-test-2   managed-nfs-storage            50m
persistentvolume/pvc-eb955f49-12c2-4f02-aea8-44ef3b8cd02f   1Gi        RWO            Delete           Bound    default/test-default-sts-test-0   managed-nfs-storage            52m

NAME                                READY   AGE
statefulset.apps/default-sts-test   3/3     52m

NAME                                   HOSTS              ADDRESS   PORTS   AGE
ingress.extensions/default-ing         www.qiaoning.com             80      43m
ingress.extensions/default-ing-nginx   www.nginx.com                80      18m

NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/default-svc         ClusterIP   None             <none>        80/TCP    50m
service/default-svc-nginx   ClusterIP   10.254.151.219   <none>        80/TCP    20m
service/kubernetes          ClusterIP   10.254.0.1       <none>        443/TCP   65m

配置hosts 测试
[root@master statefulset]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.12 master
10.0.0.13 node www.qiaoning.com www.nginx.com

[root@master statefulset]# while sleep 0.1 ;do curl www.qiaoning.com ;done
333
222
333
111
222
111
333
333
222
222
111
111
333
333
222
222
111
111
测试Pod挂载
apiVersion: v1
kind: Pod
metadata:
  name: mount-pod
  namespace: default
spec:
  containers:
  - name: http
    image: busybox
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    volumeMounts:
    - name: test
      mountPath: /data/
    command: 
    - "/bin/sh"
    args:
    - "-c"
    - "sleep infinity

  volumes:
  - name: test
    hostPath:
      path: /opt/cni/bin/
---

apiVersion: v1
kind: Pod
metadata:
  name: pod-command
  namespace: default
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: name
            operator: In
            values:
            - qiaoning
  initContainers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh"]
    args: ["-c","sleep 10 ; echo success > /root/Done.txt"]
  containers:
  - name: qiaoning
    image: nginx
    imagePullPolicy: IfNotPresent
    envFrom:
    - configMapRef:
        name: default-cm
    ports:
    - containerPort: 80
    lifecycle:
      postStart:
        exec:
          command:
          - "/bin/bash"
          - "-c"
          - "echo hello nginx !!! ; touch /root/qiaoning.txt"
      preStop:
        exec:
          command:
          - "/bin/bash"
          - "-c"
          - "echo hello nginx !!! ; rm -rf /tmp/"
    resources:
      limits:
        cpu: 0.5m
      requests:
        cpu: 0.3m
    volumeMounts:
    - name: command-path
      mountPath: /usr/share/nginx/html

  volumes:
  - name: command-path
    persistentVolumeClaim:
      claimName: default-pvc


各种资源手动编写

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-pv
  namespace: default
spec:
  storageClassName: "nfs-storage"
  accessModes: 
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  capacity: 
    sotrage: 1Gi
  nfs:
    server: 10.0.0.13
    path: /data/
---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-pvc
  namespace: default
spec:
  storageClassName: "nfs-storage"
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: 
kind: Ingress
metadata:
  name: default-ing
  namespace: default
spec:
  rules:
  - host: www.qiaoning.com
    http:
      paths:
      - path: / 
        backend:
          serviceName: default-svc
          servicePort: 80
---
apiVersion:  v1
kind: Service
metadata:
  name: default-svc
  namespace: default
spec:
  clusterIP: None
  selector: 
     app: nginx
  ports:
  - name: www
    port: 80
    targetPort: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: default-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: default-sts
  namespace: default
spec:
  serviceName: default-svc
  replicas: 3
  selector:
    matchLabels:
      app: nginx 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: www
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: test-path
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: test-path
    spec:
      accessModes: 
      - ReadWriteOnce
      storageClassName: "nfs-storage"
      resources:
        requests:
          storage: 1Gi

相关文章

  • 外部Prometheus监控k8s集群资源

    Prometheus监控k8s资源 通过Prometheus监控k8s集群中各种资源:如微服务,容器资源指标 并在...

  • 第二章:K8S的资源管理

    K8S的资源管理 k8s编排资源介绍 回顾:Master:- APIServer: 6443端口- 用户认证: 双...

  • k8s资源类型

    k8s资源关系k8s资源类型主要有Deployment、Service、Pod、ReplicaSet,它们之间的关...

  • 《kubernetes in Action》读书笔记

    1. k8s介绍 k8s对各异构的数据中心进行了资源抽象,提供资源管理、编排能力。因为k8s提供了统一的资源抽象能...

  • k8s容器资源可见性配置-lxcfs

    k8s 容器资源可见性配置-lxcfs 问题 使用k8s容器化后,对内存 CPU 资源限制后,在容器内查看资源,显...

  • k8s 资源清单与pod

    k8s中的资源 k8s中所有的内容都抽象成了资源,资源实例化后,称为对象。所有对象可以通过 get delete ...

  • 19-yaml 编排资源

    任何资源都可以通过 yaml 的方式创建出来 一、查看 k8s 中的资源 二、获取 k8s 中的资源的yaml模板...

  • Kubernetes 学习笔记(三)--- 资源清单定义入门

    目录 一、K8S中常见的资源 Kubernetes中把资源实例化以后称之为对象,这里先介绍K8S中常见的核心资源有...

  • k8s各种资源介绍

    k8s各种资源介绍 k8s最小的资源单位pod 使用私有仓库 为了方便节点下载镜像,搭建私有仓库docker ru...

  • k8s-02-常见资源

    1.创建pod资源 pod是最小资源单位.任何的一个k8s资源都可以由yml清单文件来定义 k8s yaml的主要...

网友评论

      本文标题:k8s deployment+statefulset资源

      本文链接:https://www.haomeiwen.com/subject/ilarsdtx.html