概述
https://kubernetes.io/docs/reference/kubectl/overview/
资源的管理操作可归结为 增、删、改、查四种,kubectl 针对此中情况提供了命令,如 create、delete、patch、apply、replace、edit、get等,其中有些工具必须是基于清单来进行,如apply和replace命令,有些既可以是清单,也可以是实时作用于活动资源之上,如 create、get、patch 和 delete 等
kubectl 命令能读取任何以.yaml 、 .yml 或 .json 为后缀的文件,kubectl 的多数命令支持使用”-f”选项指定使用的清单文件路径或URL,也可以是存储有清单文件的目录。同一命令中可以重复使用多次,如果在指定的目录路径存在子目录时,可按需使用-R选项以递归的方式获取子目录中的配置清单
其提供了基于命令行访问kubernetes API 的简介方式,能够满足对kubernetes的绝大部分操作需求。
语法 :
kubectl [command] [TYPE] [NAME] [flags]
语法解析详情请参考 :http://docs.kubernetes.org.cn/683.html
1 command : 对资源执行响应操作的子命令,如get(获取资源简要信息),create(根据资源清单创建资源)、delete(删除资源),run(启动运行资源)
2 TYPE: 要操作的资源对象类型,如 pods,services等,
3 NAME:对象名称,区分大小写,如果省略,则表示指定TYPE中的所有资源,也可”TYPE/NAME” 的格式来表示资源对象
4 flags:命令行选项,如”-s” 或 “—server
安装
官方安装教程https://kubernetes.io/docs/tasks/tools/install-kubectl/
二进制安装
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
如果下载失败可以选择https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#client-binaries-3
选择 Client Binaries 也就是所谓的kubectl,会出现如下下载地址信息
增加执行权限
chmod +x ./kubectl
放置到/usr/local/bin目录下
sudo mv ./kubectl /usr/local/bin/kubectl
测试安装结果
$kubectl version --client
查看集群信息
$kubectl cluster-info
环境变量配置
默认设置在~/.kube/config
自定义设置
1、目录:/home/user/kubectl
2、配置文件 名叫做config
3、然后编辑 ~/.bash_profile 把上述文件加入到环境变量中
KUBECONFIG=/home/user/kubectl/config
然后执行 source ~/.bash_profile
基础入门
命令 | 说明 |
---|---|
create | 通过配置文件或者命令行创建资源 |
expose | 使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes Service |
run | 在集群中运行一个指定的镜像 |
set | 为 objects 设置一个指定的特征 |
create
命令参数
Available Commands:
clusterrole Create a ClusterRole.
clusterrolebinding 为一个指定的 ClusterRole 创建一个 ClusterRoleBinding
configmap 从本地 file, directory 或者 literal value 创建一个 configmap
cronjob Create a cronjob with the specified name.
deployment Create a deployment with the specified name.
ingress Create an ingress with the specified name.
job Create a job with the specified name.
namespace 创建一个指定名称的 namespace
poddisruptionbudget 创建一个指定名称的 pod disruption budget.
priorityclass Create a priorityclass with the specified name.
quota 创建一个指定名称的 quota.
role Create a role with single rule.
rolebinding 为一个指定的 Role 或者 ClusterRole创建一个 RoleBinding
secret 使用指定的 subcommand 创建一个 secret
service 使用指定的 subcommand 创建一个 service.
serviceaccount 创建一个指定名称的 service account
命令格式
kubectl create deployment NAME --image=image -- [COMMAND] [args...] [options]
eg
kubectl create deployment my-nginx --image=nginx:1.14 --replicas=3 --port=80
deployment.apps/my-nginx created
查看
$ kubectl get pod,deploy
NAME READY STATUS RESTARTS AGE
pod/my-nginx-556b5b998-2ps9s 1/1 Running 0 60s
pod/my-nginx-556b5b998-f5psp 1/1 Running 0 60s
pod/my-nginx-556b5b998-mg5wv 1/1 Running 0 60s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx 3/3 3 3 60s
expose
命令格式
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]
eg:
kubectl expose deployment my-nginx --name=my-nginx --port=80 --target-port=80 --type=NodePort
service/my-nginx exposed
查看
kubectl get svc |grep my-nginx
my-nginx NodePort 10.96.143.139 <none> 80:31346/TCP 95s
run
验证
kubectl run nginx-deploy --image=nginx:1.14 --port=80 --dry-run=client
pod/nginx-deploy created (dry run)
创建与运行pod
kubectl run nginx --image=nginx:1.14 --port=80
pod/deployment created
进阶命令
命令 | 说明 |
---|---|
explain | 查看资源的文档 |
get | 获取资源 |
edit | 编辑资源 |
delete | 删除资源 |
get
kubectl get +资源类型
获取类型为deployments的资源列表
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 45m
获取类型是pod 的资源列表
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-5f8c6846ff-bjmvp 1/1 Running 21 93d
nginx-app-5f8c6846ff-ccxzs 1/1 Running 21 93d
将服务信息输入yaml格式
$ kubectl get pod nginx-app-5f8c6846ff-bjmvp -o yaml
apiVersion: v1
kind: Pod
metadata:
命令解释:
get
: 查看某个资源-o yaml
: 输出格式为 yaml, 也可以选择 jsonpod/cm
: 想要查看的资源的类型, node 表示节点, cm(configmap) 表示配置文件-n <namespace>
: 查看某个 namespace 下的资源
查看服务
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d14h
nginx-service NodePort 10.104.113.228 <none> 80:32600/TCP 24h
获取类型是node的资源列表
$ kubectl get node
NAME STATUS ROLES AGE VERSION
docker-desktop Ready master 102d v1.18.3
将节点信息输出-o
$ kubectl get node docker-desktop -o yaml
apiVersion: v1
kind: Node
metadata:
annotations:
获取组件运行状态
$ kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
在命令后增加 -A
或 --all-namespaces
可查看所有命名空间对象
$ kubectl get deployments -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
default niginx-deployment 1/1 1 1 8m9s
docker compose 1/1 1 1 232d
docker compose-api 1/1 1 1 232d
kube-system coredns 2/2 2 2 232d
使用参数 -n
可查看指定名称空间的对象
$ kubectl get deployments -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
coredns 2/2 2 2 232d
delete
kubectl delete deployment nginx
# 输出如下
deployment.extensions "nginx" deleted
部署命令
名称 | 说明 |
---|---|
rollout | |
scale | |
autoscal | 自动调整一个 Deployment, ReplicaSet, 或者ReplicationController 的副本数量 |
集群管理
certificate | 修改 certificate 资源. cluster-info 显示集群信息 |
top | 显示 资源 (CPU/Memory/Storage) 使用情况 |
cordon | 标记 node 为 unschedulable |
uncordon | 标记 node 为 schedulable |
drain | Drain node in preparation for maintenance |
taint | 更新一个或者多个 node 上的 taints |
故障定位与调试
describe | 显示一个指定 resource 或者 group 的 resources 详情 |
logs | 输出容器在 pod 中的日志 |
attach | 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 | 权限查看 |
describe
查看pod
$ kubectl descible pod niginx-deployment
logs
查看pod中的容器的打印日志(和命令docker logs 类似)
$ kubectl logs -f nginx-deployment-759fccf44f-lsnnl
kubectl exec
在pod中的容器环境内执行命令,和命令docker exec 类似
$ kubectl exec -it nginx-deployment-759fccf44f-lsnnl /bin/bash
高级命令
diff Diff live version against would-be applied version
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 转换配置文件
kustomize Build a kustomization target from a directory or a remote url.
apply
设置
label | 更新在这个资源上的 labels |
annotate | 更新一个资源的注解 |
completion | Output shell completion code for the specified shell (bash or zsh) |
<br /> <br />
其他
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.
查看主节点信息
$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'
version
version输出 client 和 server 的版本信息
> kubectl version --short=true
Client Version: v1.13.9
Server Version: v1.14.6