k8s资源管理操作——陈述式管理方式

目录

陈述式资源管理方式

1、常用的kubernetes管理命令

1)查看版本信息

2)查看资源对象简写

3)查看集群信息

4)配置kubectl自动补全

5)node节点查看日志

2、资源管理命令

1)创建资源

2)查看资源

3)删除资源

4)进入Pod中的容器

5)查看Pod容器的日志

6)扩容或缩容

7)将资源暴露为新的Service,向外提供服务

8)更新资源

9)回滚资源

3、service 的 type 类型

4、Service与Pod如何关联的?

5、service的端点

6、集群内Pod资源滚动更新的方式

        1)蓝绿发布

        2)红黑发布

        3)灰度发布(金丝雀发布)

        4)滚动发布


陈述式资源管理方式

1、常用的kubernetes管理命令

1)查看版本信息

kubectl version

k8s资源管理操作——陈述式管理方式_第1张图片

2)查看资源对象简写

kubectl api-resources

k8s资源管理操作——陈述式管理方式_第2张图片

3)查看集群信息

kubectl cluster-info

k8s资源管理操作——陈述式管理方式_第3张图片

4)配置kubectl自动补全

source <(kubectl completion bash)

k8s资源管理操作——陈述式管理方式_第4张图片

5)node节点查看日志

journalctl -u kubelet -f

k8s资源管理操作——陈述式管理方式_第5张图片

2、资源管理命令

1)创建资源

格式:
    kubectl create [-n <命名空间>] <资源类型> <资源名称> [选项]
    或
    kubectl run <资源名称> --image=镜像 --replicas=副本数 --port=容器端口

选项:    
    --image=镜像 
    --replicas=副本数 
    --port=容器端口
例子:
//创建一个命名空间
    kubectl create ns heitui     #ns是资源类型名、heitui是资源名称,自定义
//在heitui命名空间创建一个Pod资源
    kubectl create -n heitui deployment nginx-ht --image=nginx
#deployment是Pod的资源控制器名称,nginx-ht是自定义创建的Pod名称,--image=nginx指定使用的镜像

2)查看资源

格式:
    kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]

//查看 master 节点状态
kubectl get componentstatuses
kubectl get cs

//查看命名空间
kubectl get namespace
kubectl get ns
//命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

//查看default命名空间的所有资源
kubectl get all [-n default]

k8s资源管理操作——陈述式管理方式_第6张图片

格式:
    kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]

//查看命名空间kube-public 中的pod 信息
kubectl get pods -n heitui

//查看某个资源的详细信息
kubectl describe deployment nginx-ht -n heitui
或
kubectl describe pod nginx-ht-74cbf7dd5c -n heitui

k8s资源管理操作——陈述式管理方式_第7张图片

3)删除资源

格式:
    kubectl delete [-n <命名空间>] <资源类型> <资源名称>|--all [--force --grace-period=0]
    
    --force --grace-period=0      立即终止Pod运行并强制删除资源

//删除heitui命名空间的Pod资源
    kubectl delete -n heitui deployment nginx-ht
    kubectl -n heitui pods    #查看heitui命名空间的pod
//删除heitui命名空间
    kubectl delete ns heitui
    kubectl get ns    #查看所有命名空间

k8s资源管理操作——陈述式管理方式_第8张图片

4)进入Pod中的容器

格式:
    kubectl exec -it [-n <命名空间>]  [-c 容器名称] sh|bash

//进入到Pod容器中
    kubectl exec -it -n heitui nginx-ht-5dcc469667-dkxh8 bash

5)查看Pod容器的日志

格式:
    kubectl logs [-n <命名空间>]  [-c 容器名称] [-f] [-p]
    -f:实时查看日志
    -p:查看Pod容器重启前的日志
//查看Pod容器的日志
    kubectl logs -n heitui nginx-ht-5dcc469667-dkxh8

6)扩容或缩容

格式:
    kubectl scale [-n <命名空间>]  <资源名称> --replicas=副本数

//扩容
    kubectl scale -n heitui deployment nginx-ht --replicas=3
//缩容
    kubectl scale -n heitui deployment nginx-ht --replicas=1

k8s资源管理操作——陈述式管理方式_第9张图片k8s资源管理操作——陈述式管理方式_第10张图片k8s资源管理操作——陈述式管理方式_第11张图片

7)将资源暴露为新的Service,向外提供服务

格式:
    kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type  --port  --targetPort <容器的端口>


svc资源类型有 ClusterIP|NodePort|LoadBalancer|ExternalName

例子:
    kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

k8s资源管理操作——陈述式管理方式_第12张图片k8s资源管理操作——陈述式管理方式_第13张图片

8)更新资源

格式:
    //更改模板信息
    kubectl set image deployment  <容器名>=<镜像名>
    //更改选择器标签
    kubectl set selector service  '标签key=value'

例子:
    //将nginx 版本更新为 1.15 版本
    kubectl set image deployment/nginx nginx=nginx:1.15
   
    //处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
    kubectl get pods -w

k8s资源管理操作——陈述式管理方式_第14张图片

9)回滚资源

格式:
    kubectl rollout history deployment     #查看历史版本

    kubectl rollout undo deployment  [--to-revision=N]
#不加--to-revision=N,默认回滚到前一个版本,反之指定版本回滚

    kubectl rollout status deployment     #查看回滚的状态

k8s资源管理操作——陈述式管理方式_第15张图片

Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求

3、service 的 type 类型

1)ClusterIP

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

2)NodePort

        在每个node上打开一个端口以供外部访问,且每个node端口都是一样的,集群外部的程序通过NodeIP:Nodeport的方式访问集群内的Service,每个端口只能是一种服务,端口范围只能是30000~32767。

3)LoadBalancer

        使用云负载设备和service做映射,外部用户通过云负载设备即可将请求转发到node节点,再通过NodeIP:NodePort访问service并转发给其他关联的Pod

4)ExternalName

        相当于给一个外部地址做别名,集群内的Pod可以通过这个service访问相关的外部服务

4、Service与Pod如何关联的?

Service 通过 标签选择器(Label Selector) 绑定Pod的标签来关联Pod的端点。

对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式 去 访问 Service,再由 Service 重定向到相应的 Pod。

5、service的端点

        1)port

service的clusterIP使用的端口

        2)nodePort

在NodePort类型的service定义的端口,在每个node节点上开启的端口,即nodeIP使用的端口,默认范围30000~32767

        3)targetPort

service将发送给port或nodePort的请求转发给Pod的容器端口,需与containerPort一致

        4)containerPort

创建Pod时所指定的容器端口

最后K8s集群内部的客户端可以通过访问  http://clusterIP:port ----------->podIP:containerPort(Pod容器提供的服务)

K8s集群外部的客户端可以通过访问  http://nodeIP:nodePort------->podIP:containerPort(Pod容器提供的服务)

6、集群内Pod资源滚动更新的方式

        Pod资源滚动更新的方式有:蓝绿发布、红黑发布、灰度发布(金丝雀发布)、滚动发布

        1)蓝绿发布

定义:以最小的停机时间做服务升级的策略

        需要维护的两个版本的环境分别为“蓝环境”和“绿环境”,简单说就是,“绿环境”就是目前正在使用的,能够正常使用的环境,而“蓝环境”就是需要更新到的版本使用的环境。

        发布流程:

首先将一半的服务流量从负载均衡列表中移除,并且更新服务版本,验证新版本没有问题后,将生产环境指向蓝环境,然后对于老版本的绿环境进行版本升级,最后将所有流量加回负载均衡。

如下图升级过程:

k8s资源管理操作——陈述式管理方式_第16张图片

两套环境交替升级,旧版本会保留一定时间后在做升级,便于回滚

优点:

  • 升级过程无需停机,用户感知小
  • 升级/回滚速度快。

缺点:

  • 资源成本高

        2)红黑发布

定义:与蓝绿发布类似,红黑发布也是通过两套环境完成软件版本的升级,将当前环境称为红环境,新版本环境为黑环境。

发布流程:

首先需要申请新资源用于部署黑环境,在黑环境部署新版本的服务,黑环境部署完成后,一次性将生产流量指向黑环境,最后释放红环境的资源。

发布流程图如下:

k8s资源管理操作——陈述式管理方式_第17张图片

        3)灰度发布(金丝雀发布)

定义:灰度发布属于增量发布,新老版本同时为用户提供服务,主要目的是保证系统的可用性

发布流程:

在现有的环境中对一定比例的服务进行升级,升级到新版本后,结合旧版本的其他服务一同提供服务,在新版本的的服务不出现错误时,再升级一定比例服务,以此类推,知道所有服务都升级完成。

发布流程图如下:

k8s资源管理操作——陈述式管理方式_第18张图片

特点:

  • 用户体验影响小,灰度发布过程出现问题影响范围较小
  • 新版本功能逐步发布,可以逐步评估新版服务性能、稳定性和健康状态
  • 发布自动化程度不够,发布期间可能引发服务中断

        4)滚动发布

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部升级成新版本。

k8s资源管理操作——陈述式管理方式_第19张图片

滚动发布有几个参数

3 desired                 #设置副本数期望值
25% max surge             #设置更新时允许创建的最大副本数/比例,向上取整
25% max unavailable       #设置更新时允许销毁的最大副本数/比例,向下取整

你可能感兴趣的:(linux,docker,kubernetes)