目录
陈述式资源管理方式
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
2)查看资源对象简写
kubectl api-resources
3)查看集群信息
kubectl cluster-info
4)配置kubectl自动补全
source <(kubectl completion bash)
5)node节点查看日志
journalctl -u kubelet -f
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]
格式:
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
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 #查看所有命名空间
4)进入Pod中的容器
格式:
kubectl exec -it [-n <命名空间>] <Pod资源名称> [-c 容器名称] sh|bash
//进入到Pod容器中
kubectl exec -it -n heitui nginx-ht-5dcc469667-dkxh8 bash
5)查看Pod容器的日志
格式:
kubectl logs [-n <命名空间>] <Pod资源名称> [-c 容器名称] [-f] [-p]
-f:实时查看日志
-p:查看Pod容器重启前的日志
//查看Pod容器的日志
kubectl logs -n heitui nginx-ht-5dcc469667-dkxh8
6)扩容或缩容
格式:
kubectl scale [-n <命名空间>] <deployment|statefulset> <资源名称> --replicas=副本数
//扩容
kubectl scale -n heitui deployment nginx-ht --replicas=3
//缩容
kubectl scale -n heitui deployment nginx-ht --replicas=1
7)将资源暴露为新的Service,向外提供服务
格式:
kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type <svc资源类型> --port <clusterIP的端口> --targetPort <容器的端口>
svc资源类型有 ClusterIP|NodePort|LoadBalancer|ExternalName
例子:
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
8)更新资源
格式:
//更改模板信息
kubectl set image deployment <deployment资源名称> <容器名>=<镜像名>
//更改选择器标签
kubectl set selector service <svc资源名称> '标签key=value'
例子:
//将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15
//处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w
9)回滚资源
格式:
kubectl rollout history deployment <deployment资源名称> #查看历史版本
kubectl rollout undo deployment <deployment资源名称> [--to-revision=N]
#不加--to-revision=N,默认回滚到前一个版本,反之指定版本回滚
kubectl rollout status deployment <deployment资源名称> #查看回滚的状态
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)蓝绿发布
定义:以最小的停机时间做服务升级的策略
需要维护的两个版本的环境分别为“蓝环境”和“绿环境”,简单说就是,“绿环境”就是目前正在使用的,能够正常使用的环境,而“蓝环境”就是需要更新到的版本使用的环境。
发布流程:
首先将一半的服务流量从负载均衡列表中移除,并且更新服务版本,验证新版本没有问题后,将生产环境指向蓝环境,然后对于老版本的绿环境进行版本升级,最后将所有流量加回负载均衡。
如下图升级过程:
两套环境交替升级,旧版本会保留一定时间后在做升级,便于回滚
优点:
- 升级过程无需停机,用户感知小
- 升级/回滚速度快。
缺点:
- 资源成本高
2)红黑发布
定义:与蓝绿发布类似,红黑发布也是通过两套环境完成软件版本的升级,将当前环境称为红环境,新版本环境为黑环境。
发布流程:
首先需要申请新资源用于部署黑环境,在黑环境部署新版本的服务,黑环境部署完成后,一次性将生产流量指向黑环境,最后释放红环境的资源。
发布流程图如下:
3)灰度发布(金丝雀发布)
定义:灰度发布属于增量发布,新老版本同时为用户提供服务,主要目的是保证系统的可用性。
发布流程:
在现有的环境中对一定比例的服务进行升级,升级到新版本后,结合旧版本的其他服务一同提供服务,在新版本的的服务不出现错误时,再升级一定比例服务,以此类推,知道所有服务都升级完成。
发布流程图如下:
特点:
- 用户体验影响小,灰度发布过程出现问题影响范围较小
- 新版本功能逐步发布,可以逐步评估新版服务性能、稳定性和健康状态
- 发布自动化程度不够,发布期间可能引发服务中断
4)滚动发布
滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部升级成新版本。
滚动发布有几个参数
3 desired #设置副本数期望值
25% max surge #设置更新时允许创建的最大副本数/比例,向上取整
25% max unavailable #设置更新时允许销毁的最大副本数/比例,向下取整