k8s使用Deployment(基于deployment.yml配置文件)创建Pod实例
Deployment作为Pod的控制器,管理部署Pod实例。早期版本使用RC(Replication Controller)对Pod副本数量进行管理,在新的版本中官方推荐使用Deployment来代替RC,Deployment相对RC有这些好处
- Deployment拥有更加灵活强大的升级、回滚功能,并且支持滚动更新
- 使用Deployment升级Pod只需要定义Pod的最终状态,k8s会为你执行必要的操作(RC要自己定义如何操作)
1、centos-deployment.yml配置文件创建centos系统Pod实例
# 部署类型为 Deployment;
kind: Deployment
apiVersion: apps/v1
metadata:
name: centos-test
# 名称空间;
namespace: default
labels:
k8s-app: centos-test
spec:
# 运行容器数量;
replicas: 1
selector:
matchLabels:
k8s-app: centos-test
template:
metadata:
name: centos-test
labels:
k8s-app: centos-test
spec:
containers:
# 运行容器名称;
- name: centos-test
# 镜像地址,注意必须使用天宫 CCR 镜像仓库地址;
image: 'harbor.dcos.guangz.unic.local/common/centos-7.6:tools'
command: ["/bin/bash", "-ce", "tail -f /dev/null"]
# 镜像拉取策略:Always、IfNotPresent、Never;
imagePullPolicy: Always
resources:
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "200m"
# 容器重启策略:Always、OnFailure、Never
restartPolicy: Always
2、app-deployment.yml配置文件创建app应用的Pod实例
# @description: Deployment配置模板,针对无状态的服务(如Java Web应用,Nginx等),
# 推荐使用Deployment方式部署;
# @author:aa
kind: Deployment
apiVersion: apps/v1
# Deployment元信息
metadata:
name: app-web # 替换为您自己的deployment名称,名称不能使用下划线;
namespace: default
labels:
k8s-app: app-web # deployment标签,k-v格式,可以设置多个;
# Deployment管理的Pod信息
spec:
replicas: 1 # 部署的应用服务数量;
revisionHistoryLimit: 5 # rs历史版本保留数量;
selector:
matchLabels:
k8s-app: app-web # Pod选择器,该Deployment管理哪些Pod;
template:
metadata:
name: app-web # Pod名称,名称不能使用下划线;
labels:
k8s-app: app-web # pod标签,k-v格式,可以设置多个,上层Deployment、StatefulSet根据该值选择相应的Pod;
spec:
containers:
- name: app-web # 容器名称,名称不能使用下划线;
image: 'harbor.dcos.guangz.unic.local/gd-gis/app-web:1.1' # 容器镜像信息;
imagePullPolicy: Always # 镜像拉取策略;
# 容器资源设置;
resources:
# k8s调度Pod时使用requests设置的资源需求计算;
requests:
memory: "64Mi" # 容器可使用的内存资源,单位byte,支持的单位:Ei、Pi、Ti、Gi、Mi、Ki;
cpu: "250m" # 容器使用的CPU资源,单位个,250m代表该容器需要250/1000=0.25个CPU;
# 设置Cgroups时使用limits值计算,推荐requests和limits保持一致;
limits:
memory: "128Mi"
cpu: "500m"
# 容器健康检查(可选配置,借助spring boot actuator实现,P.S.K8S默认健康检查机制为检查容器是否处于running状态,可能不能反应出应用真实的运行状态);
livenessProbe:
httpGet:
path: "/actuator/health"
port: 8080
scheme: HTTP
initialDelaySeconds: 60 # 容器启动120秒之后开始第一次健康检查,配置合理的时间,确保服务成功启动;
periodSeconds: 20 # 每个20秒执行一次健康检查
timeoutSeconds: 3 # 超时时间,3秒
successThreshold: 1 # 成功一次,代表容器健康;
failureThreshold: 5 # 连续失败五次,代表容器运行异常,会导致Pod自动重启;
restartPolicy: Always # Pod重启策略;
3、nginx-deployment.yml配置文件创建nginx的Pod实例
kind: Deployment
apiVersion: apps/v1
# Deployment元信息
metadata:
name: nginx # 替换为您自己的deployment名称,名称不能使用下划线;
namespace: default
labels:
k8s-app: nginx # deployment标签,k-v格式,可以设置多个;
# Deployment管理的Pod信息
spec:
replicas: 1 # 部署的应用服务数量;
revisionHistoryLimit: 5 # rs历史版本保留数量;
selector:
matchLabels:
#app: nginx
k8s-app: nginx # Pod选择器,该Deployment管理哪些Pod;
strategy:
type: RollingUpdate
template:
metadata:
name: nginx # Pod名称,名称不能使用下划线;
labels:
#app: nginx
k8s-app: nginx # pod标签,k-v格式,可以设置多个,上层Deployment、StatefulSet根据该值选择相应的Pod;
spec:
containers:
- image: 'harbor.dcos.guangz.unic.local/gd-gis/nginx:1.18.0' # 容器镜像信息;
imagePullPolicy: Always # 镜像拉取策略;
name: nginx # 容器名称,名称不能使用下划线;
imagePullSecrets:
- name: default-secret
版权声明:本文为davidhhs原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。