目录
一、版本要求
示例文件为1.20的kubernetes版本,如果版本不同,注意修改相应的内容,一般修改“apiVersion”字段即可,具体api版本需求参考: Kubernetes API
二、Deployment.yaml文件
2.1、常用示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: $NAME
namespace: $NAMESPACE
labels:
k8s.eip.work/layer: xxx
k8s.eip.work/name: xxx
spec:
replicas: 1
selector:
matchLabels:
k8s.eip.work/layer: xxx
k8s.eip.work/name: xxx
template:
metadata:
labels:
k8s.eip.work/layer: xxx
k8s.eip.work/name: xxx
annotations:
deployment.kubernetes.io/deploymentMode: aaa
spec:
containers:
- name: $NAME
image: '$IMAGES'
imagePullPolicy: Always
ports:
- name: http-http
protocol: TCP
containerPort: 80
resources:
requests:
cpu: '0.1'
memory: 120Mi
limits:
cpu: '0.5'
memory: 500Mi
livenessProbe:
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
tcpSocket:
port: 80
readinessProbe:
httpGet:
scheme: HTTP
path: /
port: 80
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
startupProbe: #启动探针
httpGet:
scheme: HTTP
path: /
port: 80
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
imagePullSecrets:
- name: $REGISTRY-SECRET-NAME
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
2.2、字段解释
2.2.1、imagePullPolicy
imagePullPolicy:镜像拉取策略,默认值是“IfNotPresent”
- IfNotPresent:
优先使用本地镜像,如果本地存在镜像,则使用本地的镜像 - Always:
总是拉取仓库镜像,如果仓库中的镜像与本地不同,那么仓库中的镜像会被拉取并覆盖本地;如果仓库中的镜像与本地一致,那么不会拉取镜像;如果仓库不可用,那么pod运行失败 - Never:
只使用本地镜像,如果本地不存在,则pod运行失败
2.2.2、resources
resources:配置容器资源配额,配置容器的CPU和内存资源,当命名空间下的容器没有设置resources时,就使用LimitRange设置的值作为容器的默认值(Limits的值不能小于容器的Requests值,否则创建容器时会报错,从而导致创建失败)
resources:
requests: #设置各容器需要的最小资源
cpu: '0.1' #1核=1000m,此处为100m
memory: 120Mi
limits: #限制运行时容器占用的资源
cpu: '0.5'
memory: 500Mi
2.2.3、livenessProbe、readinessProbe、startupProbe
- livenessProbe:
存活探针:检测容器状态是否为running,如果LivenessProbe探针探测失败,则kubelet会杀死容器,并且容器将根据其重启策略进行处理。如果未配置存活探针,则默认状态为Success - readinessProbe:
就绪探针:检测容器内服务是否启动完成,如果就绪态探测失败,端点控制器将从与Pod匹配的所有服务的端点列表中删除该Pod的IP地址。初始延迟之前的就绪态的状态值默认为Failure。如果容器不提供就绪态探针,则默认状态为Success - startupProbe:
启动探针:容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。如果启动探测失败,kubelet将杀死容器,而容器依其重启策略进行重启。如果容器没有提供启动探测,则默认状态为Success
livenessProbe: #存活探针
initialDelaySeconds: 60 #延迟探测时间(秒),在k8s第一次探测前等待秒
timeoutSeconds: 1 #超时时间
periodSeconds: 10 #执行探测频率(秒),每隔秒执行一次
successThreshold: 1 #健康阀值
failureThreshold: 3 #不健康阀值
tcpSocket: #协议
port: 80 #端口
存活、就绪、启动探针配置模板如上代码所示,探测方式有三种:exec、http、tcp(详细配置可参考官方文档:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
- exec
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
- http
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
- tcp
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
2.2.4、imagePullSecrets
imagePullSecrets:配置私有仓库信息,“$REGISTRY-SECRET-NAME”表示配置私有仓库登陆账号信息的Secret的name名称
imagePullSecrets:
- name: $REGISTRY-SECRET-NAME
2.2.5、strategy
strategy:升级策略,指定用于用新Pods替换旧Pods的策略,可以是“Recreate”或“RollingUpdate”,默认值是“RollingUpdate”(https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/#strategy)
- Recreate
在创建新 Pods 之前,所有现有的 Pods 会被杀死 - RollingUpdate
采取滚动更新的方式更新Pods。你可以指定maxUnavailable(最大不可用)和maxSurge(最大峰值)来控制滚动更新过程
1. maxUnavailable:是一个可选字段,用来指定更新过程中不可用的Pod的个数上限。该值可以是绝对数字(例如,5),也可以是所需Pods的百分比(例如,10%)。百分比值会转换成绝对数并去除小数部分。如果maxSurge为0,则此值不能为0。默认值为25%
2. maxSurge:是一个可选字段,用来指定可以创建的超出期望Pod个数的Pod数量。此值可以是绝对数(例如,5)或所需Pods的百分比(例如,10%)。如果MaxUnavailable为0,则此值不能为0。百分比值会通过向上取整转换为绝对数。此字段的默认值为25%
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
三、Service.yaml文件
apiVersion: v1
kind: Service
metadata:
labels:
k8s.eip.work/layer: xxx
k8s.eip.work/name: xxx
name: $NAME
namespace: $NAMESPACE
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
k8s.eip.work/layer: xxx
k8s.eip.work/name: xxx
type: ClusterIP
type:服务类型,有ClusterIP、NodePort、LoadBalancer、ExternalName
-----------日常记录---------------