# MSAProject.NET6Preview5 **Repository Path**: Run2948/msaproject.-net6-preview5 ## Basic Information - **Project Name**: MSAProject.NET6Preview5 - **Description**: .NET6+微服务落地高并发电商平台 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-07-26 - **Last Updated**: 2022-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 课堂脚本0628 #### 1 docker启动 ```bash docker stop $(docker ps -q) & docker rm $(docker ps -aq) #停用并删除全部容器 docker rmi $(docker images | grep "^" | awk "{print $3}") #删除镜像 #build镜像 docker build -t msaservice.v06282024 -f /elevenopen/0628/project/Zhaoxi.MicroService.ServiceInstance/Dockerfile /elevenopen/0628/project #run实例 docker run -itd -p 5726:80 --name msaservice1 msaservice.v06282024 访问连接: http://192.168.3.230:5726/api/users/all #删除容器 docker rm -f msaservice1 docker pull 192.168.3.254:9999/zhaoxi-ms/zhaoxinet6pre5msa:V202106282107 ***************************************************** docker run -itd -p 5727:80 --name msaservice2 192.168.3.254:9999/zhaoxims/zhaoxinet6pre5msa:V202106282107 V04140923 #资源限制 docker run -itd -p 8083:80 --name docker8083m -m 200m core31v1.814 docker run -itd -p 8084:80 --name docker8084c --cpus 1 core31v1.814 docker exec -it fd2c868cadlc /bin/bash ls----cd----cat--exit #发布+基础镜像 docker run -d -p 5178:80 --name msaservicepublish2 -v /elevenopen/0323/publishproject:/app --workdir /app mcr.microsoft.com/dotnet/core/aspnet:6.0 dotnet /app/Zhaoxi.MSAProject.NET6Preview2.dll # 启动Consul docker pull consul docker run -itd -p 8500:8500 --name consulinstance1 consul http://192.168.3.230:8500 docker rm -f consulinstance1 systemctl status firewalld systemctl stop firewalld systemctl disable firewalld ``` #### 2 环境信息 ```bash Kubernetes Version: V1.19.0 Docker Version: 19.3.12 Dashboard:https://192.168.3.241:30443 Master:192.168.3.241 Worker1: 192.168.3.242 Worker2: 192.168.3.243 ``` #### 3 部署 client.yaml ```yaml apiVersion: v1 kind: Namespace metadata: name: zhaoxinet6pre5msa labels: name: zhaoxinet6pre5msa --- apiVersion: apps/v1 kind: Deployment metadata: namespace: zhaoxinet6pre5msa name: zhaoxinet6pre5msa-client-deployment labels: app: label-zhaoxinet6pre5msa-client-deployment env: testing spec: replicas: 2 selector: matchLabels: app: label-zhaoxinet6pre5msa-client-pod env: testing template: metadata: labels: app: label-zhaoxinet6pre5msa-client-pod env: testing spec: containers: - name: name-zhaoxinet6pre5msa-client-pod image: 192.168.3.254:9999/zhaoxi-ms/zhaoxinet6pre5msa:V202106282107 imagePullPolicy: IfNotPresent ports: - name: http-port containerPort: 80 #resources: # requests: # cpu: 200m # memory: 380Mi # limits: # cpu: 200m # memory: 380Mi --- apiVersion: v1 kind: Service metadata: name: name-zhaoxinet6pre5msa-client-service labels: name: label-zhaoxinet6pre5msa-client-service namespace: zhaoxinet6pre5msa spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 32200 selector: app: label-zhaoxinet6pre5msa-client-pod env: testing ``` #### 4 各种操作 ```bash yml拷贝到241--elevenopen--0628 kubectl apply -f /elevenopen/0628/client.yaml curl: http://192.168.3.241:32200/Api/Test/index http://192.168.3.241:32200/Api/Users/All kubectl scale Deployment zhaoxinet6pre5msa-client-deployment --replicas=5 -n zhaoxinet6pre5msa kubectl set image deploy zhaoxinet6pre5msa-client-deployment namezhaoxinet6pre5msa-client-pod=192.168.3.254:9999/zhaoxims/zhaoxinet6pre3msa:V202106280424 -n zhaoxinet6pre5msa ``` ### 课堂脚本0629 #### 1 基础流程演示 ```bash kubectl apply -f /elevenopen/0415/client.yaml curl http://192.168.3.241:32200/Api/Test/index # 快速伸缩 kubectl scale Deployment zhaoxinet6pre5msa-client-deployment --replicas=5 -n zhaoxinet6pre5msa kubectl scale Deployment zhaoxinet6pre5msa-client-deployment --replicas=2 -n zhaoxinet6pre5msa 失效转移---删除Pod---关闭docker # 回滚&滚动发布 kubectl set image deploy zhaoxinet6pre5msa-client-deployment namezhaoxinet6pre5msa-client-pod=192.168.3.254:9999/zhaoxims/zhaoxinet6pre5msa:V202104151004 -n zhaoxinet6pre5msa ``` #### 2 流量自适应 ```bash # 删除指数收集deployment--命名空间kube-system--名字metrics kubectl delete -n kube-system deployment metrics-server # 创建HPA,安装components.yaml: kubectl apply -f /elevenopen/0415/components.yaml # 给应用设置个资源限制380M内存 cpu限制 resources: requests: cpu: 200m memory: 380Mi limits: cpu: 200m memory: 380Mi # 重新创建: kubectl apply -f /elevenopen/0415/client.yaml kubectl apply -f /elevenopen/0415/client-hpa.yaml # master查看 kubectl get pods -l app=label-zhaoxinet6pre5msa-client-pod -n zhaoxinet6pre5msa -w #增加内存使用 http://192.168.3.241:32200/Api/Test/GC?id=1 ``` #### 3 滚动发布 ```bash 删除指数收集 # 准备新的images---默认滚动发布,重新创建(修改镜像名称): kubectl apply -f /elevenopen/0415/client.yaml http://192.168.3.241:32200/Api/Test/Index kubectl set image deploy zhaoxinet6pre5msa-client-deployment namezhaoxinet6pre5msa-client-pod=192.168.3.254:9999/zhaoxims/zhaoxinet6pre5msa:V202104152038 -n zhaoxinet6pre5msa kubectl set image deploy zhaoxinet6pre5msa-client-deployment namezhaoxinet6pre5msa-client-pod=192.168.3.254:9999/zhaoxims/zhaoxinet6pre5msa:V202104151004 -n zhaoxinet6pre5msa # 新窗口监控pod变化---可以看到滚动效果 kubectl get pods -l app=label-zhaoxinet6msa-client-pod -n zhaoxinet6msa -w ``` #### 4 灰度(金丝雀)发布 ```bash 灰度发布,从V2到V3--动态换镜像--- # 先扩容一下: kubectl scale Deployment zhaoxinet6pre5msa-client-deployment --replicas=5 -n zhaoxinet6pre5msa kubectl set image deploy zhaoxinet6pre5msa-client-deployment namezhaoxinet6pre5msa-client-pod=192.168.3.254:9999/zhaoxims/zhaoxinet6pre5msa:V202104151004 -n zhaoxinet6pre5msa && kubectl rollout pause deploy zhaoxinet6pre5msa-client-deployment -n zhaoxinet6pre5msa # 查看更新情况(新增加一个资源,但是没执行。是因为pause暂停命令,所以发布一个,这样形成了金丝雀发布,这个金丝雀就是让真实用户验证的) kubectl get pods -l app=label-zhaoxinet6pre5msa-client-pod -n zhaoxinet6pre5msa -w # 那个金丝雀没问题,继续发布全部内容 kubectl rollout resume deploy zhaoxinet6pre5msa-client-deployment -n zhaoxinet6pre5msa # 回滚:看历史版本 kubectl rollout history deploy zhaoxinet6pre5msa-client-deployment -n zhaoxinet6pre5msa # 回滚到第0版(默认回滚上一版,可以通过 --to-revision指定版本) kubectl rollout undo deploy zhaoxinet6pre5msa-client-deployment -n zhaoxinet6pre5msa --to-revision=4 ``` #### 5 相关脚本 * `client.yaml` ```yaml apiVersion: v1 kind: Namespace metadata: name: zhaoxinet6pre5-629msa labels: name: zhaoxinet6pre5-629msa --- apiVersion: apps/v1 kind: Deployment metadata: namespace: zhaoxinet6pre5-629msa name: zhaoxinet6pre5-629msa-client-deployment labels: app: label-zhaoxinet6pre5-629msa-client-deployment env: testing spec: replicas: 2 selector: matchLabels: app: label-zhaoxinet6pre5-629msa-client-pod env: testing template: metadata: labels: app: label-zhaoxinet6pre5-629msa-client-pod env: testing spec: containers: - name: name-zhaoxinet6pre5-629msa-client-pod image: 192.168.3.254:9999/zhaoxi-ms/zhaoxinet6pre5msa:V202106292116 imagePullPolicy: IfNotPresent ports: - name: http-port containerPort: 80 resources: requests: cpu: 200m memory: 380Mi limits: cpu: 200m memory: 380Mi --- apiVersion: v1 kind: Service metadata: name: name-zhaoxinet6pre5-629msa-client-service labels: name: label-zhaoxinet6pre5-629msa-client-service namespace: zhaoxinet6pre5-629msa spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 name: http nodePort: 32200 selector: app: label-zhaoxinet6pre5-629msa-client-pod env: testing ``` * `client-hpa.yaml` ```yaml apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: namespace: zhaoxinet6pre5-629msa name: client-hpa-v2 spec: minReplicas: 1 ##至少1个副本 maxReplicas: 5 ##最多5个副本 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: zhaoxinet6pre5-629msa-client-deployment metrics: - type: Resource resource: name: cpu targetAverageUtilization: 30 - type: Resource resource: name: memory targetAverageUtilization: 30 ``` * `components.yaml` ```yaml apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: 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-reader rules: - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: labels: k8s-app: metrics-server name: system:metrics-server rules: - apiGroups: - "" resources: - pods - nodes - nodes/stats - namespaces - configmaps verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: labels: k8s-app: metrics-server name: metrics-server-auth-reader namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: extension-apiserver-authentication-reader subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: k8s-app: metrics-server name: metrics-server:system:auth-delegator roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: k8s-app: metrics-server name: system:metrics-server roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-server subjects: - kind: ServiceAccount name: metrics-server namespace: kube-system --- apiVersion: v1 kind: Service metadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system spec: ports: - name: https port: 443 protocol: TCP targetPort: https selector: k8s-app: metrics-server --- apiVersion: apps/v1 kind: Deployment metadata: labels: k8s-app: metrics-server name: metrics-server namespace: kube-system spec: selector: matchLabels: k8s-app: metrics-server strategy: rollingUpdate: maxUnavailable: 0 template: metadata: labels: k8s-app: metrics-server spec: containers: - args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-use-node-status-port - --v=2 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP image: bitnami/metrics-server 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/v1 kind: APIService metadata: labels: k8s-app: metrics-server name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: metrics-server namespace: kube-system version: v1beta1 versionPriority: 100 ```