今日会详细讲解Service和Deployment的功能
在[Day22]有使用port-forward的方式,让local端的机器可以在browser上浏览想要的pod上,但这样只有自己才可以看到,当正式环境要上线时,就需要有一个通道可以access到pod做沟通,所以在[Day24]使用Service这个抽象层,透过EC2的DNS Name访问对应的pod,而node、service和pod的对应关系,请看下面这张图:
从图上很清楚地可以看到元件彼此的关系。此篇的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,让其他服务可以访问
若应用程序是不容许中断服务,那就会需要有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
笔者使用Windows所以执行kubectl edit有些问题,所以这边就使用Lens这套工具
执行还原,恢复原本的Container
此篇就介绍到这边,明天会讲Ingress的部分
>>: 【Day 24】Google Apps Script - API Blueprint 篇 - Google Docs 转换 API Blueprint 格式(2)
重点是要透过第一天的 Nonce 来算出 IV,果然金融机构的 API 就是复杂。要从计算的结果再计...
Authentication 在 web 应用中经常需要验证使用者的权限,例如登入与未登入能看到的页...
止损 止损顾名思义就是停止损失,今天在做企划的同时,世界并不会停下来等你发展,所以如果在做企划的同时...
[Day25] Stripe Follow Along Dropdown 需要用到的技巧与练习目标 ...
好的,你很辛苦的写了很多API function,但是你却不希望闲杂人等没事就call一下你的API...