编写一个 Deployment 的 yaml
赋予 Pod 自愈和故障转移能力
一个 Deploy 产生三个
Deployment 资源
replicaset 资源
Pod 资源
Deployment 控制 RS,RS 控制 Pod 的副本数
ReplicaSet: 只提供了副本数量的控制功能
Deployment: 每部署一个新版本就会创建一个新的副本集,利用他记录状态,回滚也是直接让指定的 rs 生效
################更新##################################kubectl set image deployment资源名 容器名=镜像名kubectl set image deployment.apps/nginx-deployment php-redis=tomcat:8 --record## yaml提取可更新的关键所有字段计算的hash。web---- /hellopostman aservice- /hello#或者直接修改定义也行kubectl edit deployment.v1.apps/nginx-deployment#查看状态kubectl rollout status deployment.v1.apps/nginx-deployment################查看历史并回滚#####################################查看更新历史-看看我们设置的历史总记录数是否生效了kubectl rollout history deployment.v1.apps/nginx-deployment#回滚kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2###############累计更新###############暂停记录版本kubectl rollout pause deployment.v1.apps/nginx-deployment#多次更新操作。##比如更新了资源限制kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi##比如更新了镜像版本kubectl set image deployment.apps/nginx-deployment php-redis=tomcat:8##在继续操作多次##看看历史版本有没有记录变化kubectl rollout history deployment.v1.apps/nginx-deployment#让多次累计生效kubectl rollout resume deployment.v1.apps/nginx-deployment
复制代码
maxSurge(最大增量):除当前数量外还要添加多少个实例。
maxUnavailable(最大不可用量):滚动更新过程中的不可用实例数。
概念:Pod 水平自动扩缩 | Kubernetes
实战:HorizontalPodAutoscaler 演练 | Kubernetes
2.1、需要先安装 metrics-server
GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
2.2、安装步骤
apiVersion: v1kind: ServiceAccountmetadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: labels: k8s-app: metrics-server rbac.authorization.k8s.io/aggregate-to-admin: "true" rbac.authorization.k8s.io/aggregate-to-edit: "true" rbac.authorization.k8s.io/aggregate-to-view: "true" name: system:aggregated-metrics-readerrules:- apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: labels: k8s-app: metrics-server name: system:metrics-serverrules:- apiGroups: - "" resources: - pods - nodes - nodes/stats - namespaces - configmaps verbs: - get - list - watch---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata: labels: k8s-app: metrics-server name: metrics-server-auth-reader namespace: kube-systemroleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-readersubjects:- kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: labels: k8s-app: metrics-server name: metrics-server:system:auth-delegatorroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegatorsubjects:- kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: labels: k8s-app: metrics-server name: system:metrics-serverroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-serversubjects:- kind: ServiceAccount name: metrics-server namespace: kube-system---apiVersion: v1kind: Servicemetadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-systemspec: ports: - name: https port: 443 protocol: TCP targetPort: https selector: k8s-app: metrics-server---apiVersion: apps/v1kind: Deploymentmetadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-systemspec: selector: matchLabels: k8s-app: metrics-server strategy: rollingUpdate: maxUnavailable: 0 template: metadata: labels: k8s-app: metrics-server spec: containers: - args: - --cert-dir=/tmp - --kubelet-insecure-tls - --secure-port=4443 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --kubelet-use-node-status-port image: registry.cn-hangzhou.aliyuncs.com/lanson_k8s_images/metrics-server:v0.4.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 3 httpGet: path: /livez port: https scheme: HTTPS periodSeconds: 10 name: metrics-server ports: - containerPort: 4443 name: https protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /readyz port: https scheme: HTTPS periodSeconds: 10 securityContext: readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1000 volumeMounts: - mountPath: /tmp name: tmp-dir nodeSelector: kubernetes.io/os: linux priorityClassName: system-cluster-critical serviceAccountName: metrics-server volumes: - emptyDir: {} name: tmp-dir---apiVersion: apiregistration.k8s.io/v1kind: APIServicemetadata: labels: k8s-app: metrics-server name: v1beta1.metrics.k8s.iospec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: metrics-server namespace: kube-system version: v1beta1 versionPriority: 100
复制代码
2.3、配置 hpa 测试
### 测试镜像 registry.cn-hangzhou.aliyuncs.com/lanson_k8s_images/php-hpa:latest##应用的yaml已经做好apiVersion: v1kind: Servicemetadata: name: php-apachespec: ports: - port: 80 protocol: TCP targetPort: 80 selector: run: php-apache---apiVersion: apps/v1kind: Deploymentmetadata: labels: run: php-apache name: php-apachespec: replicas: 1 selector: matchLabels: run: php-apache template: metadata: creationTimestamp: null labels: run: php-apache spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/lanson_k8s_images/php-hpa:latest name: php-apache ports: - containerPort: 80 resources: requests: cpu: 200m##hpa配置 hpa.yamlapiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata: name: php-apachespec: maxReplicas: 10 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache targetCPUUtilizationPercentage: 50 #3、进行压力测试kubectl run -i --tty load-generator --image=busybox /bin/sh#回车然后敲下面的命令 kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
复制代码
3.1、蓝绿部署 VS 金丝雀部署
蓝绿部署
金丝雀部署
3.2、金丝雀的简单测试
使用这个镜像测试 registry.cn-hangzhou.aliyuncs.com/lanson_k8s_images/nginx-test 这个镜像 docker run 的时候 -e msg=aaaa,访问这个 nginx 页面就是看到 aaaa
步骤原理
Deployments | Kubernetes
留言与评论(共有 0 条评论) “” |