Kubectl 使用详解——k8s陈述式资源管理

一、kubectl简介


 kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径。

 对资源的增、删、查操作比较方便,但对改的操作就不容易了。

kubectl的命令大全:kubectl --help


k8s中文文档: http://docs.kubernetes.org.cn/683.html

二、kubectl的使用

  2.1 基础用法

  2.1.1 配置kubectl自动补全

source <(kubectl completion bash)——在当前shell环境中配置kubectl自动补全(可以在 /etc/bashrc 中添加此命令实现全局添加)

  2.1.2 查看版本信息

kubectl version——查看版本信息(建议与当前k8s版本一致) 

  2.1.3 查看资源对象信息

  2.1.4 查看集群信息

  2.1.5 查看日志

kubectl logs 资源名称 [-c 容器名] [-f]——查看容器日志 [ 指定pod中的容器 ]  [ 跟踪显示 ]

journalctl -u kubelet——查看节点日志

journalctl -u kubelet -f——跟踪显示

  2.2 基本信息查看

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的资源
-w持续跟踪输出

  2.2.1 基本信息查看

  2.2.1 查看master节点状态

kubectl get componentstatuses或kubectl get cs

  2.2.2 查看命名空间

    命令空间的作用:用于允许不同命令空间相同类型的资源重名

kubectl get namespace


kubectl get ns         #从此条命令获取到的命名空间名,即可用于get 的 -n 选项

  2.2.3 查看default命名空间的所有资源

  2.2.4 创建命名空间

  2.2.5 删除命名空间

  2.3 创建和删除pod

  2.3.1 指定pod控制器和容器镜像创建pod

kubectl create <pod控制器名> <pod名称> --image=镜像名

选项含义

Deployment

无状态应用部署
Statefulset有状态应用部署
Replicaset副本数量控制器
Daemonset确保所有节点运行同一类 Pod
Cronjob计划性任务

  2.3.1.1 run直接创建

  2.3.2 删除pod

    存在deployment/rc之类的副本控制器期望副本数量,删除pod也会重新拉起来。真正需要删除,需要删除其控制器。

kubectl delete pods <pod名>

                                               --force --grace-period=0         #添加该选项强制删除(无需等待)

kubectl delete pods testadpp2-xxxxx-xxxxx -n kube-public

  2.4 查看资源详细信息

kubectl describe 资源类型

kubectl describe 资源类型/pod名 

  2.5 登入容器

kubectl exec -it pod名 -c 容器名 bash/sh——区别于docker exec只能登入本机的docker

                                                                ——如果pod中只有一个容器,则无需-c指定

kubectl exec -it pod名 -c 容器名 -- 命令——可以实现不进入容器执行 -- 后的命令

  2.6 扩缩容

kubectl scale 资源名 --replicas=n——n为数字,大于当前副本数则是扩容,小于则是缩容

三、项目生命周期

  创建——>发布——>更新——>回滚——>删除

  3.1 创建

  3.2 发布

    3.2.1 将资源暴露为新的service

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

Service通过Label Selector实现的对一组的 Pod的访问。

       

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

  service 的 type 类型:

  • ClusterIP:提供一个集群内部的虚拟IP以供k8s集群内部访问(service默认类型)
  • NodePort:在每个Node节点上开启一个端口,K8S集群内外的用户都可以通过 Node Ip:NodePort 的方式使Kubernetes集群外部的程序可以访问service。
  • LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云很务提供商的云平台上没置service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

  在service提交后,Kubernetes就会调用cloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的地址配置给负载均衡服务做后端。

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

  serivce和pod的端口:

  • port:serivce的ClusterIP所使用的端口
  • nodePort:NodePort类型的service所定义的在每个Node节点上开启的端口(默认端口范围30000~32767)
  • targetPort:以上port或nodePort所要转发到的后端Pod的端口
  • containerPort:后端Pod的容器所使用的端口

  3.2.2 暴露默认的ClusterIP类型服务 

kubectl expose deployment 控制器名称 --name=服务名称 --port=服务端口 --target-port=pod端口

  3.2.2.1 编写内容,方便查看是否能够负载均衡  

  3.2.2.2 访问ClusterIP测试是否能负载均衡  

  3.2.3 暴露NodePort类型服务

kubectl expose deployment 控制器名称 --name=服务名称 --port=服务端口 --target-port=pod端口 --type=NodePort

  3.2.4 浏览器测试 

  3.2.5 查看单独容器详细信息

  3.3 更新 

    可以对以下资源进行更新

  3.3.1 对指定pod控制器的镜像版本镜像更新

kubectl set image deployment nginx-test nginx=nginx:1.18 

  3.3.2 查看更新结果

  3.4 回滚

    回滚操作的使用方式

kubectl rollout -h——回滚帮助

kubectl rollout history pod控制器 控制器名——查看该资源的更新历史

kubectl rollout undo pod控制器 控制器名 [--to-revision=n]——回滚资源上一个[ 指定的 ]记录

kubectl rollout status pod控制器 控制器名——查看回滚事务状态

  3.5 删除

    删除所有资源代表一个项目的结束

kubectl delete pod控制器 控制器名称——删除pod控制器

kubectl delete 服务 服务名称——删除服务  

四、金丝雀发布

  Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。

  4.1 创建deployment

  4.2 发布服务(暴露服务) 

  4.3 更新并在第一轮完成后暂停

  4.4 测试无误后继续更新 

  4.5 总结

  金丝雀发布:当我们有多个服务需要创建时;我们在创建的过程中,先创建一部分然后暂停(pause);创建的这一部分作为测试;如果测试结果正常,我们再继续(resume)创建 

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s资源管理有几种方。一种方是通过使用Namespace来进行资源的隔离和管理。k8s中的Namespace可以将集群内部的资源分配到不同的逻辑组中,以方便不同组的资源进行隔离使用和管理。通过授权机制,可以将不同的Namespace交给不同的租户进行管理,实现多租户的资源隔离。此外,结合资源配额机制,可以限定不同租户能够占用的资源,例如CPU使用量、内存使用量等,来管理租户可用资源。\[2\] 另一种方是通过操作资源来管理k8s集群。在k8s中,所有内容都可以被抽象为资源,通过操作这些资源来管理集群。例如,可以使用Deployment资源类型来管理应用的部署和更新,使用Service资源类型来提供应用的网络访问,使用ReplicaSet资源类型来控制应用的副本数量,使用DaemonSet资源类型来在集群中的每个节点上运行一个Pod,使用Job资源对象来管理一次性任务的执行,使用CronJob资源类型来定期执行任务等等。通过操作这些资源,可以实现对k8s集群中各种服务和应用的管理和控制。\[1\]\[3\] #### 引用[.reference_title] - *1* [k8s资源类型详解](https://blog.csdn.net/weixin_47019016/article/details/111415831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [k8s资源管理命令与Namespace使用详解](https://blog.csdn.net/zhangcongyi420/article/details/128379834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值