zoukankan      html  css  js  c++  java
  • 第三章 Kubernetes进阶之kubectl管理命令

      一. kubectl管理命令概要

      • 基础命令
        • create 通过文件名或标准输入创建资源
        • expose 将一个新的资源公开为新的service
        • run 在集群中运行一个特定的镜像(创建一个容器)
        • set 在对象上设置特定的功能
        • get 显示一个或多个资源
        • exit 使用默认的编辑器编辑资源
        • delete 通过文件名、标准输入、资源名称、或标签选择器来删除资源
      • 部署命令
        • rollout 管理资源的发布
        • rolling-update 对给定的复制控制器滚动更新
        • scale 扩容或缩容pod数量,Deployment、ReplicaSet、RC、或Job
        • autoscale 创建一个自动选择扩容并设置pod数量
      • 集群管理命令
        • certficate 修改证书资源
        • cluster-info 显示集群信息
        • top 显示资源(cpu/memory/storage)使用。需要部署Heapster运行
        • cordon 标记节点可以调度
        • uncordon 标记节点不可调度 (节点维护情况下使用)
        • drain 驱逐节点上的应用,准备下线(比如机器故障、更换等停机)
        • taint 修改节点taint标记
      • 故障诊断和调试命令
        • describe 显示特性资源或资源组详细信息
        • log 在一个pod中打印一个容器日志,如果pod只有一个容器日志,容器名称是可选的
        • attach 附加到一个运行的容器
        • exec 执行命令到容器
        • port-forward 转发一个或多个本地端口到pod
        • porxy 运行一个porxy到kubernetes api server
        • cp 拷贝文件或目录到容器中
        • auth 检查授权
      • 高级命令
        • apply 通过文件名或标准输入对资源应用配置
        • patch 通过补丁修改、更新资源字段
        • replace 通过文件名或标准输入替换一个资源
        • covert 不同api版本之间转换配置文件
      • 设置命令
        • lable 更新资源上的标签
        • annotate 更新资源上的注释
        • completion 用于实现kubectl工具自动补全
      • 其他命令
        • api-versions 打印受支持的api版本
        • config 修改kubernetes文件(用于访问api,比如配置认证信息等)
        • help 所有帮助命令
        • plugin 运行一个命令行插件
        • version 打印客户端和服务版本信息

      二. kubectl工具管理资源生命周期

      k8s创建资源会自动调用后端node,部署是使用镜像进行部署

      1,创建

    #指定名称为nginx 副本数为3 使用镜像为nginx:1.14 端口是80
    kubectl run nginx --replicas=3 --image=nginx:1.14 --port=80
    

       查看创建的pod,正在创建3个副本容器

    # kubectl get pod
    NAME                     READY   STATUS              RESTARTS   AGE
    nginx-7bc87ddb4d-47lrr   0/1     ContainerCreating   0          55s
    nginx-7bc87ddb4d-4q9nr   0/1     ContainerCreating   0          55s
    nginx-7bc87ddb4d-sz8hl   0/1     ContainerCreating   0          55s
    

       创建成功后状态为running

    # kubectl get pod
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-7bc87ddb4d-47lrr   1/1     Running   0          6m
    nginx-7bc87ddb4d-4q9nr   1/1     Running   0          6m
    nginx-7bc87ddb4d-sz8hl   1/1     Running   0          6m
    

       实际创建了一个包含三个副本的deployment

    # kubectl get deploy
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   3/3     3            3           6m49s
    

       2,发布

      创建好的应用需要创建service暴露应用

    #创建一个service
    #deployment nginx 该service对应的deployment名称是nginx
    #--port=80 k8s中服务之间访问的端口
    #--type=NodePort发布类型是NodePort即外部可以访问的端口,会随机生成一个3000以上的端口
    #--target-port容器的端口(最根本的端口人口),与制作容器时暴露的端口一致,例如docker.io官方的nginx暴露是80端口
    #--name指定service的的名称
    kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=nginx-service
    

       查看,对外暴露了端口为30232

    # kubectl get service
    NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.10.10.1    <none>        443/TCP        3d4h
    nginx-service   NodePort    10.10.10.48   <none>        80:30232/TCP   9m8s
    

       访问 任意node的ip加对应的端口

       查看nginx日志

    kubectl logs nginx-7bc87ddb4d-sz8hl
    

       如果查看日志出现错误提示

    Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log nginx-7bc87ddb4d-sz8hl)
    

       解决办法

      绑定一个cluster-admin的权限

    kubectl create clusterrolebinding system:anonymous   --clusterrole=cluster-admin   --user=system:anonymous
    

       3,更新项目

      项目已经部署需要更新

    kubectl set image deployment/nginx nginx=nginx:1.15
    

       会下载镜像滚动更新

      更新完毕查看nginx版本变成1.15了

    kubectl describe pod nginx-6f7d58d4cc-9bj74
    

     

       4,回滚

      查看发布过的版本

    # kubectl rollout history deployment/nginx
    deployment.extensions/nginx 
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>
    

       回滚到上一个版本

     kubectl rollout undo deployment/nginx
    

       指定版本回滚

       5,删除

      项目下线删除

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

      三. kubectl工具远程连接集群

      一般管理k8s集群在master进行管理,把管理工具kubectl拷贝至其他主机无法管理集群,本地没有监听的端口8080

    # kubectl get node
    The connection to the server localhost:8080 was refused - did you specify the right host or port?
    

       生产admin证书

    # cat admin-csr.json 
    {
      "CN": "admin",
      "hosts": [],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [
        {
          "C": "CN",
          "ST": "BeiJing",
          "L": "BeiJing",
          "O": "system:masters",
          "OU": "System"
        }
      ]
    }
    
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
    

     

       在k8s证书目录下执行生成配置文件,这里连接的IP使用的是VIP 192.168.1.60

    kubectl config set-cluster kubernetes 
    > --server=https://192.168.1.60:6443 
    > --embed-certs=true 
    > --certificate-authority=ca.pem 
    > --kubeconfig=config
    
    Cluster "kubernetes" set.
    
    # kubectl config set-credentials cluster-admin 
    > --certificate-authority=ca.pem 
    > --embed-certs=true 
    > --client-key=admin-key.pem 
    > --client-certificate=admin.pem 
    > --kubeconfig=config
    
    User "cluster-admin" set.
    
    kubectl config set-context default --cluster=kubernetes --user=cluster-admin --kubeconfig=config 
    
    Context "default" created.
    
    
    kubectl config use-context default --kubeconfig=config 
    
    Switched to context "default".
    

       生成config配置文件

       把该配置文件config拷贝至其他主机例如node即可以加配置文件运行kubectl命令

    # kubectl --kubeconfig=config get node
    NAME           STATUS   ROLES    AGE     VERSION
    192.168.1.65   Ready    <none>   3d22h   v1.13.4
    192.168.1.66   Ready    <none>   3d22h   v1.13.4
    

       把配置文件放在以下目录即可以不加配置文件即可使用

    /root/.kube
    
  • 相关阅读:
    SQL语句字符串处理大全
    iframe的属性
    The GridView 'gv ' fired event RowEditing which wasn 't handled.
    parttime job
    一个女孩如何准备行装和安全的独自旅行
    DORADO展现中间件的实现
    在asp.net 2.0中使用自定义的provider (转)
    MemberShip 的使用介绍(转)
    DBHelper
    jQuery学习——介绍演示网站
  • 原文地址:https://www.cnblogs.com/minseo/p/12397159.html
Copyright © 2011-2022 走看看