• Kubectl 的使用——k8s陈述式资源管理


    一、kebuctl简介:

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

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

    kubectl的命令大全:kubectl --help
    k8s中文文档: http://docs.kubernetes.org.cn/683.html

    二、kebuctl的使用: 

    1.基础用法:

    //查看版本信息 kubectl version

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

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

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

     

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

    2.基本信息查看:

    1. kubectl get [-o wide|json|yaml] [-n namespace]
    2. 获取资源的相关信息,-n 指定命令空间,-o 指定输出格式

    获取pod资源: 

    指定命令空间: 

    指定输出格式:


    resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
    --all-namespaces 或 -A :表示显示所有命令空间:


    --show-labels :显示所有标签:


    -l app :仅显示标签为app的资源:


    -l app=nginx :仅显示包含app标签,且值为nginx的资源:

    -w:持续跟踪输出:

    2.1查看master节点状态: 

    1. //查看 master 节点状态
    2. kubectl get componentstatuses
    3. kubectl get cs

     2.2查看命名空间:

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

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

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

    2.4查看服务(Service)资源的状态:

    1. //用于获取服务(Service)资源的状态
    2. kubectl get svc
    3. //简写成svc

     2.5创建命名空间app:

    1. //创建命名空间app
    2. kubectl create ns app
    3. //查看命名空间
    4. kubectl get ns

    2.6删除命名空间app:

    1. //删除命名空间app
    2. kubectl delete ns app
    3. //查看命名空间
    4. kubectl get ns

    3.创建和删除pod:

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

    • Deployment:无状态应用部署
    • Statefulset:有状态应用部署
    • Replicaset:副本数量控制器
    • Daemonset:确保所有节点运行同一类 Pod
    • Cronjob:计划性任务
    1. //在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)
    2. kubectl create deployment nginx-0l --image=nginx -n kube-public

    #创建一个名为nginx-01的deployment(无状态应用部署)

    #指定为nginx镜像,且指定为kube-public命名空间

    #査看kube-pubic命名空间资源#创建成功 

    1. //用run直接创建——自主式pod
    2. kubectl run gg --image=nginx -n kube-public
    3. //直接创建删除后不会拉取镜像
    4. //run存储在节点中

    3.2描述某个资源的详细信息: 

    1. kubectl describe 资源类型
    2. kubectl describe 资源类型/pod名

    3.3查看命名空间kube-public 中的pod 信息:

    1. //查看命名空间kube-public 中的pod 信息
    2. kubectl get pods -n kube-public

     3.4扩容-缩容:

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

    3.5登录容器 :

    1. kubectl exec -it pod名 -c 容器名 bash/sh
    2. #区别于docker exec只能登入本机的docker
    3. #如果pod中只有一个容器,则无需-c指定
    4. kubectl exec -it pod名 -c 容器名 -- 命令
    5. #可以实现不进入容器执行 -- 后的命令

    3.6删除pod资源:

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

    1. kubectl delete pods
    2. --force --grace-period=0 #添加该选项强制删除(无需等待)
    3. #grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod

    3.7删除副本控制器:

    kubectl delete deployment 资源名 -n kube-public

     三、项目的生命周期:

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

    1.创建 kubectl create:

    ●创建并运行一个或多个容器镜像。

    ●创建一个deployment 或job 来管理容器。

    1. //启动 nginx 实例,暴露容器端口 80,设置副本数 3
    2. kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
    1. //为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,
    2. Service的名称为nginx-service,类型为NodePort

    2.发布 kubectl expose:

    ●将资源暴露为新的 Service。

    暴露默认的 ClusterIP 类型服务

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

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

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

    暴露 NodePort 类型服务 :

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

    浏览器访问测试: 

    查看单独容器详细信息 

    3.更新 kubectl set:

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

    查看版本:

    更改版本:

    4.回滚 kubectl rollout:

    回滚操作的使用方式:

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

    5.删除 kubectl delete:

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

    1. kubectl delete pod控制器 控制器名称 #删除pod控制器
    2. kubectl delete 服务 服务名称 #删除服务

    四、金丝雀发布:

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

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

    1.创建: 

    2.暴露端口:

    3.更新并在第一轮完成后暂停:

    没更新前的版本:

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

    查看: 

    4.测试无误后继续更新 : 

    等待全部更新:

    总结:

    生命周期:

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

    创建: kubectl create 《资源名称》 --image=《镜像名称》 --port= 端口 --replicas= target port=

    发布:

    kubectl expose 《资源类型》《资源名称》 --port -targetport= type=clusterIP|Nodeport

    更新:

    kubectl set image<资源类型><资源名称><容器名>=<镜像名 标签版本>

    回滚:

    kubectl rollout unde<资源类型><资源名称>默认是回滚到上一个版本状态

    --to-revision=回滚的指定版本

    kubectl rollout historylstatus <资源类型><资源名称>

    删除:kubectl delete <资源类型><资源名称》

    蓝绿发布:

    两套设备 进行新旧版本的切换

    好处:用户无感知,业务稳定

    缺点:资源消耗2倍 成本特别高

    滚动:

    按照他的比例一部分一部分滚动更新,k8s的默认更新机制

    无创建一点的比例pod,先创建在删除一定的旧的pod

    灰度发布(金丝雀):

    先更新一部分pod,然后在暂停更新

    安排一小部分的用户流量去访问更新pod来进行测试,当测试没问题后在扩大比例 直到全部更新完成为止

    当yaml配置文件发送改动成功后,使用create创建的资源想要更新的时候,需要先delete删除原有资源在去通过yaml文件,创建资源使用apply创建的资源想要更新,可以直接在执行kubectl apply -f 更新

  • 相关阅读:
    猿创征文 | 万字总结C文件
    效率系列(九) macOS入门各式快捷操作
    HuTool工具类 CollUtil 实现多个集合的交集、差集
    Flowable多实例会签功能来袭
    SpringBoot整合Redis
    Linux多线程控制:深入理解与应用(万字详解!)
    bash: cmake: command not found...+++++++lsb_release: command not found
    Blazor OIDC 单点登录授权实例5 - 独立SSR App (net8 webapp ) 端授权
    【0106】WAL之初始化XLOG访问(1)
    Spring Boot整合Postgres实现轻量级全文搜索
  • 原文地址:https://blog.csdn.net/m0_75067030/article/details/139066547