应用程序快速更新还原,让服务持续运作不中断,公司财源滚滚,老板开心,大家开心

财源滚滚

今日会详细讲解Service和Deployment的功能

Service

在[Day22]有使用port-forward的方式,让local端的机器可以在browser上浏览想要的pod上,但这样只有自己才可以看到,当正式环境要上线时,就需要有一个通道可以access到pod做沟通,所以在[Day24]使用Service这个抽象层,透过EC2的DNS Name访问对应的pod,而node、service和pod的对应关系,请看下面这张图:
https://ithelp.ithome.com.tw/upload/images/20211009/20140172wUsvfXFQw3.png
从图上很清楚地可以看到元件彼此的关系。此篇的Service Type,以NodePort为主,接下来说明YAML

apiVersion: v1
kind: Service

metadata:
  name: web-service
  labels:
    app: web-demo

spec:
  selector:
    name: web-demo
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80
      nodePort: 30001

selector: 会去寻找Pod的label为web-demo去做连结,产生一个Endpoint才可以去access
nodePort: 在Node(EC2)上开启一个Port,让Internet的User可以透过这个Port access到後面的应用程序
Port: 将nodePort和targetPort做mapping,进行串流
targetPort: 开启Pod上的Port,让其他服务可以访问

Deployment

若应用程序是不容许中断服务,那就会需要有HA的方式去维护。在Kubernetes有Controller Object这个概念,而Deployment就是其中一种,透过Deployment去控制多个Pod,甚至是当Pod坏掉,会自动新增Pod来满足YAML里replicas数量。
当Container或应用程序要做更新时,不需要把现有的Pod砍掉,在Deployment会先启动新的Pod才把旧Pod砍掉,执行RollingUpdate/RollingBack
在Deployment底下的Pod也可以做横向扩展,产生更多的Pod去运作应用程序

Deployment YAML描述

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      name: itdemo
  template:
    metadata:
      labels:
        name: itdemo
    spec:
      containers:
      - name: itdemo
        image: johnson860312/awswebdb
        resources:
          limits:
            memory: "256Mi"
            cpu: "128m"
        ports:
          - containerPort: 80

replicas: 决定Pod的数量。若有Pod挂掉,也会启动新的Pod等於设定的数量
template: 创建的Pod都会依照模板去设定
matchLabels: 符合{“key”:”value”}这个组合去建立Pod

删除Pod,然後EKS会自动启动新的Pod
https://ithelp.ithome.com.tw/upload/images/20211009/20140172f2l6NnJet4.png
https://ithelp.ithome.com.tw/upload/images/20211009/20140172SrQEaAM9KD.png

更换Container

笔者使用Windows所以执行kubectl edit有些问题,所以这边就使用Lens这套工具
https://ithelp.ithome.com.tw/upload/images/20211009/20140172r6hRCj12yg.png
https://ithelp.ithome.com.tw/upload/images/20211009/20140172ZcCb4YoV0B.png
https://ithelp.ithome.com.tw/upload/images/20211009/20140172Tzvw8Ldh23.png

执行还原,恢复原本的Container
https://ithelp.ithome.com.tw/upload/images/20211009/20140172nRcDnzGlYq.png
https://ithelp.ithome.com.tw/upload/images/20211009/20140172pwiYnrOfMH.png

此篇就介绍到这边,明天会讲Ingress的部分


<<:  Day 25 PTT八卦版爬取

>>:  【Day 24】Google Apps Script - API Blueprint 篇 - Google Docs 转换 API Blueprint 格式(2)

计算API所需要的参数: IV

重点是要透过第一天的 Nonce 来算出 IV,果然金融机构的 API 就是复杂。要从计算的结果再计...

Day14 - 在 Next.js 如何做 authentication

Authentication 在 web 应用中经常需要验证使用者的权限,例如登入与未登入能看到的页...

企划实现(30)

止损 止损顾名思义就是停止损失,今天在做企划的同时,世界并不会停下来等你发展,所以如果在做企划的同时...

## [Day25] Stripe Follow Along Dropdown

[Day25] Stripe Follow Along Dropdown 需要用到的技巧与练习目标 ...

伸缩自如的Flask [day4] JWT

好的,你很辛苦的写了很多API function,但是你却不希望闲杂人等没事就call一下你的API...