2026/4/18 12:18:11
网站建设
项目流程
网站及其建设的心得体会,网页打不开connection,wordpress多格式视频播放插件,网站建设述职报告一、概述
Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法#xff0c;用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括#xff1a;定义Deployment来创建Pod和ReplicaSet滚动升级和回滚应用扩容和缩容暂停和继续Deployment更新D…一、概述Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括定义Deployment来创建Pod和ReplicaSet滚动升级和回滚应用扩容和缩容暂停和继续Deployment更新Deployment表示用户对K8S集群的一次更新操作。Deployment是一个比RS( Replica Set, RS) 应用模型更广的 API 对象可以是创建一个新的服务更新一个新的服务也可以是滚动升级一个服务。滚动升级一个服务实际是创建一个新的RS然后逐渐将新 RS 中副本数增加到理想状态将旧RS中的副本数减少到0的复合操作。这样一个复合操作用一个RS是不好描述的所以用一个更通用的Deployment来描述。以K8S的发展方向未来对所有长期伺服型的业务的管理都会通过Deployment来管理。apiVersion: apps/v1 #接口版本 kind: Deployment #接口类型 metadata: name: cango-demo #Deployment名称 namespace: cango-prd #命名空间 labels: app: cango-demo #标签 spec: replicas: 3 selector: matchLabels: app: cango-demo #匹配模板中label strategy: rollingUpdate: ##由于replicas为3,则整个升级,pod个数在2-4个之间 maxSurge: 1 #滚动升级时会先启动1个pod maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数 template: metadata: labels: app: cango-demo #模板名称必填 sepc: #定义容器模板该模板可以包含多个容器 containers: - name: cango-demo1 #镜像名称 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.urlhttp://alertmanager:9093/alertmanager - -web.external-url$(EXTERNAL_URL) #如果command和args均没有写那么用Docker默认的配置。 #如果command写了但args没有写那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command不带任何参数的。 #如果command没写但args写了那么Docker默认配置的ENTRYPOINT的命令行会被执行但是调用的参数是.yaml中的args。 #如果如果command和args都写了那么Docker默认的配置被忽略使用.yaml的配置。 imagePullPolicy: IfNotPresent #如果不存在则拉取 livenessProbe: #表示container是否处于live状态。如果LivenessProbe失败LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success如果container没有提供LivenessProbe则也认为是Success 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: ##CPU内存限制 requests: cpu: 2 memory: 2048Mi limits: cpu: 2 memory: 2048Mi env: ##通过环境变量的方式直接传递pod自定义Linux OS环境变量 - name: LOCAL_KEY #本地Key value: value - name: CONFIG_MAP_KEY #局策略可使用configMap的配置Key valueFrom: configMapKeyRef: name: special-config #configmap中找到name为special-config key: special.type #找到name为special-config里data下的key ports: - name: http containerPort: 8080 #对service暴露端口 volumeMounts: #挂载volumes中定义的磁盘 - name: log-cache mountPath: /tmp/log - name: sdb #普通用法该卷跟随容器销毁挂载一个目录 mountPath: /data/media - name: nfs-client-root #直接挂载硬盘方法如挂载下面的nfs目录到/mnt/nfs mountPath: /mnt/nfs - name: example-volume-config #高级用法第1种将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下如果存在同名文件直接覆盖。 mountPath: /etc/config - name: rbd-pvc #高级用法第2中挂载PVC(PresistentVolumeClaim) #使用volume将ConfigMap作为文件或目录直接挂载其中每一个key-value键值对都会生成一个文件key为文件名value为内容 volumes: # 定义磁盘给上面volumeMounts挂载 - name: log-cache emptyDir: {} - name: sdb #挂载宿主机上面的目录 hostPath: path: /any/path/it/will/be/replaced - name: example-volume-config # 供ConfigMap文件内容到指定路径使用 configMap: name: example-volume-config #ConfigMap中名称 items: - key: log-script #ConfigMap中的Key path: path/to/log-script #指定目录下的一个相对路径path/to/log-script - key: backup-script #ConfigMap中的Key path: path/to/backup-script #指定目录下的一个相对路径path/to/backup-script - name: nfs-client-root #供挂载NFS存储类型 nfs: server: 10.42.0.55 #NFS服务器地址 path: /opt/public #showmount -e 看一下路径 - name: rbd-pvc #挂载PVC磁盘 persistentVolumeClaim: claimName: rbd-pvc1 #挂载已经申请的pvc磁盘三、企业应用案例3.1 环境准备创建my-blue.yamlapiVersion: apps/v1 kind: Deployment metadata: name: mydm spec: replicas: 3 selector: matchLabels: app: myapp-blue #匹配模板中label template: metadata: labels: app: myapp-blue spec: containers: - name: myapp-blue image: janakiramm/myapp:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 80创建访问service my-blue-service.yamlapiVersion: v1 kind: Service metadata: name: service-blue spec: selector: app: myapp-blue type: NodePort ports: - port: 80 nodePort: 30030 targetPort: 80提交对应的资源清单[rootk8s-master01 ~]# kubectl apply -f my-blue.yaml [rootk8s-master01 ~]# kubectl apply -f my-blue-service.yaml #查看对应的资源 [rootk8s-master01 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mydm-7755b9f55f-7h2nb 1/1 Running 0 69s mydm-7755b9f55f-bj9gf 1/1 Running 0 69s mydm-7755b9f55f-hjckc 1/1 Running 0 69s mydm-7755b9f55f-lfvrd 1/1 Running 0 69s mydm-7755b9f55f-lxzw4 1/1 Running 0 69s mydm-7755b9f55f-v74w8 1/1 Running 0 69s [rootk8s-master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-blue NodePort 10.10.157.201 none 80:30030/TCP 87s3.2 扩缩容 修改对应的yaml文件中的replicas的数量apiVersion: apps/v1 kind: Deployment metadata: name: mydm spec: replicas: 5 selector: matchLabels: app: myapp-blue #匹配模板中label template: metadata: labels: app: myapp-blue spec: containers: - name: myapp-blue image: janakiramm/myapp:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 803.3 滚动更新 修改对应的yaml文件中的image信息apiVersion: apps/v1 kind: Deployment metadata: name: mydm spec: replicas: 3 selector: matchLabels: app: myapp-blue #匹配模板中label template: metadata: labels: app: myapp-blue spec: containers: - name: myapp-blue image: janakiramm/myapp:v2 imagePullPolicy: IfNotPresent ports: - containerPort: 803.4 回滚 查看历史版本[rootk8s-master01 ~]# kubectl rollout history deployment name 回滚操作[rootk8s-master01 ~]# kubectl rollout undo deployment name --to-revision1四、自定义更新策略4.1类型maxSurge和期望的副本数比超过期望副本数最大比例或最大值这个值调的越大副本更新速度越快。maxUnavailable和期望的副本数比不可用副本数最大比例或最大值这个值越小越能保证服务稳定更新越平滑4.2 设置方式按数量maxUnavailable: [0, 副本数]maxSurge: [0, 副本数]注两者不能同时为0。按比例maxUnavailable: [0%, 100%] 向下取整比如10个副本5%的话0.5个但计算按照0个maxSurge: [0%, 100%] 向上取整比如10个副本5%的话0.5个但计算按照1个两者不能同时为0。4.3 配置案例apiVersion: apps/v1 kind: Deployment metadata: name: myapp-v1 spec: replicas: 3 selector: matchLabels: app: myapp version: v1 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: myapp version: v1 spec: containers: - name: myapp image: janakiramm/myapp:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 80