k8s资源管理方法详解(陈述式、声明式)

这篇具有很好参考价值的文章主要介绍了k8s资源管理方法详解(陈述式、声明式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:陈述式资源管理方法

二: 基本信息查看

1、查看信息

2、创建

 3、删除

4、service 的 type 类型

三:项目实例

1、创建    kubectl create命令

2、发布    kubectl expose命令

 3、在 node 节点上操作,查看负载均衡端口

 4、更新    kubectl set

5、 回滚    kubectl rollout 

6、 删除    kubectl delete

四:声明式管理方法

总结


一:陈述式资源管理方法

1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
3.kubectl 的命令大全
kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html
4.对资源的增、删、查操作比较方便,但对改的操作就不容易了

//查看版本信息    kubectl version

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

//查看资源对象简写    kubectl api-resources

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

//查看集群信息    kubectl cluster-info

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

//配置kubectl自动补全    source <(kubectl completion bash)

 k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetesk8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

//node节点查看日志     journalctl -u kubelet -f

 k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

二: 基本信息查看

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源

1、查看信息

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

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

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

//查看命名空间kube-public 中的pod 信息
kubectl get pods -n kube-public
NAME                       READY   STATUS    RESTARTS   AGE
nginx-a1-d47f99cb6-hv6gz   1/1     Running   0          24m

//kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it nginx-a1-d47f99cb6-hv6gz bash -n kube-public

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

2、创建

//创建命名空间app
kubectl create ns app
kubectl get ns

//在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)
kubectl create deployment nginx-wl --image=nginx  -n kube-public


//扩缩容
kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 3、删除

//删除命名空间app
kubectl delete namespace app
kubectl get ns	

//删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public

//若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
		
//删除副本控制器
kubectl delete deployment nginx-a1 -n kube-public
kubectl delete deployment/nginx-a1 -n kube-public

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

4、service 的 type 类型

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

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

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

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

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

targetPort是容器映射端口 在集群内部,客户端通过clusterIP:port 转发 targetPort 再转发给容器内部;在外部客户端访问,通过 nodeIP:nodePort 转发到 targetPort 再转发给容器内部

containerPort是容器内部的端口 也是 kubectl create deployment --port (clusterip的端口) --target-port (容器端口) --name <自定义资源名称> --type (svc资源类型)

三:项目实例

项目的生命周期:创建-->发布-->更新-->回滚-->删除

1、创建    kubectl create命令

●创建并运行一个或多个容器镜像。
●创建一个deployment 或job 来管理容器。
kubectl create --help

//启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

2、发布    kubectl expose命令

●将资源暴露为新的 Service。
kubectl expose --help

//为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

------------------------------------------------------------------------------------------
Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。

//查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide

/查看关联后端的节点
kubectl get endpoints

//查看 service 的描述信息
kubectl describe svc nginx

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 3、在 node 节点上操作,查看负载均衡端口


//在 node01 节点上操作,查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
//外部访问的IP和端口
TCP  192.168.80.11:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0     
//pod集群组内部访问的IP和端口
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         
  
//在 node02 节点上操作,同样方式查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
TCP  192.168.80.12:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         
 
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         

curl 10.0.0.189
curl 192.168.80.11:44847
//在master01操作 查看访问日志
kubectl logs nginx-cdb6b5b95-fjm2x
kubectl logs nginx-cdb6b5b95-g28wz
kubectl logs nginx-cdb6b5b95-x4m24

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 4、更新    kubectl set

●更改现有应用资源一些信息。
kubectl set --help

//获取修改模板
kubectl set image --help
Examples:
  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

//查看当前 nginx 的版本号
curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

//将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15

//处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w

---------------------------------------------------------------------------------------------
#滚动更新详解:
kubectl get all
DESIRED:表示期望的状态是 10 个 READY 的副本
CURRENT:表示当前副本的总数: 即8 个日副本 + 5 个新副本
UP_TO-DATE:表示当前已经完成更新的副本数: 即 5个新副本
AVAILABLE:表示当前处于 READY 状态的副本数: 即8个日副本。

kubectl describe deployment/nginx
滚动更新通过参数 maxSurge 和 maxUnavailable 来控制副本替换的数量
maxSurge:此参数控制滚动更新过程中副本总数的超过 DESIRED 的上限。maxSurge 可以是具体的整数(比如 3),也可以是百分百,向上取整。maxSurge 默认值为 25%。
例如,DESIRED 为 10,那么副本总数的最大值为 10 + 10 * 25% = 13,即 CURRENT 为 13。

maxUnavailable:此参数控制滚动更新过程中,不可用的副本相占 DESIRED 的最大比例。maxUnavailable 可以是具体的整数(比如 3),也可以是百分百,向下取整。 maxUnavailable 默认值为 25%。
例如,DESIRED 为 10,那么可用的副本数至少要为 10 - 10 * 25% = 8,即 AVAILABLE 为 8。

因此 maxSurge 值越大,初始创建的新副本数量就越多;maxUnavailable 值越大,初始销毁的旧副本数量就越多。

理想情况下,DESIRED 为 10 的滚动更新的过程应该是这样的:
首先创建 3 个新副本使副本总数达到 13 个。
然后销毁 2 个旧副本使可用的副本数降到 8 个。
当这 2 个旧副本成功销毁后,可再创建 2 个新副本,使副本总数保持为 13 个。
当新副本通过 Readiness 探测后,会使可用副本数增加,超过 8。
进而可以继续销毁更多的旧副本,使可用副本数回到 8。
旧副本的销毁使副本总数低于 13,这样就允许创建更多的新副本。
这个过程会持续进行,最终所有的旧副本都会被新副本替换,滚动更新完成。
---------------------------------------------------------------------------------------------

//再看更新好后的 Pod 的 ip 会改变
kubectl get pods -o wide

//再看 nginx 的版本号
curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetesk8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

5、 回滚    kubectl rollout 

●对资源进行回滚管理
kubectl rollout --help

//查看历史版本
kubectl rollout history deployment/nginx 

//执行回滚到上一个版本
kubectl rollout undo deployment/nginx

//执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1

//检查回滚状态
kubectl rollout status deployment/nginx

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

6、 删除    kubectl delete

//删除副本控制器
kubectl delete deployment/nginx

//删除service
kubectl delete svc/nginx-service

kubectl get all

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

四:声明式管理方法

1.适合于对资源的修改操作
2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
4.语法格式:kubectl create/apply/delete -f xxxx.yaml
 

//查看资源配置清单
kubectl get deployment nginx -o yaml

//解释资源配置清单
kubectl explain deployment.metadata

kubectl get service nginx -o yaml
kubectl explain service.metadata

//修改资源配置清单并应用
方法一:离线修改:
修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

方法二:在线修改:
直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改


//删除资源配置清单
陈述式删除:
kubectl delete service nginx

声明式删除:
kubectl delete -f nginx-svc.yaml


k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes 

k8s资源管理方法详解(陈述式、声明式),linux,运维,服务器,kubernetes

 

总结

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

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

kubectl describe <资源类型> <资源名称> -n 命名空间

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

kubectl exec -it -n 命名空间  <Pod资源名称>  [-c 容器名称]  sh|bash

kubectl logs -n 命名空间  <Pod资源名称>  [-c 容器名称] [-p]

kubectl scale -n 命名空间 deployment <资源名称> --replicas=副本数   

kubectl expose -n 命名空间 deployment <资源名称> --name <自定义svc资源名称> --port <clusterIP的端口> --target-port <容器的端口> --type <svc的类型>
kubectl create svc <svc资源类型> <资源名称> --tcp=<clusterIP的端口>:<容器的端口>

kubectl set image deployment <资源名称> <容器名>=<镜像名>

kubectl rollout history deployment <资源名称>
kubectl rollout undo deployment <资源名称>  [--to-revision= ]
kubectl rollout status deployment <资源名称>


service 的 4 种类型:
ClusterIP:默认的service资源的类型,提供clusterIP供K8S集群内部访问
NodePort:会在每个Node节点上开启一个端口,K8S集群内部和外部的用户都可以通过NodeIP:NodePort访问service以及其关联的Pod
LoadBalancer:使用公有云的LB服务和service做映射,用户可以使用公有云LB服务的IP地址即可将请求转发到Node节点,再通过NodeIP:NodePort访问service以及其关联的Pod
ExternalName:相当于给一个域名或IP做别名,Pod可以通过这个service访问相关的外部服务


service 的端口:
port :service 资源的 clusterIP 所使用的端口
nodePort :在NodePort类型的service所定义的,在每个Node节点上开启的端口(默认范围为30000~32767)
targetPort :service 将发送给 port 或 nodePort 的请求转发到后端的 Pod 的容器端口

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

K8S集群内部 http://clusterIP:port  -->  podIP:containerPort
K8S集群外部 http://nodeIP:nodePort  -->  podIP:containerPort


应用的发布策略:
蓝绿发布
滚动发布
灰度发布/金丝雀发布
kubectl set image deployment <资源名称> <容器名>=<镜像名>  &&  kubectl rollout pause deployment <资源名称>
kubectl rollout resume deployment <资源名称>

25% max unavailable   滚动更新过程中,销毁的Pod数量不超过期望副本数的25%,向下取整
25% max surge         滚动更新过程中,新增的Pod数量不超过期望副本数的25%,向上取整

期望的Pod副本数是10个,销毁的数量2,新增3        整个更新过程中Pod的数量会一致保持在 8 ~ 13

声明式资源管理
kubectl apply|create -f XXX.yaml
kubectl delete -f XXX.yaml

kubectl edit <资源类型> <资源名称>

kubectl explain <资源类型>.<一级字段>.<二级字段>...
 文章来源地址https://www.toymoban.com/news/detail-635922.html

到了这里,关于k8s资源管理方法详解(陈述式、声明式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s中kubectl陈述式/声明式资源管理

    1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 3.kubectl 的命令大全 kubectl

    2024年02月15日
    浏览(39)
  • K8S:kubectl陈述式及声明式资源管理

    (1)kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 (2)kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 (3)kubectl 的命令大

    2024年02月09日
    浏览(48)
  • k8s资源管理命令与Namespace使用详解

    目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法

    2023年04月16日
    浏览(53)
  • 【K8S 】K8S配置资源管理

    1、概念 用来保存密码。token,敏感的K8S资源 这类数据可以直接存放在镜像中,但是放在Secret中可以更方便的控制,减少暴露的风险 Secret:保存加密的信息 2、Secret类型: docker-registry:存储docker仓库的认证信息,以及docker的组件认证信息(私有) generic:是Secret的默认模式,

    2024年01月17日
    浏览(48)
  • K8S资源管理之计算资源管理

            以CPU为例,下图显示了未设置Limits与设置了Requests和Limits的CPU使用率的区别        尽管Requests和Limits只能被设置到容器上,但是设置了Pod级别的Requests和Limits能大大提高管理Pod的便利性和灵活性,因此在Kubernetes中提供了对Pod级别的Requests和Limits的配置。对于CP

    2024年04月15日
    浏览(57)
  • k8s---配置资源管理

    目录 内容预知 secret资源配置 secert的几种模式 pod如何来引用secret 陈述式创建secret 声明式+base64编码配置secret 将secret用vlumes的方式挂载到pod中 传参的方式将环境变量导入pod 如何通过secret加密方式获取仓库密码 configmap的资源配置 陈述式创建configmap资源配置 声明式配置configma

    2024年01月21日
    浏览(57)
  • k8s配置资源管理

    Secret Configmap Secret :保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret当中可以更方便控制,减少暴露的风险 保存加密的信息 Docker-registry: 存储docker仓库认证信息,以及docker组件认证成功(私有) Generic: 是secret的默认模式,opaque base64加密编码的

    2024年01月21日
    浏览(50)
  • k8s- 配置资源管理

    配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 Secret 有四种类型:  ●kubernetes.io/service-account-token:由 Kubernetes 自动创建,

    2024年02月16日
    浏览(50)
  • k8s 资源管理方式

    k8s中资源管理方式可以划分为下面的几种:命令式对象管理、命令式对象配置、声明式对象配置。 命令式对象管理 命令式对象管理:直接使用命令的方式来操作k8s资源, 这种方式操作简单,但是无法审计和追踪。 命令式对象配置 通过命令和配置文件来操作k8s资源,这种方式

    2024年02月07日
    浏览(43)
  • K8S资源管理方式

    1.基础命令操作 2.创建pod 3.查看资源状态 4.查看pod中的容器日志 5.进入pod中的容器 6.删除pod资源 7.pod扩容 8.项目生命周期管理(创建–发布–更新–回滚–删除) 8.1创建service service类型 service端口 8.2发布 8.3更新 8.4回滚 8.5删除 如何获取资源配置清单文件模板(yaml配置文件)

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包