Kubernetes --kubectl命令管理

一、kubectl --help帮助文档介绍

[root@master01 dashboard]# kubectl --help
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 设置一个新的副本数量;
                     弹性伸缩,特别是无状态的web服务
  autoscale    自动调整一个 Deployment, ReplicaSet, 或者ReplicationController的副本数量;自动弹性伸缩

Cluster Management Commands:
  certificate    修改 certificate 资源.(比如同意node节点加入时)
  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;污点  --一旦某个node被标记污点,就不会在这个节点上创建pod了

Troubleshooting and Debugging Commands:
  describe    显示一个指定 resource 或者 group 的 resources 详情    --排障
  logs           输出容器在 pod 中的日志         --排障
  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          验证

Advanced Commands:
  apply         通过文件名或标准输入流(stdin)对资源进行配置;资源创建、重新部署,更新
  patch         使用 strategic merge patch 更新一个资源的 field(s)
  replace      通过 filename 或者 stdin替换一个资源
  wait           Experimental: Wait for a specific condition on one or many resources.
  convert     在不同的 API versions 转换配置文件

Settings Commands:
  label             更新在这个资源上的 labels
  annotate       更新一个资源的注释
  completion    Output shell completion code for the specified shell (bash or zsh);输出shell代码到指定的终端上

Other Commands:
  alpha               Commands for features in alpha
  api-resources  Print the supported API resources on the server;可以看到哪些资源可以缩写
  api-versions   Print the supported API versions on the server, in the form of "group/version"
  config         修改 kubeconfig 文件
  plugin         Provides utilities for interacting with plugins.
  version        输出 client 和 server 的版本信息

二、完整项目周期实例

项目的生命周期,创建–》发布–》更新–》回滚–》删除
1.创建nginx

[root@master01 ~]# kubectl run nginx-test --image=nginx --port=80  --replicas=3 
[root@master01 ~]# kubectl get all     #等于kubectl get pods,svc,deployment,replicaset

2.发布nginx #可以再为service提供负载均衡的功能

[root@master01 ~]# kubectl expose deployment nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort    #为nginx服务开放NodePort类型的端口
service/nginx-service exposed
pod是一组容器的集合,有四种端口
节点端口:nodeport
pod端口:port
容器发布端口:targetport
容器内部端口:containerport

在这里插入图片描述

[root@master01 ~]# kubectl get svc -o wide  
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE   SELECTOR
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP                18h        <none>
nginx-service   NodePort    10.0.0.86    <none>        80:31641/TCP   44s         run=nginx-test

#查看资源对象简写(选取了常用的部分内容)

[root@master02 ~]# kubectl api-resources
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
namespaces                        ns                                          false        Namespace
nodes                             no                                          false        Node
pods                              po                                          true         Pod
replicationcontrollers            rc                                          true         ReplicationController
resourcequotas                    quota                                       true         ResourceQuota
services                          svc                                         true         Service
deployments                       deploy       apps                           true         Deployment
replicasets                       rs           apps                           true         ReplicaSet
certificatesigningrequests        csr          certificates.k8s.io            false        
events                            ev           events.k8s.io                  true         Event
deployments                       deploy       extensions                     true         Deployment
replicasets                       rs           extensions                     true         ReplicaSet

#查看终端节点的IP和端口

[root@master02 ~]# kubectl get endpoints
NAME            ENDPOINTS                                      AGE
kubernetes      14.0.0.80:6443                                 22h
nginx-service   172.17.29.4:80,172.17.29.5:80,172.17.42.3:80   4h29m

#查看网络状态详细信息

[root@master02 ~]# kubectl get pods -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE
nginx-test-7fcfb6488c-kfstr   1/1     Running   0          4h43m   172.17.29.5   14.0.0.60   <none>
nginx-test-7fcfb6488c-vqmw6   1/1     Running   0          4h43m   172.17.42.3   14.0.0.70   <none>
nginx-test-7fcfb6488c-zhptn   1/1     Running   0          4h43m   172.17.29.4   14.0.0.60   <none>

#查看服务暴露的端口(随机)

[root@master02 ~]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        22h
nginx-service   NodePort    10.0.0.86    <none>        80:31641/TCP   4h32m

//在node01操作,查看负载均衡端口31641
//kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式

[root@node01 ~]# yum -y install ipvsadm
[root@node01 ~]# ipvsadm -L -n    #能够看到另一个node中的pod是因为装了flannel网络组件
TCP  14.0.0.60:31641 rr
  -> 172.17.29.4:80               Masq    1      0          0
  -> 172.17.29.5:80               Masq    1      0          0
  -> 172.17.42.3:80               Masq    1      0          0
//在node02操作 同样安装ipvsadmin工具查看
[root@node02 ~]# ipvsadm -L -n    
TCP  14.0.0.70:31641 rr
  -> 172.17.29.4:80               Masq    1      0          0
  -> 172.17.29.5:80               Masq    1      0          0
  -> 172.17.42.3:80               Masq    1      0          0
//在master01操作,查看访问日志

[root@master02 ~]# kubectl get pods -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE
nginx-test-7fcfb6488c-kfstr   1/1     Running   0          4h55m   172.17.29.5   14.0.0.60   <none>
nginx-test-7fcfb6488c-vqmw6   1/1     Running   0          4h55m   172.17.42.3   14.0.0.70   <none>
nginx-test-7fcfb6488c-zhptn   1/1     Running   0          4h55m   172.17.29.4   14.0.0.60   <none>

[root@master02 ~]# kubectl logs nginx-test-7fcfb6488c-zhptn
2020/10/09 14:17:47 [error] 28#28: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.29.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "14.0.0.60:31641"      #访问14.0.0.60:31641产生的日志
172.17.29.1 - - [09/Oct/2020:14:17:47 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.29.1 - - [09/Oct/2020:14:18:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.29.1 - - [09/Oct/2020:14:18:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:09 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
2020/10/09 14:20:09 [error] 28#28: *3 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.42.0, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "14.0.0.70:31641"      #访问14.0.0.70:31641产生的日志
172.17.42.0 - - [09/Oct/2020:14:20:09 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:11 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"
172.17.42.0 - - [09/Oct/2020:14:20:11 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-"

3.更新nginx为1.14版本
谷歌浏览器按F12刷新页面查看nginx版本信息
在这里插入图片描述

#获取修改模板
[root@master02 ~]# kubectl set --help
[root@master02 ~]# kubectl set image --help
Examples:
  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox
container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
[root@master02 ~]# kubectl set image deployment/nginx-test nginx-test=nginx:1.14
deployment.extensions/nginx-test image updated
[root@master02 ~]# kubectl get pods -w    #动态查看更新过程
NAME                          READY   STATUS              RESTARTS   AGE
nginx-test-7fcfb6488c-kfstr   1/1     Running             0          5h23m
nginx-test-7fcfb6488c-vqmw6   1/1     Running             0          5h23m
nginx-test-7fcfb6488c-zhptn   1/1     Running             0          5h23m
nginx-test-b884fcd65-65tkj    0/1     ContainerCreating   0          9s
nginx-test-b884fcd65-65tkj   1/1   Running   0     11s
nginx-test-7fcfb6488c-kfstr   1/1   Terminating   0     5h23m
nginx-test-b884fcd65-8sv8h   0/1   Pending   0     0s
nginx-test-b884fcd65-8sv8h   0/1   Pending   0     1s
nginx-test-b884fcd65-8sv8h   0/1   ContainerCreating   0     1s
nginx-test-7fcfb6488c-kfstr   0/1   Terminating   0     5h23m
nginx-test-7fcfb6488c-kfstr   0/1   Terminating   0     5h23m
nginx-test-7fcfb6488c-kfstr   0/1   Terminating   0     5h23m
nginx-test-b884fcd65-8sv8h   1/1   Running   0     11s
nginx-test-7fcfb6488c-vqmw6   1/1   Terminating   0     5h24m
nginx-test-b884fcd65-g5szj   0/1   Pending   0     0s
nginx-test-b884fcd65-g5szj   0/1   Pending   0     0s
nginx-test-b884fcd65-g5szj   0/1   ContainerCreating   0     0s
nginx-test-7fcfb6488c-vqmw6   0/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-vqmw6   0/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-vqmw6   0/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-vqmw6   0/1   Terminating   0     5h24m
nginx-test-b884fcd65-g5szj   1/1   Running   0     17s
nginx-test-7fcfb6488c-zhptn   1/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-zhptn   0/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-zhptn   0/1   Terminating   0     5h24m
nginx-test-7fcfb6488c-zhptn   0/1   Terminating   0     5h24m

业务更新:采用滚动更新的方式:先创建一个新的,等running以后再终止一个旧的(因为要维持副本数不变)
#谷歌浏览器上刷新页面,发现成功更新版本为1.14版本
在这里插入图片描述

4.回滚nginx

[root@master02 ~]# kubectl rollout --help
Examples:
  # Rollback to the previous deployment
  kubectl rollout undo deployment/abc
Available Commands:
  history     显示 rollout 历史
  pause       标记提供的 resource 为中止状态
  resume      继续一个停止的 resource
  status      显示 rollout 的状态
  undo        撤销上一次的 rollout
Usage:
  kubectl rollout SUBCOMMAND [options]
[root@master02 ~]# kubectl rollout history deployment/nginx-test   #查看历史版本
deployment.extensions/nginx-test
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
[root@master02 ~]# kubectl rollout undo deployment/nginx-test    #执行回滚
deployment.extensions/nginx-test
#同样是先创建一个新的,再删除一个旧的pod
[root@master02 ~]# kubectl rollout status deployment/nginx-test  #查看回滚执行状态
deployment "nginx-test" successfully rolled out

在这里插入图片描述

5.删除nginx

#查看deployment
[root@master02 ~]# kubectl get deploy
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-test   3         3         3            3           5h43m
#删除控制器才能彻底删除(除了svc资源)
[root@master02 ~]# kubectl delete deploy/nginx-test  
deployment.extensions "nginx-test" deleted
[root@master02 ~]# kubectl get pods,deploy,rs
No resources found.
[root@master02 ~]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        23h
nginx-service   NodePort    10.0.0.86    <none>        80:31641/TCP   5h34m
#删除服务svc
[root@master02 ~]# kubectl delete svc/nginx-service
service "nginx-service" deleted
#查看资源的详细信息
[root@master02 ~]# kubectl describe pod nginx-dbddb74b8-5j5nx
Name:               nginx-dbddb74b8-5j5nx
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               14.0.0.60/14.0.0.60
Start Time:         Fri, 09 Oct 2020 23:09:32 +0800
Labels:             pod-template-hash=dbddb74b8
                    run=nginx
Annotations:        <none>
Status:             Running
IP:                 172.17.29.2
Controlled By:      ReplicaSet/nginx-dbddb74b8
Containers:
  nginx:
    Container ID:   docker://9bf37a4d6541a337b3019c940283bbaf45483f3b990d7733ec9e1539a7d21bd2
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 09 Oct 2020 23:09:34 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-dzqfg (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-dzqfg:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-dzqfg
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>

Events:    #显示了pod创建的每步详细信息
  Type    Reason     Age   From                Message
  ----    ------     ----  ----                -------
  Normal  Scheduled  37s   default-scheduler   Successfully assigned default/nginx-dbddb74b8-5j5nx to 14.0.0.60       #scheduler调度pod创建到哪个节点上
  Normal  Pulling    37s   kubelet, 14.0.0.60  pulling image "nginx"   #下载镜像
  Normal  Pulled     35s   kubelet, 14.0.0.60  Successfully pulled image "nginx"
  Normal  Created    35s   kubelet, 14.0.0.60  Created container      #创建容器
  Normal  Started    35s   kubelet, 14.0.0.60  Started container

#查看deployment控制器资源
[root@master02 ~]# kubectl describe deployment.apps/nginx
Name:                   nginx
Namespace:              default
CreationTimestamp:      Fri, 09 Oct 2020 23:09:32 +0800
Labels:                 run=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx
  Containers:
   nginx:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-dbddb74b8 (1/1 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  5m49s  deployment-controller  Scaled up replica set nginx-dbddb74b8 to 1  
#处理集群中常规后台任务,一个资源对应一个控制器,控制器定义资源的类型,而controller-manager就是负责管理这些控制器的;维持副本期望的数目
[root@master02 ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-5j5nx   1/1     Running   0          9m36s
#进入pod
[root@master02 ~]# kubectl exec -it nginx-dbddb74b8-5j5nx bash
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值