【云原生之k8s】k8s管理工具kubectl详解

【云原生之k8s】k8s管理工具kubectl详解

前言

一、陈述式管理

(1)陈述式资源管理方法

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

(2)k8s相关信息查看

①查看版本信息

kubectl version

在这里插入图片描述

②查看节点信息

kubectl get nodes

在这里插入图片描述

③查看资源对象简写

kubectl api-resources

在这里插入图片描述

④查看集群信息

kubectl cluster-info

在这里插入图片描述

⑤配置kubectl自动补全

 source <(kubectl completion bash)

可通过TAB键实现命令补全,建议将其写入 /etc/profile

⑥查看日志

journalctl -u kubelet -f

在这里插入图片描述

⑦基本信息查看

kubectl get [-o wide|json|yaml] [-n namespace]

获取资源的相关信息,-n指定命名空间,-o指定输出格式
resource可以是具体资源名称,如"pod nhinx-xxx";也可以是资源类型,如“pod,node,svc,deploy”多种资源使用逗号间隔;或者all(仅展示几种核心资源,并不完整)

  1. –all-namespaces或-A:表示显示所有命名空间
  2. –show-labels:显示所有标签
  3. -l app:仅显示标签为app的资源
  4. -l app=nginx:仅显示包含app标签,且值为nginx的资源
1、查看master节点状态
kubectl get componentstatuses

#componentstatues可以缩写成cs
kubectl get cs

在这里插入图片描述

2、查看命名空间
kubectl get namespace

#namespace可以缩写成ns
kubectl get ns

在这里插入图片描述

⑧命名空间操作

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

由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间

在这里插入图片描述

2、创建命名空间

kubectl create ns lcdb

在这里插入图片描述

3、删除命名空间
kubectl delete ns lcdb

在这里插入图片描述

⑨deployment/pod操作

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

在这里插入图片描述

2、描述某个资源的详细信息
kubectl describe deployment nginx-test -n kube-public

在这里插入图片描述

kubectl describe pod nginx-test -n kube-public

在这里插入图片描述

3、查看命名空间kube-public中pod信息
kubectl get pods -n kube-public

在这里插入图片描述

4、登录容器

kubectl exec 可以跨主机登录容器,docker exec 只能在容器所在主机登录

kubectl exec -it nginx-test-795d659f45-lqjcb bash -n kube-public

在这里插入图片描述

5、测试(重启)pod资源

由于存在 deployment/rc 之类的副本控制器,删除 pod 也会重新拉起来

kubectl delete pod nginx-test-795d659f45-lqjcb -n kube-public
kubectl get pod -n kube-public

在这里插入图片描述

6、若无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod [] -n [] --force --grace-period=0

grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅的退出,0表示立即终止pod

在这里插入图片描述

7、扩缩容
7.1扩容
kubectl scale deployment nginx-test --replicas=3 -n kube-public

在这里插入图片描述

7.2缩容
kubectl scale deployment nginx-test --replicas=1 -n kube-public

在这里插入图片描述

8、删除副本控制器
kubectl delete deployment nginx-test -n kube-public

在这里插入图片描述

⑩删除/增加label

1、增加label
kubectl label deploy nginx-test version=nginx1.14

在这里插入图片描述

2、删除label
kubectl label deploy nginx-test version-

在这里插入图片描述

二、声明式管理

(1)声明式管理方法

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

(2)查看资源配置清单

kubectl get deploy/nginx -o yaml

在这里插入图片描述

kubectl get service nginx -o yaml

在这里插入图片描述

(3)解释资源配置清单

kubectl explain deployment.metadata

在这里插入图片描述

kubectl explain service.metadata

在这里插入图片描述

(4)修改资源配置清单并应用

①离线修改

1、修改yaml文件

修改yaml文件:并用kubectl apply -f xxxx.yaml文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service nginx-service -o yaml > nginx-svc.yaml

在这里插入图片描述

2、删除资源
kubectl delete -f nginx-svc.yaml

在这里插入图片描述

3、新建资源
kubectl apply -f nginx-svc.yaml

在这里插入图片描述

4、查看service资源
kubectl get svc

在这里插入图片描述

②在线修改

直接使用kubectl edit service nginx在线编辑配置资源清单并保存退出即时生效(如port: 888)

PS:此修改方式不会对yaml文件内容修改

kubectl edit service nginx

在这里插入图片描述
查看service资源

kubectl get svc

在这里插入图片描述

(5)删除资源配置清单

①陈述式删除

kubectl delete service nginx-service

在这里插入图片描述

②声明式删除

kubectl delete -f nginx-svc.yaml

在这里插入图片描述

三、K8S模拟项目

Kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建、查看、管理的操作。

//帮助信息
[root@localhost bin]# kubectl --help
kubectl controls the Kubernetes cluster manager. 

Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create         Create a resource from a file or from stdin.
  expose         使用 replication controller, service, deployment 或者 pod
并暴露它作为一个 新的 Kubernetes Service
  run            在集群中运行一个指定的镜像
  set            为 objects 设置一个指定的特征

Basic Commands (Intermediate):
  explain        查看资源的文档
  get            显示一个或更多 resources
  edit           在服务器上编辑一个资源
  delete         Delete resources by filenames, stdin, resources and names, or by resources and
label selector

Deploy Commands:
  rollout        Manage the rollout of a resource
  scale          为 Deployment, ReplicaSet, Replication Controller 或者 Job
设置一个新的副本数量
  autoscale      自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController的副本数量

Cluster Management Commands:
  certificate    修改 certificate 资源.
  cluster-info   显示集群信息
  top            Display Resource (CPU/Memory/Storage) usage.
  cordon         标记 node 为 unschedulable
  uncordon       标记 node 为 schedulable
  drain          Drain node in preparation for maintenance
  taint          更新一个或者多个 node 上的 taints

Troubleshooting and Debugging Commands:
  describe       显示一个指定 resource 或者 group 的 resources 详情
  logs           输出容器在 pod 中的日志
  attach         Attach 到一个运行中的 container
  exec           在一个 container 中执行一个命令
  port-forward   Forward one or more local ports to a pod
  proxy          运行一个 proxy 到 Kubernetes API server
  cp             复制 files 和 directories 到 containers 和从容器中复制 files 和
directories.
  auth           Inspect authorization

(1)项目的生命周期

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

(2)创建kubectl run命令

  1. 创建并运行一个或多个容器镜像
  2. 创建一个deployment或job来管理容器
  3. kubectl run --help查看使用帮助

启动nginx实例,暴露容器端口80,设置副本数3

kubectl run nginx-deployment --image=nginx:1.14 --port=80 --replicas=3

在这里插入图片描述
使用run报错
k8sv1.18.0以后的版本, --replicas以后弃用该命令,推荐使用deployment创建pods
我这里用的是1.21.3版本

  1. 想创建多个实例时可以使用:kubectl create deployment pg102 --image=pg:12 –port=5432 --replicas=3 来进行创建;

  2. 查看pod: kubectl get pod,用来查看使用命令创建的所有实例

  3. 查看deploy:kubectl get deploy,用来查看实例所创建的数量;

  4. 高于1.17版本的建议以后直接使用create deployment创建pod管理器方式创建pod;

    kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
    

在这里插入图片描述
在这里插入图片描述

(3)发布kubectl expose命令

将资源暴露为新的service

为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

kubectl expose deployment nginx2 --port=80 --target-port=80 --name=nginx-service --type=NodePort

在这里插入图片描述

①Service的作用

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

②Service的类型

  1. ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(Service默认类型)
  2. NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过NodeIP:NodePort的方式
  3. LoadBalancer:通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

③查看Pod网络状态详细信息和service暴露端口

kubectl get pods,svc -o wide

在这里插入图片描述

④查看关联后端的节点

kubectl get endpoints

在这里插入图片描述

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

在这里插入图片描述

⑥访问查看

在这里插入图片描述

kubectl describe svc nginx | grep NodePort
curl 192.168.159.230:32683

在这里插入图片描述

⑦查看访问日志

kubectl logs []

在这里插入图片描述

(4)更新kubectl set

  • 更改现有应用资源一些信息。

kubectl set --help查看使用帮助

①获取修改模板

kubectl set image --help获取

在这里插入图片描述

②查看当前nginx的版本号

在这里插入图片描述

③将nginx版本更新为1.15

kubectl set image deployment/nginx nginx=nginx:1.15

在这里插入图片描述

④监听pod状态

处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后以此类推

kubectl get pods -w

在这里插入图片描述
注:更新规则可通过“kubetl describe deployment nginx”的“RollingUpdateStrategy”查看,默认配置为“25% max unavailable, 25% max surge”,即按照25%的比例进行滚动更新。

在这里插入图片描述

⑤查看pod的ip变化

kubectl get pod -o wide

在这里插入图片描述

(5)回滚kubectl rollout

  • 对资源进行回滚管理

kubectl rollout --help查看使用帮助

①查看历史版本

kubectl rollout history deployment/nginx

在这里插入图片描述

②执行回滚到上个版本

kubectl rollout undo deployment/nginx
kubectl get pods -o wide

在这里插入图片描述
查看nginx当前版本
在这里插入图片描述

③执行回滚到指定版本

查看历史版本
在这里插入图片描述
回到revison2,即1.15版本

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

在这里插入图片描述

④检查回滚状态

kubectl rollout status deployment/nginx

在这里插入图片描述

(6)删除kubectl delete

①删除副本控制器

kubectl delete deployment/nginx

在这里插入图片描述

②删除service

kubectl delete svc/nginx-service

在这里插入图片描述

四、金丝雀发布/灰度发布(Canary Release)

(1)金丝雀发布简介

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

(2)更新deployment的版本,并配置暂停deployment

①创建pod

kubectl create deployment nginx-test --image=nginx:1.14 --replicas=3
kubectl get pods,deploy -o wide

在这里插入图片描述

②发布服务

kubectl expose deploy nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort
kubectl get svc -o wide

在这里插入图片描述

③查看nginx版本

curl -I 192.168.159.230:31114
kubectl describe deployment nginx-test | grep Image

在这里插入图片描述

④定义版本change-cause

1、查看历史版本

在不定义CHANGE-CAUSE的情况下,缺省值为,当历史版本较多时,不便于咱们回滚时辨认版本号。因此,建议定义CHANGE-CAUSE为服务版本以帮助咱们辨认当前服务。

kubectl rollout history deploy/nginx-test

在这里插入图片描述

2、定义版本

一般通过修改配置的方式定义change-cause

kubectl edit deploy/nginx-test

......
kind: Deployment
metadata:
  annotations:
#下行可定义历史版本revision
    deployment.kubernetes.io/revision: "1"
#在Deployment的matadata项下的annotations中如下行定义change-cause
    kubernetes.io/change-cause: "nginx1.14"
......

在这里插入图片描述

3、再次查看历史版本
kubectl rollout history deploy/nginx-test

在这里插入图片描述

4、更新nginx版本为1.15并配置暂停
kubectl set image deploy/nginx-test nginx=nginx:1.15 && kubectl rollout pause deploy/nginx-test

在这里插入图片描述

⑤观察更新状态
kubectl rollout status deploy/nginx-test

在这里插入图片描述

⑥监控更新的过程

可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w

在这里插入图片描述

⑦查看nginx版本
kubectl get pod -o wide

在这里插入图片描述

⑧查看并更新历史版本change-cause
kubectl rollout history deploy/nginx-test

在这里插入图片描述

kubectl edit deploy/nginx-test

kind: Deployment
metadata:
  annotations:
#下行的revison自动更新为2
    deployment.kubernetes.io/revision: "2"
#修改下行的change-cause为nginx1.15
    kubernetes.io/change-cause: nginx1.15

在这里插入图片描述
在这里插入图片描述

⑨resume继续更新

测试版本没问题继续更新

kubectl rollout resume deploy/nginx-test

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
云原生是一种软件开发和部署的方法论,旨在利用云计算的优势,实现更快、更灵活、更可靠的部署和运行。云原生的核心是容器化和微服务化,通过将应用程序打包成容器,使其更易于部署、扩展和管理。同时,云原生也强调自动化、可观察性、故障恢复等方面的技术和实践。 云平台是云计算的基础设施,提供了计算、存储、网络等基础服务。云平台可以提供虚拟机、容器、对象存储等不同的计算和存储资源,以满足不同的应用需求。云平台也提供了自动化的管理服务,如负载均衡、弹性伸缩、安全等,帮助用户快速构建和管理应用程序。 Kubernetes(简称K8s)是一种容器编排平台,提供了容器编排、自动化部署、扩展、负载均衡等功能。K8s可以自动管理应用程序的容器,使其更易于部署、扩展和管理。K8s也提供了自动化的管理服务,如服务发现、故障恢复、滚动升级等,帮助用户快速构建和管理应用程序。 微服务是一种架构风格,将应用程序划分成小型服务,每个服务独立部署和扩展。微服务架构强调松耦合、高内聚、自治性等特点,使得应用程序更易于扩展和维护。微服务也可以利用容器技术进行部署和管理,实现更高效的运维。 综上所述,云原生、云平台、K8s和微服务都是云计算中的重要概念和技术,它们之间存在密切的关联。云平台提供了基础设施和自动化管理服务,支持云原生应用程序的部署和运行;K8s提供了容器编排和自动化管理服务,支持微服务架构的部署和运行;云原生、云平台、K8s和微服务共同构成了现代化的云计算架构,使得企业可以更加敏捷、高效地开发和运营应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值