文章目录
一、概述
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
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]`
[root@localhost ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-lbkts 1/1 Running 0 30h
nginx-deploy-8c5fc574c-c9hhs 1/1 Running 0 25h
nginx-deploy-8c5fc574c-l958w 0/1 ContainerCreating 0 25h
nginx-deploy-8c5fc574c-r8s4x 0/1 ContainerCreating 0 25h
#ContainerCreating正在创建
[root@localhost ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-dbddb74b8-lbkts 1/1 Running 0 30h
nginx-deploy-8c5fc574c-c9hhs 1/1 Running 0 25h
nginx-deploy-8c5fc574c-l958w 1/1 Running 0 25h
nginx-deploy-8c5fc574c-r8s4x 1/1 Running 0 25h
[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、项目的生命周期
创建->发布->更新->回滚->删除
[root@localhost ~]# 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@localhost ~]# kubectl get pods,deployment,replicaset
NAME READY STATUS RESTARTS AGE
pod/nginx-7697996758-dx2j2 1/1 Running 0 25h
pod/nginx-7697996758-gxbrz 1/1 Running 0 25h
pod/nginx-7697996758-mpzcr 1/1 Running 0 25h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx 3 3 3 3 101s
NAME DESIRED CURRENT READY AGE
replicaset.extensions/nginx-7697996758 3 3 3 25h
#创建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工具,用于查看负载均衡的服务端口
在node1和node2节点上查看都有LVS负载均衡功能,说明服务发布成功!通过任意node节点:端口47308都可以访问。
接下来用浏览器访问Pod资源,然后在查看相对应的日志内容。
访问地址为docker0
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 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
[root@master1 ~]# kubectl delete svc/
3.2、其他的命令
1、查看具体资源的详细信息
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) Po
例:查看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