什么是kubectl:

●kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建,查看,管理的操作

●帮助操作:

[root@master02 ~]# kubectl --help
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 设置一个指定的特征(做版本设置的时候会用到)

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 设置一个新的副本数量
  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节点设置为污点状态,那pod资源就不会创建在污点的这台node节点上)

Troubleshooting and Debugging Commands:
  describe       显示一个指定 resource 或者 group 的 resources 详情    ##记录了pod的创建详细过程
  logs          ##输出容器在 pod 中的日志(作用于排障)
  attach         ##用于远程连接到某一个指定的容器
  exec          ##用于进入到某一个容器
  port-forward    ##负责端口转发
  proxy          ##运行一个 proxy 到 Kubernetes API server(代理api server)
  cp          ##复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
  auth           Inspect authorization   ##验证

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) ##输出终端代码

Other Commands:
  alpha          Commands for features in alpha
  api-resources  ##查看哪些资源名称可以缩写
  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 的版本信息

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基本命令:

创建 :kubectl run命令

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]
[--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

举例:
创建nginx无状态化的资源,镜像为nginx;对外暴露端口为nginx;建立3个副本

[root@master02 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created

[root@master02 ~]# kubectl get pods -w    ##监控容器创建过程
NAME                                READY   STATUS              RESTARTS   AGE
nginx-dbddb74b8-bpksv               1/1     Running             0          23h
nginx-deployment-5477945587-2bt64   0/1     ContainerCreating   0          30s
nginx-deployment-5477945587-5pgjf   0/1     ContainerCreating   0          30s
nginx-deployment-5477945587-l8j8c   1/1     Running             0          30s
nginx-deployment-5477945587-2bt64   1/1   Running   0     33s
nginx-deployment-5477945587-5pgjf   1/1   Running   0     44s

[root@master02 ~]# kubectl get pods     ##查看创建的3个nginx资源
NAME                                READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-bpksv               1/1     Running   0          24h
nginx-deployment-5477945587-2bt64   1/1     Running   0          2m17s
nginx-deployment-5477945587-5pgjf   1/1     Running   0          2m17s
nginx-deployment-5477945587-l8j8c   1/1     Running   0          2m17s
[root@master02 ~]# kubectl get pods,svc,rs     ##同时查看三个资源信息

在这里插入图片描述

[root@master02 ~]# kubectl get pods,svc,rs -o wide     ##加上-o wide可以查看到更加详细的资源
NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE              NOMINATED NODE
pod/nginx-dbddb74b8-bpksv               1/1     Running   0          24h   172.17.57.2   192.168.148.139   <none>
pod/nginx-deployment-5477945587-2bt64   1/1     Running   0          24m   172.17.64.3   192.168.148.140   <none>
pod/nginx-deployment-5477945587-5pgjf   1/1     Running   0          24m   172.17.57.4   192.168.148.139   <none>
pod/nginx-deployment-5477945587-l8j8c   1/1     Running   0          24m   172.17.57.3   192.168.148.139   <none>

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   25h   <none>

NAME                                                DESIRED   CURRENT   READY   AGE   CONTAINERS         IMAGES   SELECTOR
replicaset.extensions/nginx-dbddb74b8               1         1         1       24h   nginx              nginx    pod-template-hash=dbddb74b8,run=nginx
replicaset.extensions/nginx-deployment-5477945587   3         3         3       24m   nginx-deployment   nginx    pod-template-hash=5477945587,run=nginx-deployment
[root@master02 ~]# kubectl get pods,svc,deploy,rs    ##deploy:控制器资源信息

在这里插入图片描述
创建了3个nginx的pod资源;发现一个pod会对应一个控制器和一个副本集的资源

  • Deployment:控制器,决定了pod资源的版本更新
    在这里插入图片描述
  • Replicaset:决定了版本的数量
    当pod2宕机了,但是副本集的数量是3个,就会先重新创建pod2资源,再将原先的pod2删除,保证运行的数量是副本集的数量3个,保证服务正常运行
    在这里插入图片描述
[root@master02 ~]# kubectl get all     ##也是同时查看4个资源

在这里插入图片描述

删除:kubectl detele命令

●删除方式:

  • 1.如果是文件形式创建的用:kubectl detele -f yaml文件
  • 2.基于镜像创建删除:kubectl detele pods 资源名
[root@master02 ~]# kubectl delete deploy/nginx-deployment    ##将创建的3个nginx资源都删除

在这里插入图片描述
但是发现service没被删除,因为是独立的资源要单独删除

项目周期:

●项目的生命周期:

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

一.创建资源

[root@master02 ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3     ##创建nginx的资源,端口为80端口,提供3个副本
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created
[root@master ~]# kubectl get all -o wide    ##查看所有的资源信息,并且显示pod对应的IP地址信息

在这里插入图片描述

二.发布资源

1.发布nginx service提供负载均衡的功能
语法:参考kubectl expose --help ##用help命令帮助查看用法信息

kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP]
[--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
[options]

●首先必须了解pod有4个端口

  • Nodeport:提供给外部流量访问k8s集群中的service入口
  • Port:service暴露在clusterIP
  • targetPort:容器映射的外部端口
  • 容器port:容器内部端口
    在这里插入图片描述
[root@master ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
service/nginx-service exposed
--name:资源名称
--type=Nodeport:端口类型是nodeport去进行访问
--port=80:pod资源的端口号为80
--target-port=80:容器映射的外部端口80

在这里插入图片描述
41099:就是nodeport端口,提供给外部访问的端口

2.这时打开浏览器访问,因为资源创建在node01和02上,只需要输入http://192.168.148.140:41099/或者http://192.168.148.139:41099/都可以访问nginx的web页面
在这里插入图片描述
在这里插入图片描述
3.查看关联后端的节点

[root@master ~]# kubectl get endpoints    ##查看服务对应的节点端口
NAME            ENDPOINTS                                      AGE
kubernetes      192.168.148.137:6443,192.168.148.138:6443      2d
nginx-service   172.17.57.2:80,172.17.57.3:80,172.17.64.3:80   9m12s

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

[root@node01 ~]# yum -y install ipvsadm    ##node节点上安装ipvs工具
[root@node01 ~]# ipvsadm -L -n   ##-L:显示整个列表;-n:以数字形式显示
访问不管哪个node节点都会去做负载均衡

在这里插入图片描述
5.在master01操作 查看访问日志(注意:如果访问其他node无法访问检查proxy组件)

[root@master ~]# kubectl get pods    ##先查看pod资源信息
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7697996758-89q9m   1/1     Running   0          17h
nginx-7697996758-lnnjg   1/1     Running   0          17h
nginx-7697996758-z4q9z   1/1     Running   0          17h
[root@master ~]# kubectl logs nginx-7697996758-89q9m     ##查看访问日志

在这里插入图片描述

三.更新资源版本信息

1.谷歌浏览器重新加载刷新页面查看nginx版本信息,点击设置选择开发者工具
在这里插入图片描述
2.获取修改模板

[root@master ~]# 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    ##语法模板

3.更新nginx 为1.14版本

[root@master ~]# kubectl set image deployment/nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
[root@master ~]# kubectl  get pods -w     ##监听更新状态

发现采用的是滚动式更新方式
在这里插入图片描述

[root@master ~]# kubectl  get pods ##查看新的Pod资源信息     
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6ff7c89c7c-4rsmt   1/1     Running   0          2m30s
nginx-6ff7c89c7c-bbgwc   1/1     Running   0          2m13s
nginx-6ff7c89c7c-f4wnx   1/1     Running   0          98s

对比旧的资源信息发生了改变

[root@master ~]# kubectl get pods    ##先查看pod资源信息
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7697996758-89q9m   1/1     Running   0          17h
nginx-7697996758-lnnjg   1/1     Running   0          17h
nginx-7697996758-z4q9z   1/1     Running   0          17h

4.重新打开浏览器查看版本信息是否发生改变
在这里插入图片描述

四.回滚资源版本信息

[root@master ~]# kubectl rollout --help     ##查看帮助信息
Manage the rollout of a resource.
  
Valid resource types include: 

  * deployments  
  * daemonsets  
  * statefulsets

Examples:
  # Rollback to the previous deployment
  kubectl rollout undo deployment/abc
  
  # Check the rollout status of a daemonset
  kubectl rollout status daemonset/foo

Available Commands:
  history     显示 rollout 历史
  pause       标记提供的 resource 为中止状态
  resume      继续一个停止的 resource
  status      显示 rollout 的状态
  undo        撤销上一次的 rollout

Usage:
  kubectl rollout SUBCOMMAND [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).

1.查看历史版本

[root@master ~]# kubectl rollout history deployment/nginx     ##查看资源的更新记录
deployment.extensions/nginx 
REVISION  CHANGE-CAUSE
1         <none>     ##有两个状态
2         <none>

2.执行回滚

[root@master ~]# kubectl rollout undo deployment/nginx
deployment.extensions/nginx
[root@master ~]# kubectl  get pods -w     ##监听回滚状态

在这里插入图片描述
3.这时打开浏览器刷新页面,查看版本号
在这里插入图片描述

五.删除资源信息

1.删除nginx资源

[root@master ~]# kubectl get deploy    ##查看deployment(有三个控制器资源)
NAME    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx   3         3         3            3           21h
[root@master ~]# kubectl delete deployment/nginx    ##删除控制器等于删除了nginx资源
deployment.extensions "nginx" deleted
[root@master ~]# kubectl get deploy
No resources found.
[root@master ~]# kubectl get pods     ##pod被删除了
No resources found.

2.删除服务SVC

[root@master ~]# kubectl get svc    ##查看服务
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        2d5h
nginx-service   NodePort    10.0.0.35    <none>        80:41099/TCP   4h42m
[root@master ~]# kubectl delete svc/nginx-service     ##删除nginx资源的服务
service "nginx-service" deleted
[root@master ~]# kubectl get svc    #
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   2d5h    ##只剩下k8s的服务在运行

六.查看具体资源的详细信息

[root@master ~]# kubectl get pods    ##查看pod资源信息
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7697996758-b2bk4   1/1     Running   0          17m
nginx-7697996758-r9fml   1/1     Running   0          17m
nginx-7697996758-rq744   1/1     Running   0          17m
[root@master ~]# kubectl describe pod nginx-7697996758-b2bk4   ##describe pod 名称     

1.查看单个资源的详细信息

Name:               nginx-7697996758-b2bk4     ##名字
Namespace:          default    ##命名空间
Priority:           0
PriorityClassName:  <none>
Node:               192.168.148.139/192.168.148.139     IP地址
Start Time:         Sat, 10 Oct 2020 11:36:29 +0800
Labels:             pod-template-hash=7697996758
                    run=nginx
Annotations:        <none>
Status:             Running
IP:                 172.17.57.2     ##pod IP
Controlled By:      ReplicaSet/nginx-7697996758
Containers:
  nginx:
    Container ID:   docker://f12f6ae1202103b81f96113d2d0b71669322ba89b8c5d042e60ebc37702a279c
    Image:          nginx:latest     ##镜像信息
    Image ID:       docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
    Port:           80/TCP      ##端口
    Host Port:      0/TCP
    State:          Running    pod状态
      Started:      Sat, 10 Oct 2020 11:36:45 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-szxtd (ro)
Conditions:
  Type              Status     ##容器状态
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:     ##挂载的数据卷信息
  default-token-szxtd:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-szxtd
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:    ##创建的核心
  Type    Reason     Age   From                      Message
  ----    ------     ----  ----                      -------
##创建过程:1.先经过scheduler调度创建
Normal  Scheduled  18m   default-scheduler         Successfully assigned 
default/nginx-7697996758-b2bk4 to 192.168.148.139    ##调度给139节点
2.下载镜像
Normal  Pulling    18m   kubelet, 192.168.148.139  pulling image "nginx:latest"
3.镜像下载成功
Normal  Pulled     18m   kubelet, 192.168.148.139  Successfully pulled image "nginx:latest"
4.创建容器
 Normal  Created    18m   kubelet, 192.168.148.139  Created container
5.开启容器
 Normal  Started    18m   kubelet, 192.168.148.139  Started container

2.查看deployment资源

[root@master ~]# kubectl describe deployment/nginx
Name:                   nginx
Namespace:              default
CreationTimestamp:      Fri, 09 Oct 2020 17:33:15 +0800
Labels:                 run=nginx
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               run=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx
  Containers:
   nginx:
    Image:        nginx:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-7697996758 (3/3 replicas created)
Events:
  Type    Reason              Age                  From                   Message
  ----    ------              ----                 ----                   -------
  Normal  ScalingReplicaSet   3h47m                deployment-controller  Scaled up replica set nginx-6ff7c89c7c to 1
  Normal  ScalingReplicaSet   3h47m                deployment-controller  Scaled down replica set nginx-7697996758 to 2
  Normal  ScalingReplicaSet   3h47m                deployment-controller  Scaled up replica set nginx-6ff7c89c7c to 2
  Normal  ScalingReplicaSet   3h46m                deployment-controller  Scaled down replica set nginx-7697996758 to 1
  Normal  ScalingReplicaSet   3h46m                deployment-controller  Scaled up replica set nginx-6ff7c89c7c to 3
  Normal  ScalingReplicaSet   3h46m                deployment-controller  Scaled down replica set nginx-7697996758 to 0
  Normal  DeploymentRollback  3h31m                deployment-controller  Rolled back deployment "nginx" to revision 1
  Normal  ScalingReplicaSet   3h31m                deployment-controller  Scaled up replica set nginx-7697996758 to 1
  Normal  ScalingReplicaSet   3h30m                deployment-controller  Scaled up replica set nginx-7697996758 to 2
  Normal  ScalingReplicaSet   3h30m                deployment-controller  Scaled down replica set nginx-6ff7c89c7c to 2
  Normal  ScalingReplicaSet   3h30m (x2 over 21h)  deployment-controller  Scaled up replica set nginx-7697996758 to 3
  Normal  ScalingReplicaSet   3h30m                deployment-controller  Scaled down replica set nginx-6ff7c89c7c to 1
  Normal  ScalingReplicaSet   3h30m                deployment-controller  Scaled down replica set nginx-6ff7c89c7c to 0

3.进入pod

[root@master ~]# kubectl exec -it nginx-7697996758-b2bk4 bash    ##进入nginx资源
root@nginx-7697996758-b2bk4:/# ls 
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var
root@nginx-7697996758-b2bk4:/# exit    ##直接退出
exit
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐