kubernetes集群管理-------kubectl命令行工具的使用

文章目录

    • 一、概述
    • 二、kubectl 语法
      • 2.1、语法格式
      • 2.2、commond命令详情了解
    • 三、命令的使用
      • 3.1、项目的生命周期
        • 3.1.1、创建nginx的Pod资源
        • 3.1.2、发布nginx service提供LVS负载均衡的功能
        • 3.1.3、更新nginx 为1.14版本
        • 3.1.4、业务回滚上一个版本
        • 3.1.5、删除业务
      • 3.2、其他的命令

一、概述

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

二、kubectl 语法

2.1、语法格式

可以使用–help来查询语法格式

[ root@localhost bin ]# kubectl --help

kubernetes集群管理-------kubectl命令行工具的使用_第1张图片
kubectl 的语法格式:

kubectl [command] [TYPE] [NAME] [flags]

1、command

指定要在一个或多个资源进行的操作,例如create,apply,get,describe,delete。

2、TYPE

指定资源类型。资源类型不区分大小写,可以指定单数,复数或缩写形式。
kubernetes集群管理-------kubectl命令行工具的使用_第2张图片
3、NAME

  • 注意点:

名称有大小写的区分。
如果省略名称,则显示所有资源的详细信息,如“kubectl get pods”。
在对多个资源执行操作时,我们可以按类型和名称指定每个资源,或指定一个或多个文件

  • 要按类型和名称指定资源:

  • 如果资源类型相同,则对资源进行分组

例:

kubectl get pod example-pod1 example-pod2
  • 分别指定多种资源类型

例:

kubectl get pod/example-pod1 replicationcontroller/example-rc1
  • 要使用一个或多个文件指定资源
-f file1 -f file2 -f file<#>
//注意使用YAML而不是JSON格式的文件,因为YAML往往更加用户友好,特别是对于配置文件。

例:
kubectl get pod -f ./pod.yaml

4、flags

指定的可选标志,不过值得注意的是,使用命令行指定参数会覆盖默认值以及相关的环境变量。
例如,我们可以使用-s或–server标志来指定Kubernetes API服务器的地址和端口。

2.2、commond命令详情了解

  • 基础命令:
类型 命令 描述
基础命令 create 通过文件名或标准输入创建资源
expose 将一个资源公开为一个新的Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征
get 显示一个或多个资源
explain 查看资源的文档
edit 在服务器上编辑一个资源
delete 通过文件名、标准输入、资源名称或标签选择器来删除资源
  • 部署命令:
类型 命令 描述
部署命令 rollout 管理资源的发布
scale 为Deployment,ReplicaSet,Replication Controller 或 Job设置一个新的副本数量
autoscale 自动调整一个Deployment,ReplicaSet,Replication Controller 或 Job的副本数量
  • 集群管理命令:
类型 命令 描述
集群管理命令 certificate 修改证书资源
cluster-info 显示集群信息
top 显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon 标记节点不可调度
uncordon 标记节点可调度
drain 驱逐节点上的应用,准备下线维护
taint 更新一个或多个node上的taint标记
  • 调试命令:
类型 命令 描述
调试命令 describe 显示指定资源或资源组的详细信息
logs 在一个Pod中打印一个容器日志。如果Pod只有一个容器, 容器名称是可选的
attach 附加到一个运行的容器
exec 执行命令到容器
port-forward 转发一个或多个本地端口到一个pod
proxy 运行一个proxy到KubemetesAPIserver
cp 拷贝文件或目录到容器中
auth 检查授权

三、命令的使用

#常用语法:
kubectl run NAME --image=image [--env="key=value"参数] [--port=port端口] [--replicas=replicas副本集] [--dry-run=bool状态] [--overrides=inline-json] [--command命令] -- [COMMAND] [args...] [options]`

例1:

//根据上面的格式创建一个名字为nginx-deployment 的资源Pod,镜像是nginx,端口是80,有三个副本数量。

[root@master1 ~]# 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@master1 ~]# kubectl get pods   #查看刚刚创建的Pod资源
NAME                                READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-r9gp4               1/1     Running   1          12h
nginx-deployment-5477945587-4rvlq   1/1     Running   0          2m53s
nginx-deployment-5477945587-kd9m8   1/1     Running   0          2m53s
nginx-deployment-5477945587-zsv7l   1/1     Running   0          2m53s

kubernetes集群管理-------kubectl命令行工具的使用_第3张图片

[root@master1 ~]# kubectl get pods -o wide   #查看3个副本所在的node节点

kubernetes集群管理-------kubectl命令行工具的使用_第4张图片

[root@master1 ~]# kubectl get all    #查看default空间内的所有资源

kubernetes集群管理-------kubectl命令行工具的使用_第5张图片
删除Pod资源nginx-deployment

[root@master1 ~]# kubectl delete deploy/nginx-deployment

kubernetes集群管理-------kubectl命令行工具的使用_第6张图片

3.1、项目的生命周期

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

3.1.1、创建nginx的Pod资源

[root@master1 ~]# kubectl run nginx --image=nginx:latest --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 created

[root@master1 ~]# kubectl get pods,deployment,replicaset
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7697996758-2cm9d   1/1     Running   0          2m54s
pod/nginx-7697996758-2vbqs   1/1     Running   0          2m54s
pod/nginx-7697996758-kst46   1/1     Running   0          2m54s

NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/nginx   3         3         3            3           2m54s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.extensions/nginx-7697996758   3         3         3       2m54s

//创建Pod资源的同时也创建了3个控制器和3个副本集

3.1.2、发布nginx service提供LVS负载均衡的功能

#常用语法:
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]

[root@master1 ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

kubernetes集群管理-------kubectl命令行工具的使用_第7张图片
这里的NodePort提供了一个负载均衡,也就是所有node节点的48656端口都可访问nginx-service。

//查看网络状态详细信息
[root@master1 ~]# kubectl get pods -o wide

在这里插入图片描述
或者查看后端提供负载均衡的节点

[root@master1 ~]# kubectl get endpoints

kubernetes集群管理-------kubectl命令行工具的使用_第8张图片

  • kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式。所以所有的node节点都可安装ipvsadmin工具,用于查看负载均衡的服务端口
    kubernetes集群管理-------kubectl命令行工具的使用_第9张图片
[root@node1 ~]# ipvsadm -L -n
[root@node2 ~]# ipvsadm -L -n
  • 在node1和node2节点上查看都有LVS负载均衡功能,说明服务发布成功!通过任意node节点:端口48656都可以访问。
    kubernetes集群管理-------kubectl命令行工具的使用_第10张图片
    kubernetes集群管理-------kubectl命令行工具的使用_第11张图片

在master节点查看Pod资源的日志

[root@master1 ~]# kubectl get pods

kubernetes集群管理-------kubectl命令行工具的使用_第12张图片
接下来用浏览器访问Pod资源,然后在查看相对应的日志内容。
kubernetes集群管理-------kubectl命令行工具的使用_第13张图片
kubernetes集群管理-------kubectl命令行工具的使用_第14张图片
kubernetes集群管理-------kubectl命令行工具的使用_第15张图片

3.1.3、更新nginx 为1.14版本

首先在谷歌浏览器中打开开发者选项—>F5刷新访问—>找到network-- ->点击name —>找到headers头部信息,就可以看到nginx版本信息。
kubernetes集群管理-------kubectl命令行工具的使用_第16张图片
在master1节点上

//通过set命令来获取更新的修改模板

[root@master1 ~]# kubectl set --help

kubernetes集群管理-------kubectl命令行工具的使用_第17张图片

//更新nginx为1.14版本
[root@master1 ~]# kubectl set image deployment/nginx nginx=nginx:1.14

//处于动态监听状态
[root@master1 ~]# kubectl get pods -w  

kubernetes集群管理-------kubectl命令行工具的使用_第18张图片
更新过程中变化:

1、容器资源更新过程中不能重启

2、容器更新是先创建一个新的容器,再删除一个原有的容器,完成更新。

3、更新过程中保证副本数量是3个

这个时候再次刷新并查看浏览器的nginx版本
kubernetes集群管理-------kubectl命令行工具的使用_第19张图片

3.1.4、业务回滚上一个版本

如果业务更新完,大量用户访问出现error问题,那么就要业务回滚上一个版本。

#查看历史版本
[root@master1 ~]# kubectl rollout history deployment/nginx

kubernetes集群管理-------kubectl命令行工具的使用_第20张图片

#执行回滚到上一次版本
[root@master1 ~]# kubectl rollout undo deployment/nginx

#检查回滚状态
[root@master1 ~]# kubectl rollout status deployment/nginx

kubernetes集群管理-------kubectl命令行工具的使用_第21张图片
//再次查看历史版本,在浏览器中刷新查看版本
kubernetes集群管理-------kubectl命令行工具的使用_第22张图片
kubernetes集群管理-------kubectl命令行工具的使用_第23张图片

3.1.5、删除业务

查看deployment资源的名称

[root@master1 ~]# kubectl get deployment
NAME    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx   3         3         3            3           164m

1、删除nginx项目的 deployment资源

[root@master1 ~]# kubectl delete deployment/nginx

kubernetes集群管理-------kubectl命令行工具的使用_第24张图片
2、删除nginx的 service资源

[root@master1 ~]# kubectl get svc

kubernetes集群管理-------kubectl命令行工具的使用_第25张图片

3.2、其他的命令

  • 1、查看具体资源的详细信息
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) Pod资源名称

例:查看deployment资源的详细信息

kubectl describe deployment/nginx
  • 2、进入相应pod中
kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
  • 3、查看生成的YAML格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml
  • 4、查看生成的JSON格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
  • 5、生成YAML 、 JSON文件导出
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json(yaml) > test.json(yaml)
  • 6、将现有资源进行导出
kubectl get svc/nginx-svc --export -o yaml > nginx-svc.yaml
  • 7、测试命令正确性,不执行(类似shell脚本中的sh -n)
kubectl run nginx --image=nginx --port=80 --replicas=2 --dry-run

你可能感兴趣的:(Kubernetes自学)