写点什么

极客时间运维进阶训练营第十三周作业

作者:9527
  • 2023-02-09
    美国
  • 本文字数:3921 字

    阅读完需:约 13 分钟

本周作业

  1. 在集群上使用资源配置文件编排运行 demoapp,并使用 Service 完成 Pod 发现和服务发布。

  2. 要求以配置文件的方式,在集群上编排运行 nginx、wordpress 和 mysql,并使用 Service 完成 Pod 发现和服务发布。提示:使用 Secret 的方式的为 wordpress 指定要使用 mysql 服务器地址、数据库名称、用户名称和用户密码;nginx Service:定义为 NodePort 类型;nginx 的配置文件:要通过 ConfigMap 提供;wordpress 和 mysql 的数据要保存于 PVC 上。

  3. 扩展作业:pvc 依赖的 pv 要动态置备。

  4. 扩展作业:定义一个 NodePort 类型的 Service,在集群外部手动配置一个 LoadBalancer,为该 Service 接入外部客户端访问该 Service 流量,并转发给各各节点上的该 Service 注册使用的 NodePort。


Assignment-1: Demoapp Service and Pod

  • 请参考本链接,在第十二周作业已经完成: https://xie.infoq.cn/article/ad1e844c51c519d87374795e8


Assignment-2: Nginx + WP + MySQL

  • 请参考本链接,在第十二周作业已经完成: https://xie.infoq.cn/article/ad1e844c51c519d87374795e8

Assignment-3: PV + PVC

Static config

  • pv.yml

apiVersion: v1kind: PersistentVolumemetadata:  name: ebs-pvspec:  capacity:    storage: 5Gi  volumeMode: Filesystem  accessModes:    - ReadWriteOnce  storageClassName: "gp2"  csi:    driver: ebs.csi.aws.com    fsType: xfs    volumeHandle: vol-059fb5c779e79595f  persistentVolumeReclaimPolicy: Retain
复制代码
  • pvc.yml

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: ebs-pvcspec:  storageClassName: "gp2"  volumeName: ebs-pv  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi
复制代码
  • pod.yml

apiVersion: v1kind: Podmetadata:  name: appspec:  containers:  - name: app    image: centos    command: ["/bin/bash"]    args: ["-c", "while true; do echo $(date -u) >> /data.out.txt; sleep 5; done"]    volumeMounts:    - name: persistent-storage      mountPath: /data  volumes:  - name: persistent-storage    persistentVolumeClaim:      claimName: ebs-pvc
复制代码
  • Creation:

$ k get pv$ k get pvc
$ k apply -f pv.ymlpersistentvolume/ebs-pv created$ k get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEebs-pv 5Gi RWO Retain Available gp2 2s
$ k apply -f pvc.ymlpersistentvolumeclaim/ebs-pvc created$ k get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEebs-pvc Bound ebs-pv 5Gi RWO gp2 6s
$ k apply -f pod.ymlpod/app created
$ k exec -it app -- cat /data/out.txtWed Feb 8 18:24:39 UTC 2023Wed Feb 8 18:24:44 UTC 2023Wed Feb 8 18:24:49 UTC 2023Wed Feb 8 18:24:54 UTC 2023Wed Feb 8 18:24:59 UTC 2023Wed Feb 8 18:25:04 UTC 2023Wed Feb 8 18:25:09 UTC 2023Wed Feb 8 18:25:14 UTC 2023
复制代码


Dynamic config

  • Storageclass:

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: gp2provisioner: ebs.csi.aws.comvolumeBindingMode: WaitForFirstConsume
复制代码
  • pvc.yml

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: ebs-pvcspec:  storageClassName: gp2  volumeName: ebs-pv  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi
复制代码
  • pod.yml

apiVersion: v1kind: Podmetadata:  name: appspec:  containers:  - name: app    image: centos    command: ["/bin/bash"]    args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]    volumeMounts:    - name: persistent-storage      mountPath: /data  volumes:  - name: persistent-storage    persistentVolumeClaim:      claimName: ebs-pvc
复制代码


  • Creation

$ k get scNAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGEgp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  64m$ k apply -f pvc.ymlpersistentvolumeclaim/ebs-pvc created$ k get pvcNAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGEebs-pvc   Bound    ebs-pv   5Gi        RWO            gp2            6s
$ k apply -f pod.ymlpod/app created
$ k exec -it app -- cat /data/out.txtWed Feb 8 18:44:39 UTC 2023Wed Feb 8 18:44:44 UTC 2023Wed Feb 8 18:44:49 UTC 2023Wed Feb 8 18:44:54 UTC 2023Wed Feb 8 18:44:59 UTC 2023Wed Feb 8 18:45:04 UTC 2023Wed Feb 8 18:45:09 UTC 2023Wed Feb 8 18:45:14 UTC 2023
复制代码

Assignment-4: NotePort SVC + LB

  • Install AWS ALB to K8s cluster

$ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \>   -n kube-system \>   --set clusterName=dev-cluster2 \>   --set serviceAccount.create=false \>   --set image.repository=602401143452.dkr.ecr.us-east-1.amazonaws.com/amazon/aws-load-balancer-controller \>   --set serviceAccount.name=aws-load-balancer-controller
$ k get po -n kube-systemNAME READY STATUS RESTARTS AGEaws-load-balancer-controller-6ff9f9b857-s68jg 1/1 Running 0 16saws-load-balancer-controller-6ff9f9b857-zqp8l 1/1 Running 0 16s
复制代码
  • Deploy a demo app

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/examples/2048/2048_full.yaml
复制代码
  • Raw app YAML:

---apiVersion: v1kind: Namespacemetadata:  name: game-2048---apiVersion: apps/v1kind: Deploymentmetadata:  namespace: game-2048  name: deployment-2048spec:  selector:    matchLabels:      app.kubernetes.io/name: app-2048  replicas: 5  template:    metadata:      labels:        app.kubernetes.io/name: app-2048    spec:      containers:      - image: public.ecr.aws/l6m2t8p7/docker-2048:latest        imagePullPolicy: Always        name: app-2048        ports:        - containerPort: 80---apiVersion: v1kind: Servicemetadata:  namespace: game-2048  name: service-2048spec:  ports:    - port: 80      targetPort: 80      protocol: TCP  type: NodePort  selector:    app.kubernetes.io/name: app-2048---apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  namespace: game-2048  name: ingress-2048  annotations:    alb.ingress.kubernetes.io/scheme: internet-facing    alb.ingress.kubernetes.io/target-type: ipspec:  ingressClassName: alb  rules:    - http:        paths:        - path: /          pathType: Prefix          backend:            service:              name: service-2048              port:                number: 80
复制代码
  • Check application has a load balancer now:

$ k get ingress/ingress-2048 -n game-2048NAME           CLASS   HOSTS   ADDRESS                                                                  PORTS   AGEingress-2048   alb     *       k8s-game2048-ingress2-522da826ff-882627404.us-east-1.elb.amazonaws.com   80      2m3s
复制代码
  • Backend running pods:

  • Application:


Class Notes


  • 存储卷的具体的管理操作由相关的控制器向卷插件发起调用请求来完成

  • AD 控制器:负责存储设备的 Attach/Detach 操作

  • Attach:将设备附加到目标节点

  • Detach:将设备从目标节点上拆除

  • 存储卷管理器:负责完成卷的 Mount/Umount 操作,以及设备的格式化操作等

  • PV 控制器:负责 PV/PVC 的绑定、生命周期管理,以及存储卷的 Provision/Delete 操作

  • Scheduler:特定调度插件的调度决策会受到目标节点上的存储卷的影响

PV

  • PV 是标准的资源类型,除了负责关联至后端存储系统外,它通常还需要定义支持的存储特性

  • Volume Mode:当前 PV 卷提供的存储空间模型,分为块设备和文件系统两种

    StorageClassName:当前 PV 隶属的存储类;

  • AccessMode:支持的访问模型,分为单路读写、多路读写和多路只读三种

  • Size:当前 PV 允许使用的空间上限

PVC

  • PVC 也是标准的资源类型,它允许用户按需指定期望的存储特性,并以之为条件,按特定的条件顺序进行 PV 筛选

  • VolumeMode→LabelSelector→StorageClassName→AccessMode→Size

  • 支持动态预配的存储类,还可以根据 PVC 的条件按需完成 PV 创建

PV and PVC config

  • 使用静态 PV 和 PVC 的配置卷的步骤


  • 有些存储类型默认并不支持动态 PV 机制

  • 多数 CSI 存储都支持动态 PV,且支持卷扩展和卷快照等功能

StorageClass

  • StorageClass 资源

  • Kubernetes 支持的标准资源类型之一

  • 为管理 PV 资源之便而按需创建的存储资源类别(逻辑组)

  • 是 PVC 筛选 PV 时的过滤条件之一

  • 为动态创建 PV 提供“模板”

  • 需要存储服务提供管理 API

  • StorageClass 资源上配置接入 API 的各种参数

  • 定义在 parameters 字段中

  • 还需要使用 provisioner 字段指明存储服务类型

  •   一般由集群管理员定义,隶属集群级别

发布于: 刚刚阅读数: 3
用户头像

9527

关注

还未添加个人签名 2020-04-22 加入

还未添加个人简介

评论

发布
暂无评论
极客时间运维进阶训练营第十三周作业_9527_InfoQ写作社区