• kubernetes 应用快速入门


    使用kubectl进行增、删、查、改等常用操作

    查看kubectl命令帮助

    • kubectl -h
    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 设置一个指定的特征
      run-container  在集群中运行一个指定的镜像. This command is deprecated, use "run" instead
    
    Basic Commands (Intermediate):  #基本命令集,适合有一定基础的人
      get            显示一个或更多 resources
      explain        查看资源的文档
      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
      rolling-update 完成指定的 ReplicationController 的滚动升级
      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
    
    Advanced Commands: #高级命令集
      apply          通过文件名或标准输入流(stdin)对资源进行配置
      patch          使用 strategic merge patch 更新一个资源的 field(s)
      replace        通过 filename 或者 stdin替换一个资源
      convert        在不同的 API versions 转换配置文件
    
    Settings Commands:  #设置相关的命令集
      label          更新在这个资源上的 labels
      annotate       更新一个资源的注解
      completion     Output shell completion code for the specified shell (bash or zsh)
    
    Other Commands: #其他命令集
      api-versions   Print the supported API versions on the server, in the form of "group/version"
      config         修改 kubeconfig 文件
      help           Help about any command
      plugin         Runs a command-line plugin
      version        输出 client 和 server 的版本信息
    
    Usage:    #使用格式
      kubectl [flags] [options]
    
    Use "kubectl <command> --help" for more information about a given command.  #各个子命令如何获取命令帮助
    Use "kubectl options" for a list of global command-line options (applies to all commands).  #查看命令的通用选项(所有命令)
    

    可以看到,命令帮助很人性化的帮我们对各个命令做了划分,让我们可以更好的学习和使用,下面我们开始使用kubectl命令在命令行下测试相关命令的用法

    创建一个应用程序

    1 创建一个应用程序,我们使用  "kubectl run " 命令,是 "kubectl run -h" 查看命令使用帮助,命令说明告诉我们这个命令可以创建一个deployment或者job的容器

    kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
    

    2 查看一下deployment的信息,是否有当前创建的

    kubectl get deployment
    

    NAME(名称) DESIRED(需要pod的个数) CURRENT(当前已经存在的个数) UP-TO-DATE(最新创建的pod个数)  AVAILABLE(可用的pod个数)   AGE(deployment存活的时间)

    3 获取pod的信息,-o wide 表示更详细的显示信息

     

    访问创建的 pod (nginx-deploy)

    1 集群内访问

    curl 10.32.0.4
    

    2 集群外部访问

    当我们在集群之外访问是发现无法访问,那么集群之外的客户端如何才能访问呢?这就需要我们的service服务了,下面我们就创建一个service,是外部客户端可以访问我们的pod

     创建一个service

    使用kubectl expose 可以创建一个service ,可以使用 kubectl expose -h命令查看命令帮助

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

    查看我们service的详细信息

    kubectl get svc -o wide
    

    使用集群外客户端再一次访问,需要使用集群任意节点的IP地址加上暴露的端口号

     

      

    service服务有个特点,如果端口暴露类型为NodePort,那么可以通过集群内任意一台主机加暴露的端口进行访问

     对nginx-deploy这个deployment进行扩容和缩减操作

     查看 deployment 信息

    kubectl get deployment
    

    扩容: 对名称为nginx-deploy类型为deployment的对象进行扩容,有初始的1个扩容到五个

    kubectl scale --replicas=5 deployment nginx-deploy
    

    查看 pod 扩容的过程

    kubectl get pod -w

    缩减:

    使用replicas指定我们想要的个数即可
    kubectl scale --replicas=3 deployment nginx-deploy
    

      

    现在我们对 nginx-deploy进行滚动升级及回滚操作,由1.14-alpine 升级到1.15-alpine,并由1.15-alpine回滚到1.14-alpine版本(nginx在docker hub上版本信息:https://hub.docker.com/_/nginx/)  

      

     滚动升级:

    kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15-alpine --record

    观察滚动升级的过程

     

    查看任意一个pod的信息,看看镜像是否升级

     

     版本回滚:

    --to-revision 参数可以指定回退的版本

     

     查看任意一个pod的信息,看看镜像是否回滚到1.14-alpine版本

     

     服务发现

    先创建一个新应用,叫myapp:

    kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
    

    运行一个客户端Pod,在客户端Pod内部通过service的名称去访问nginx服务

    kubectl run client -it --image=busybox --replicas=1 --restart=Never
    


    在busybox上测试访问  

    wget -O - -q 10.32.0.5
    wget -O - -q 10.32.0.8
    

     为myapp创建一个service

    kubectl expose deployment myapp --name=myapp --port=80
    kubectl get svc

     

     通过在busyboy上面访问 myapp service 时随机分发到不同的pod 

     

     对此也可以尝试对 myapp(deployment) 做一些滚动升级,删除修改通过在集群内部通过服务ip会自动的发现 myapp pod

    如果想通过一个固定地址去访问这个myapp,可以利用nginx做反向代理

     这一篇笔记只是演示如何通过手动去创建、更新、回滚一个应用。这只是在使用K8S中,最简单但是无法实现其全部功能 、全部定制的一种使用方式。而在真正使用K8S时,基本不会这样去操作。我们使用K8s的常用方式,应该是基于YAML格式的配置文件来定义和创建资源

     操作的命令做一个大致的总结

    • kubectl run  创建一个deployment或job来管理创建的容器
    • kubectl get  显示一个或多个资源,可以使用标签过滤,默认查看当前名称空间的资源
    • kubectl expose 将一个资源暴露为一个新的kubernetes的service资源,资源包括pod (po), service (svc), replicationcontroller (rc),deployment(deploy), replicaset (rs)
    • kubectl describe 显示特定资源或资源组的详细信息
    • kubectl scale 可以对Deployment, ReplicaSet, Replication Controller, 或者StatefulSet设置新的值,可以指定一个或多个先决条件 kubectl set #更改现有的应用程序资源
    • kubectl rollout  资源回滚管理
  • 相关阅读:
    urlencode 和 rawurlencode 的区别
    magic_quotes_gpc
    变量的值是多少
    git diff patch
    drupal前端开发的第一点
    git drupal eclipse
    spm总结
    features block
    alu features menu
    git reset 理解
  • 原文地址:https://www.cnblogs.com/crazymagic/p/10995354.html
Copyright © 2020-2023  润新知