本文共 4505 字,大约阅读时间需要 15 分钟。
Deployment文件是Kubernetes中定义应用部署的核心文件,其主要作用是声明应用的运行环境和配置。以下是标准的Deployment文件结构:
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: cango-demo # Deployment名称 namespace: cango-prd # 命名空间 labels: app: cango-demo # 标签spec: replicas: 3 # 剖分的副本数量 strategy: rollingUpdate: maxSurge: 1 # 滚动升级时允许的最大Pod数量 maxUnavailable: 1 # 滚动升级时允许的最大不可用Pod数量 template: metadata: labels: app: cango-demo # 模板标签 spec: containers: - name: cango-demo image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT # 镜像地址 command: ["/bin/sh", "-c", "cat /etc/config/path/to/special-key"] # 启动命令 args: # 启动参数 - '-storage.local.retention=$(STORAGE_RETENTION)' - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)' - '-config.file=/etc/prometheus/prometheus.yml' - '-alertmanager.url=http://alertmanager:9093/alertmanager' - '-web.external-url=$(EXTERNAL_URL)' imagePullPolicy: IfNotPresent # 镜像拉取策略 livenessProbe: # 存活探测 httpGet: path: /health # 健康检查路径 port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: /health port: 8080 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 resources: requests: cpu: 2 memory: 2048Mi limits: cpu: 2 memory: 2048Mi env: - name: LOCAL_KEY value: value - name: CONFIG_MAP_KEY valueFrom: configMapKeyRef: name: special-config key: special.type ports: - name: http containerPort: 8080 volumeMounts: - name: log-cache mount: /tmp/log - name: sdb mountPath: /data/media - name: nfs-client-root mountPath: /mnt/nfs - name: example-volume-config mountPath: /etc/config configMap: name: example-volume-config items: - key: log-script path: path/to/log-script - key: backup-script path: path/to/backup-script - name: rbd-pvc persistentVolumeClaim: claimName: rbd-pvc1
以下是一个简单的Nginx Deployment文件示例:
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
使用以下命令创建Nginx Deployment:
kubectl create -f nginx-deployment.yaml --record
创建完成后,你可以通过以下命令查看Deployment状态:
kubectl get deployments
要更新Deployment中的镜像版本,可以使用以下命令:
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
或者使用编辑命令:
kubectl edit deployment/nginx-deployment
如果需要回滚到之前的版本,可以使用rollback命令:
kubectl rollout undo deployment/nginx-deployment
你也可以指定回滚到特定的历史版本:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
在滚动更新过程中,Deployment会创建一个新的ReplicaSet,并逐步扩展新版本的Pod,同时缩减旧版本的Pod数量。滚动更新默认使用RollingUpdate策略,最大可扩展和不可用的Pod数量可以在.spec.strategy.rollingUpdate中配置。
通过合理配置滚动更新的maxSurge和maxUnavailable,可以确保更新过程中始终有一些Pod处于可用状态,避免服务中断。
Deployment支持通过环境变量和配置Map来管理应用配置。例如:
spec: env: - name: CONFIG_ENV value: development envFrom: - name: CONFIG_MAP key: special.key
Deployment支持挂载各种类型的存储卷,例如本地目录、NFS、PersistentVolumeClaim等。例如:
volumeMounts: - name: nfs-client-root mountPath: /mnt/nfs - name: rbd-pvc persistentVolumeClaim: claimName: rbd-pvc1
kubectl create -f deployment.yaml
kubectl set image deployment/my-deployment my-app=app-version
kubectl rollout undo deployment/my-deployment
kubectl rollout pause deployment/my-deploymentkubectl rollout resume deployment/my-deployment
kubectl get deploymentskubectl get rskubectl get pods
通过合理使用Deployment对象,可以有效管理Kubernetes集群中的应用部署,实现高效的滚动更新和版本回滚。
转载地址:http://oohfk.baihongyu.com/