一、书写资源清单文件
vim deployment_shoudongpha.yaml
apiVersion: apps/v1 #api版本
kind: Deployment #控制器
metadata:
labels:
app: nginx
name: nginx #Pod名称
spec:
replicas: 3 #启动副本数
selector: #设置标签
matchLabels:
app: nginx #必须匹配.spec.template.metadata标签相同,查看标签(kubectl get pods --show-labels)
minReadySeconds: 5 #等待设置的时间后才进行升级,(如果没有设置该值,在某些极端情况下可能会造成服务不正常运行)
revisionHistoryLimit: 3 #要保留以允许回滚的旧复制集数
strategy: #策略
type: RollingUpdate #默认为滚动更新
rollingUpdate: #滚动更新
maxSurge: 1 #滚动升级时会先启动1个pod
maxUnavailable: 1 #升级过程中最多有多少个POD处于无法提供服务的状态(该不为0)
template: #模板(相当于定义好的一个python中的模块)
metadata:
labels:
app: nginx #必须匹配match .spec.selector.matchLabels标签相同。
spec:
terminationGracePeriodSeconds: 60 #k8s将会给应用发送SIGTERM信号,可以用来正确、优雅地关闭应用,默认为30秒
containers: #模板(容器模板)
- image: nginx #镜像名字
name: nginx #node节点启动的容器名字,容器名称(docker ps)查看格式k8s_容器名称_Pod名称
env:
- name: POD_NAME #容器的环境变量名称
valueFrom:
fieldRef:
fieldPath: metadata.name #Pod名称
imagePullPolicy: Always #拉取镜像(总是拉取镜像)
ports:
- name: nginx #SVC_名称,并且在pod中是唯一的(与svc的ports名称必须对应)
containerPort: 80 #容器开放的监听端口
resources: #资源
limits: #限制
memory: 500Mi
cpu: 200m #0.2代表200m
requests: #请求
memory: 250Mi
cpu: 100m #0.1代表100m
restartPolicy: Always #重新启动pod中所有容器的策略
---
apiVersion: v1
kind: Service #控制器
metadata:
labels:
app: nginx #svc的标签名称
name: nginx #svc名称
spec:
ports:
- name: nginx #服务中此端口的名称。这必须是DNS标签全部ServiceSpec中的端口必须具有唯一的名称(与Pod的ports名称必须对应)
# 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
port: 80 #Port 的请求端口
protocol: TCP #TCP协议
targetPort: 80 #请求代理到使用TCP端口80,并且具有标签"app=nginx" 的Pod上,默认情况下,targetPort 将被设置为与 port 字段相同的值。
nodePort: 30080 #宿主机暴露的服务端口,默认情况下随机分配一个端口号(默认:30000-32767)
selector:
app: nginx #具有标签"app=nginx" 的Pod加入到该svc中
type: NodePort #对外集群的外部访问
二、生成资源清单
kubectl apply -f deployment_shoudongpha.yaml
三、手动扩容/缩容
扩容:
kubectl scale deployment --replicas=9 nginx
缩容:
kubectl scale deployment --replicas=3 nginx