• 云原生Kubernetes之浅认知


    目录

    一、服务的生命周期

    二、service的类型及之间的区别

    1、ClusterIP

    2、NodePort

    3、 LoadBalancer

             4、 externalName

    三、发布方式

    1、蓝绿发布

    ①、蓝绿部署概念

    ②、蓝绿发布步骤

    ④、蓝绿发布优缺点

    2、滚动发布(Rolling Update)

    ①、滚动发布概念

    ②、步骤

    ③、升级数量

    3、金丝雀发布

    4、实际生产中发布模式

    四、Yaml文件详解

    1、yaml文件的语法格式要求

    2、查看api的资源版本标签

    3、手动编写副本控制器nginx-deployment的yaml的文件

    4、 创建资源对象

     5、创建service服务对外提供访问并测试

    五、利用--dry-run=client导出资源配置模板,免除手写

    六、K8S中的port

    1、port

    2、nodePort

    3、targetPort

    4、containerPort


    一、服务的生命周期

    1、详细版:服务生命周期分为:创建、发布、升级、回滚、删除

          简单版:服务从创建到删除过程中,所包含的、经历过的状态

    例如:

    创建:[root@master ~]# kubectl create deployment nginx --image=nginx:1.15 --port=80 --replicas=3

    deployment.apps/nginx created

    发布:[root@master ~]# kubectl expose deploy/nginx --port=80 --target-port=80 --name=nginx-servicec --type=NodePor

    service/nginx-servicec exposed

    升级/更新:[root@master ~]# kubectl set image deploy/nginx nginx=nginx:latest

                                                                      ## 把nginx版本更新到最新版本

    回滚:当新版本出现bug时,需要进行回滚,回到之前比较稳定的版本。

    回滚的几种执行方式:

    ### 查看历史版本

    [root@master ~]# kubectl rollout history deployment nginx 

    deployment.apps/nginx 
    REVISION  CHANGE-CAUSE
    1                                          ## 显示的是三个版本
    2        
    3        
    ######################查看当前版本###############

    [root@master ~]# curl -I 192.168.159.12:32086
    HTTP/1.1 200 OK
    Server: nginx/1.23.2                                       ### 版本为1.23.2
    Date: Mon, 07 Nov 2022 08:45:49 GMT
    Content-Type: text/html
    Content-Length: 615
    Last-Modified: Wed, 19 Oct 2022 07:56:21 GMT
    Connection: keep-alive
    ETag: "634fada5-267"
    Accept-Ranges: bytes
     

    ############################# 执行回滚到上一个版本

    [root@master ~]# kubectl rollout undo deployment nginx 
    deployment.apps/nginx rolled back
    [root@master ~]# curl -I 192.168.159.12:32086
    HTTP/1.1 200 OK
    Server: nginx/1.15.12                                          #### 版本号:1.15.12          
    Date: Mon, 07 Nov 2022 08:47:29 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 16 Apr 2019 13:08:19 GMT
    Connection: keep-alive
    ETag: "5cb5d3c3-264"
    Accept-Ranges: bytes

    ### 执行回滚到指定版本

    kubectl rollout undo deployment/nginx --to-revision=1

    [root@master ~]# kubectl rollout history deployment nginx    ### 查看当前的版本历史
    deployment.apps/nginx 
    REVISION  CHANGE-CAUSE
    1        
    4        
    5        

    [root@master ~]# curl -I 192.168.159.12:32086             ## 查看当前版本号
    HTTP/1.1 200 OK
    Server: nginx/1.23.2
    Date: Mon, 07 Nov 2022 08:55:43 GMT
    Content-Type: text/html
    Content-Length: 615
    Last-Modified: Wed, 19 Oct 2022 07:56:21 GMT
    Connection: keep-alive
    ETag: "634fada5-267"
    Accept-Ranges: bytes

    [root@master ~]# kubectl rollout undo deployment nginx --to-revision=1更新到指定版本
    deployment.apps/nginx rolled back  
    [root@master ~]# curl -I 192.168.159.12:32086        ### 查看版本号
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Mon, 07 Nov 2022 08:56:04 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
    Connection: keep-alive
    ETag: "5c0692e1-264"
    Accept-Ranges: bytes
     

    ### 检查回滚状态

    kubectl rollout status deployment/nginx

    [root@master ~]# kubectl rollout status deployment nginx 
    deployment "nginx" successfully rolled out                   ## 显示回滚成功
     

    删除:kubectl delete

    ### 删除副本控制器                          

    kubectl delete deployment/nginx

    ### 删除service

    kubectl delete svc nginx-service

    #######################删除副本控制器及service#################

    [root@master ~]# kubectl get svc,pods                  ### 查询副本集控制器和pods
    NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    service/kubernetes      ClusterIP   10.125.0.1              443/TCP        2d7h
    service/nginx-service   NodePort    10.125.171.99          80:32086/TCP   18m

    NAME                        READY   STATUS    RESTARTS   AGE
    pod/nginx-d9d8cf5c7-8p66v   1/1     Running   0          5m42s
    pod/nginx-d9d8cf5c7-vlq5x   1/1     Running   0          5m40s
    pod/nginx-d9d8cf5c7-wr8fj   1/1     Running   0          5m41s
    [root@master ~]# kubectl delete deployment nginx           ### 删除副本集控制器
    deployment.apps "nginx" deleted
    [root@master ~]# kubectl delete svc nginx-service            ### 删除service
    service "nginx-service" deleted
    [root@master ~]# kubectl get svc,pods                                ## 查询显示已经删除
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.125.0.1          443/TCP   2d7h

    二、service的类型及之间的区别

    1、ClusterIP

    提供一个集群内部的虚拟IP以供Pod访问(service默认类型)

    类似于VIP,通过负载均衡,把请求发送到后端不一样的pod上。

    2、NodePort

    在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
    每个端口只能是一种服务,端口范围只能是 30000-32767。

    3、 LoadBalancer

    通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。接收请求后会自己创建一个LB。为后台pod进行业务分法。

    这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
    在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

    4、externalName

    将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。

    三、发布方式

    1、蓝绿发布

    ①、蓝绿部署概念

    蓝绿部署中,一共有两套系统:一套是正在提供服务系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。且两套系统都是功能完善的、正在运行的系统,只是系统版本和对外服务情况不同。

    ②、蓝绿发布步骤

    1、首先对蓝组进行新版本的部署。绿组仍然继续提供服务;

    2、蓝组上线试运行,完成试运行后,蓝组替换绿组变成绿组,此间二者同存,防止新版本有问题,能够及时回滚,在成熟以后会删除。

    ④、蓝绿发布优缺点

    优点:更新过程无需停机,用户无感知,平滑过渡

               回滚方便速度快

               发布策略简单

               通过LB来实现流量控制,比如Nginx

    缺点:成本较高,需要部署两套环境

               需要部署两套机器,费用开销大           

    2、滚动发布(Rolling Update)

    ①、滚动发布概念

    先启动一台新服务器运行新版本,加入生产环境。

    然后停止一台老版本服务器,将其更新为新版本,然后加入生产环境。

    依此类推,直到集群中全部服务器升级为新版本。

    ②、步骤

    1. 先升级1个副本,主要做部署验证;

    2. 每次升级副本,自动从LB上摘掉,升级成功后自动加入集群;

    3. 事先需要有自动更新策略,分为若干次,每次数量/百分比可配置;

    4. 回滚是发布的逆过程,先从LB摘掉新版本,再升级老版本,这个过程一般时间比较长;

    5. 自动化要求高。

    ③、升级数量

    每次可升级一台,或重新顶一个步长,每次不超过25%

    3、金丝雀发布

    在生产环境上引一部分实际流量对一个新版本进行测试,测试新版本的性能和表现,在保证系统整体稳定运行的前提下,尽早发现新版本在实际环境上的问题。

    4、实际生产中发布模式

    如果新旧版本没有兼容性问题的话,一版会选择滚动发布

    新旧版本兼容性有问题的话,一般选择蓝绿发布,配合金丝雀,提高安全性

    四、Yaml文件详解

    1、yaml文件的语法格式要求

    ①、大小写敏感

    ②、使用缩进表示层级关系

    ③、不支持Tab键制表符缩进,只使用空格缩进

    ④、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

    ⑤、符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等

    ⑥、“---”表示YAML格式,一个文件的开始,用于分隔文件间

    ⑦、“#”表示注释

    2、查看api的资源版本标签

    [root@master ~]# kubectl api-versions

    1. admissionregistration.k8s.io/v1
    2. admissionregistration.k8s.io/v1beta1
    3. apiextensions.k8s.io/v1
    4. apiextensions.k8s.io/v1beta1
    5. apiregistration.k8s.io/v1
    6. apiregistration.k8s.io/v1beta1
    7. apps/v1
    8. authentication.k8s.io/v1
    9. authentication.k8s.io/v1beta1
    10. authorization.k8s.io/v1
    11. authorization.k8s.io/v1beta1
    12. autoscaling/v1
    13. autoscaling/v2beta1
    14. autoscaling/v2beta2
    15. batch/v1
    16. batch/v1beta1
    17. certificates.k8s.io/v1
    18. certificates.k8s.io/v1beta1
    19. coordination.k8s.io/v1
    20. coordination.k8s.io/v1beta1
    21. discovery.k8s.io/v1
    22. discovery.k8s.io/v1beta1
    23. events.k8s.io/v1
    24. events.k8s.io/v1beta1
    25. extensions/v1beta1
    26. flowcontrol.apiserver.k8s.io/v1beta1
    27. networking.k8s.io/v1
    28. networking.k8s.io/v1beta1
    29. node.k8s.io/v1
    30. node.k8s.io/v1beta1
    31. policy/v1
    32. policy/v1beta1
    33. rbac.authorization.k8s.io/v1
    34. rbac.authorization.k8s.io/v1beta1
    35. scheduling.k8s.io/v1
    36. scheduling.k8s.io/v1beta1
    37. storage.k8s.io/v1
    38. storage.k8s.io/v1beta1
    39. v1

    3、手动编写副本控制器nginx-deployment的yaml的文件

    [root@master opt]# vim nginx-deployment.yaml

    1. [root@master opt]# cat nginx-deployment.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: nginx-deployment
    6. labels:
    7. app: nginx
    8. spec:
    9. replicas: 3
    10. selector:
    11. matchLabels:
    12. app: nginx
    13. template:
    14. metadata:
    15. labels:
    16. app: nginx
    17. spec:
    18. containers:
    19. - name: nginx
    20. image: nginx:1.15.4
    21. ports:
    22. - containerPort: 80

    解析:

    4、 创建资源对象

    [root@master opt]# kubectl apply -f nginx-deployment.yaml

     5、创建service服务对外提供访问并测试

     [root@master opt]# vim nginx-service.yaml

    [root@master opt]# kubectl apply -f nginx-service.yaml   ###  创建资源对象

    1. [root@master opt]# kubectl apply -f nginx-service.yaml
    2. service/nginx-service created

    验证:  查看svc及pods

    [root@master opt]# kubectl get svc,pods -o wide

    UI访问

    五、利用--dry-run=client导出资源配置模板,免除手写

     ps:还可以转译成json格式

    六、K8S中的port

    1、port

    port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

    2、nodePort

    nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service

    3、targetPort

    targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器

    4、containerPort

    containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort

  • 相关阅读:
    Linux系统漏洞本地提权
    STM32中断看这一篇就够了
    [ECCV‘22] Poseur: Direct Human Pose Regression with Transformers
    提升提测质量之研测共建 | 京东云技术团队
    机器人抓取系列——手眼标定
    子矩形计数(冬季每日一题 17)
    vue中调用高德地图
    【项目】在线oj
    【因果推断python】49_去偏/正交机器学习1
    基于Kubernetes/K8S构建Jenkins持续集成平台(下)
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/127710718