kubectl命令行工具的使用
kubectl create 与 kubectl apply 的区别_cab5的博客-CSDN博客
文章目录
一、概述
Kubectl 是管理k8s集群的命令行工具,通过生成的 json 格式传递给 apiserver 进行创建、查
看、管理的操作。
二、kubectl 语法
2.1、语法格式
可以使用–help来查询语法格式
[ root@localhost bin ]# kubectl --help
kubectl 的语法格式:
kubectl [command] [TYPE] [NAME] [flags]
1、command
指定要在一个或多个资源进行的操作,例如create,apply,get,describe,delete。
2、TYPE
指定资源类型。资源类型不区分大小写,可以指定单数,复数或缩写形式。
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
[root@master1 ~]# kubectl get pods -o wide #查看3个副本所在的node节点
[root@master1 ~]# kubectl get all #查看default空间内的所有资源
删除Pod资源nginx-deployment
[root@master1 ~]# kubectl delete deploy/nginx-deployment
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
这里的NodePort提供了一个负载均衡,也就是所有node节点的48656端口都可访问nginx-service。
//查看网络状态详细信息
[root@master1 ~]# kubectl get pods -o wide
或者查看后端提供负载均衡的节点
[root@master1 ~]# kubectl get endpoints
- kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式。所以所有的node节点都可安装ipvsadmin工具,用于查看负载均衡的服务端口
[root@node1 ~]# ipvsadm -L -n
[root@node2 ~]# ipvsadm -L -n
- 在node1和node2节点上查看都有LVS负载均衡功能,说明服务发布成功!通过任意node节点:端口48656都可以访问。
在master节点查看Pod资源的日志
[root@master1 ~]# kubectl get pods
接下来用浏览器访问Pod资源,然后在查看相对应的日志内容。
3.1.3、更新nginx 为1.14版本
首先在谷歌浏览器中打开开发者选项—>F5刷新访问—>找到network-- ->点击name —>找到headers头部信息,就可以看到nginx版本信息。
在master1节点上
//通过set命令来获取更新的修改模板
[root@master1 ~]# kubectl set --help
//更新nginx为1.14版本
[root@master1 ~]# kubectl set image deployment/nginx nginx=nginx:1.14
//处于动态监听状态
[root@master1 ~]# kubectl get pods -w
更新过程中变化:
1、容器资源更新过程中不能重启
2、容器更新是先创建一个新的容器,再删除一个原有的容器,完成更新。
3、更新过程中保证副本数量是3个
这个时候再次刷新并查看浏览器的nginx版本
3.1.4、业务回滚上一个版本
如果业务更新完,大量用户访问出现error问题,那么就要业务回滚上一个版本。
#查看历史版本
[root@master1 ~]# kubectl rollout history deployment/nginx
#执行回滚到上一次版本
[root@master1 ~]# kubectl rollout undo deployment/nginx
#检查回滚状态
[root@master1 ~]# kubectl rollout status deployment/nginx
//再次查看历史版本,在浏览器中刷新查看版本
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
2、删除nginx的 service资源
[root@master1 ~]# kubectl get svc
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