• K8S管理工具-kubectl ①


    文章目录


    一、陈述式管理

    1、陈述式资源管理方法

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

    2、k8s相关信息查看

    查看版本信息

    kubectl version
    
    • 1

    在这里插入图片描述

    查看节点信息

    kubectl get nodes
    
    • 1

    在这里插入图片描述

    查看资源对象简写

    kubectl api-resources
    
    • 1

    在这里插入图片描述

    查看集群信息

    kubectl cluster-info
    
    • 1

    在这里插入图片描述

    配置kubectl自动补全

    source <(kubectl completion bash)
    可通过TAB键实现命令补全,建议将其写入 /etc/profile
    
    • 1
    • 2

    在这里插入图片描述

    查看日志

    journalctl -u kubelet -f
    
    • 1

    在这里插入图片描述

    基本信息查看

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

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

    –all-namespaces或-A:表示显示所有命名空间
    –show-labels:显示所有标签
    -l app:仅显示标签为app的资源
    -l app=nginx:仅显示包含app标签,且值为nginx的资源

    查看master节点状态
    kubectl get componentstatuses
    
    #componentstatues可以缩写成cs
    kubectl get cs
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    查看命名空间
    kubectl get namespace
    
    #namespace可以缩写成ns
    kubectl get ns
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    命名空间操作

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

    由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间
    在这里插入图片描述

    创建命名空间
    kubectl create ns lx
    
    • 1

    在这里插入图片描述

    删除命名空间
    kubectl delete ns lx
    
    • 1

    在这里插入图片描述

    deployment/pod操作

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

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

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

    在这里插入图片描述

    kubectl describe pod nginx-test -n kube-public
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

    登录容器

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

    kubectl exec -it nginx-test-795d659f45-gqbdn bash -n kube-public
    
    • 1

    在这里插入图片描述

    删除(重启)pod资源

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

    kubectl delete pod nginx-test-795d659f45-gqbdn -n kube-public
    kubectl get pod -n kube-public
    
    • 1
    • 2

    在这里插入图片描述

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

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

    扩缩容
    扩容
    kubectl scale deployment nginx-test --replicas=3 -n kube-public
    
    • 1

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

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

    在这里插入图片描述

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

    在这里插入图片描述

    增加/删除label

    增加label
    kubectl label deployment nginx-test version=nginx1.14 -n kube-public
    
    • 1

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

    删除label
    kubectl label deployment nginx-test version- -n kube-public
    
    • 1

    在这里插入图片描述

    二、声明式管理

    1、声明式管理方法

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

    2、查看资源配置清单

    kubectl get deploy/nginx-test -o yaml -n kube-public
    
    • 1

    在这里插入图片描述

    kubectl get service nginx -o yaml
    
    • 1

    在这里插入图片描述

    解释资源配置清单

    kubectl explain deployment.metadata
    
    • 1

    在这里插入图片描述

    kubectl explain service.metadata
    
    • 1

    在这里插入图片描述

    修改资源配置清单并应用

    离线修改

    修改yaml文件

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

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

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

    删除资源
    kubectl delete -f nginx-svc.yaml
    
    • 1

    在这里插入图片描述

    新建资源
    kubectl apply -f nginx-svc.yaml
    
    • 1

    在这里插入图片描述

    查看service资源
    kubectl get svc
    
    • 1

    在这里插入图片描述

    在线修改

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

    kubectl edit service nginx-service
    
    • 1

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

    kubectl get svc
    
    • 1

    在这里插入图片描述

    删除资源配置清单

    陈述式删除

    kubectl delete service nginx
    
    • 1

    在这里插入图片描述

    声明式删除

    kubectl delete -f nginx-svc.yaml
    
    • 1

    在这里插入图片描述

    K8S项目模拟

    项目的生命周期

    创建----发布----更新----回滚----删除

    创建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
    
    • 1

    在这里插入图片描述
    run报错:因为识别不了–replicas命令
    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-1 --image=nginx:1.14 --port=80 --replicas=3
    
    • 1

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

    发布kubectl expose命令

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

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

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

    Service的作用

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

    Service的类型

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

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

    kubectl get pods,svc -o wide
    
    • 1

    在这里插入图片描述

    查看关联后端的节点

    kubectl get endpoints
    
    • 1

    在这里插入图片描述

    查看service的描述信息

    kubectl describe svc nginx
    
    • 1

    在这里插入图片描述

    访问查看

    curl 10.125.192.158
    
    • 1

    在这里插入图片描述

    kubectl describe svc nginx | grep NodePort
    curl 192.168.32.11:30255
    
    • 1
    • 2

    在这里插入图片描述

    查看访问日志

    kubectl logs []
    
    • 1

    在这里插入图片描述

    更新kubectl set

    更改现有应用资源一些信息
    kubectl set --help查看使用帮助

    获取修改模板

    kubectl set image --help获取
    
    • 1

    在这里插入图片描述

    查看当前nginx版本号

    curl -I 192.168.32.11:30255
    
    • 1

    在这里插入图片描述

    更新nginx版本 1.15

    kubectl set image deployment/nginx nginx=nginx:1.15
    
    • 1

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

    监听pod状态

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

    kubectl get pods -w
    
    • 1

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

    查看pod的ip变化

    kubectl get pod -o wide
    
    • 1

    在这里插入图片描述

    回滚kubectl rollout

    • 对资源进行回滚管理
      kubectl rollout --help查看使用帮助

    查看历史版本

    kubectl rollout history deployment/nginx
    
    • 1

    在这里插入图片描述

    执行回滚到上一个版本

    kubectl rollout undo deployment/nginx
    kubectl get pods -o wide
    
    • 1
    • 2

    在这里插入图片描述

    查看nginx当前版本

    curl -I 192.168.32.11:30255
    
    • 1

    在这里插入图片描述

    执行回滚到指定版本

    查看历史版本

    kubectl rollout history deployment/nginx
    
    • 1

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

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

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

    检查回滚状态

    kubectl rollout status deployment/nginx
    
    • 1

    在这里插入图片描述

    删除kubectl delete

    删除副本控制器

    kubectl delete deployment/nginx
    
    • 1

    在这里插入图片描述

    删除service

    kubectl delete svc/nginx-service
    
    • 1

    在这里插入图片描述

    发布方式

    1、蓝绿发布
    2、滚动发布
    3、金丝雀发布

    金丝雀发布

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

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

    创建pods

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

    在这里插入图片描述

    发布服务

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

    在这里插入图片描述

    查看nginx版本

    curl -I 192.168.32.11:32179
    kubectl describe deployment nginx-test | grep Image
    
    • 1
    • 2

    在这里插入图片描述

    定义版本change-cause

    查看历史版本

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

    kubectl rollout history deploy/nginx-test
    
    • 1

    在这里插入图片描述

    定义版本

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

    [root@master ~]# 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"
    ......
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    再次查看历史版本

    kubectl rollout history deploy/nginx-test
    
    • 1

    在这里插入图片描述

    更新nginx版本为1.15并配置暂停

    kubectl set image deploy/nginx-test nginx=nginx:1.15 && kubectl rollout pause deploy/nginx-test
    
    • 1

    在这里插入图片描述

    观察更新状态

    kubectl rollout status deploy/nginx-test
    
    • 1

    在这里插入图片描述

    监控更新的过程

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

    kubectl get pods -w
    
    • 1

    在这里插入图片描述

    查看nginx版本

    curl -I 192.168.32.11:32179
    
    • 1

    在这里插入图片描述

    查看并更新历史版本change-cause

    kubectl rollout history deploy/nginx-test
    
    • 1

    在这里插入图片描述

    [root@master ~]# 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    resume继续更新

    测试新版本没问题继续更新

    kubectl rollout resume deploy/nginx-test
    
    • 1

    在这里插入图片描述

    查看最后的更新情况

    kubectl get pods -w
    这两个后更新
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    Node.js 零基础入门 Node.js 零基础入门第三天 3.4 使用Express写接口
    智慧运维:基于 BIM 技术的可视化管理系统
    SOLIDWORKS Composer反转关键帧实现产品安装过程
    【产品经理】订单处理4-拆单策略
    springboot websocket server无法接收二进制消息数据问题一例
    Redis分布式锁的正确使用姿势
    matlab-day04
    clang入门大全以及clang全家桶介绍
    【tomcat】tomcat系统架构以及核心启动流程
    Promise知识点拾遗
  • 原文地址:https://blog.csdn.net/l17605229954/article/details/127671150