Kubernetes 命令参考手册
简介
创建类命令
- run 创建新的deployment并在一个或者多个pod中运行容器
- expose 创建新的service,用于跨pod的流量负载
-
autoscale: 创建新的自动缩放器对象以自动水平缩放控制器,例如:deployment
-
create -f
创建对象
deployment 创建类
# kubectl create -f cloud.yaml
# kubectl
service 创建类
kubectl create -f service.yaml
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
* kubectl create service -o yaml --dry-run 创建服务的配置,不是发送到Kubernetes API,而是打印到标准输出。
* kubectl set selector --local -f - -o yaml 从标准输入流获取,并以yaml形式写到标准输出
* kubectl create -f - 通过标准输入提供的配置,创建对象
删除类命令
- delete -f
删除对象
删除deployments
kubectl delete deployment cloud-deployment -n kube-system
强制删除pod
kubectl delete pod nginx-87p3oiou8934 --grace-period=0 --force -n kube-system
备注:
资源可能不会释放,删除前确定资源情况,手工清理遗留资源
修改类命令
- scale 通过更新控制器的副本计数水平缩放控制器以添加或删除pod
- annotate 从对象中添加或删除批注
- label 从对象中添加或者删除标签
-
set 设置对象的方面
-
edit:通过在编辑器中打开活动对象的配置,直接编辑其原始配置。
-
patch:使用修补程序字符串直接修改活动对象的特定字段。
-
replace -f
node
- 使节点处于维护状态,不可调度
kubectl cordon $NODENAME
- 使节点从维护状态恢复
kubectl uncordon $NODENAME
备注: 可以使节点暂时不可用,不能被调度
- 驱逐节点上的pod
kubectl drain ${NODENAME} --force --delete-local-data --ignore-daemonsets
备注:
delete-local-data:
- 更新镜像
kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
或者简化我:
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 --record
将镜像更新为新的:1.9.1版本
- 给节点打标签
kubectl label nodes <node-name> <label-key>=<label-value>
样例:
kubectl label nodes kubernetes-foo-node-1.c.a-robinson.internal disktype=ssd
备注:
kubernetes-foo-node-1.c.a-robinson.internal: node的名字
disktype:标签键
ssd:标签值
- 将deployment回滚到上一个版本
kubectl rollout undo deployment nginx-deployment
- 将deployment回滚到指定版本
kubectl rollout undo deployment nginx-deployment --to-revision=2
查询类命令
- get:(get -f
-o yaml) 打印有关匹配对象的基本信息。使用get-h查看选项列表 - describe:打印有关匹配对象的聚合详细信息
- logs:为运行在Pod中的容器打印stdout和stderr
node
- 节点详情查询
kubectl describe node <insert-node-name-here>
- 查看节点标签
kubectl get nodes --show-labels
namespace
kubectl get namespace
- 查看位于命名空间中的资源
kubectl api-resources --namespaced=true
- 查看不在任何命名空间中的资源
kubectl api-resources --namespaced=false
rs
- 查询ReplicaSet
kubectl get rs
- 检查rs状态
kubectl describe rs/frontend
备注:frontend为rs的名字
pod
- 查看pod的ReplicaSet
kubectl get pods frontend-9si5l -o yaml
备注:ownerReferences段显示此pod属于哪个ReplicaSet
- 查看pod的label
kubectl get pods --show-labels
- 格式化输出pod信息(yaml)
kubectl get pod cloud-test-7affgg87wx-9kfxk -o yaml
- 过滤输出pod的字段
# 获取cloud命名空间中第一个pod的metadata信息
kubectl get pod -n cloud -o jsonpath='{.items[0].metadata}'
# 获取cloud命名空间中第三个pod的宿主机IP
kubectl get pod -n cloud -o jsonpath='{.items[2].status.hostIP}'
# 获取cloud命名空间中所有pod的宿主机IP
kubectl get pod -n cloud -o jsonpath='{.items[*].status.hostIP}'
# 获取所有节点的IP地址及在k8s中的主机名
kubectl get node -o jsonpath='{.items[*].status.addresses[*].address}'
# 获取所有节点的IP地址
kubectl get node -o jsonpath='{.items[*].status.addresses[0].address}'
备注:如果字段是map类型,则必须用[]才能获取下级信息
# 获取 ports 中所有 protocol 是 TCP 的 name
kubectl get svc kube-dns -n kube-system -o jsonpath='{$.spec.ports[?(@.name=="metrics")].port}'
解释:@ 符号代表当前对象,?() 原文是 filter 理解为过滤,() 中写条件
endpoints
- 查看所有命名空间的endpoints
# kubectl get ep --all-namespaces
hpa
- 查看hpa
# kubectl get hpa
- 查看hpa详情
# kubectl get hpa istio-ingressgateway -n istio-system -o json
deployment
- 查看deployment
kubectl get deployment --all-namespaces
展开字段说明:
* NAME: cluster中deployment的名字
* DESIRED: 应用期望的replicas数量
* CURRENT: 当前已经正常运行的replicas数量
* UP-TO-DATE: 已经更新为期望状态的replicas的数量
* AVAILABLE: 显示可供用户使用的应用程序副本的数量
* AGE: 应用运行总时长
- 查看deployment的操作历史
kubectl rollout status deployment.v1.apps/nginx-deloyment
- 查看各个操作历史的详情(此处查看编号为:2的操作详情)
kubectl rollout history deployment/nginx-deployment --revision=2
- 查看deployment的详细状态
kubectl describe deployments
- 查看未知和凭证
kubectl config view
- 获取集群内置的一些服务(位于kube-system命名空间
kubectl cluster-info
events
- 查看events
kubectl get events
通过代理方式访问服务
http://kubernetes_master_address/api/v1/namespaces/{namespace_name}/services/{service_name}[:port_name]/proxy
* <service_name> - 代理到默认端口proxies to the default or unnamed port using http
* <service_name>:<port_name> - 代理到指定的端口proxies to the specified port using http
* https:<service_name>: - 代理到默认端口proxies to the default or unnamed port using https (note the trailing colon)
* https:<service_name>:<port_name> - 代理到指定的端口
其他类操作
- 可以永久保存该上下文中所有后续kubectl命令的命名空间
kubectl config set-context --current --namespace=kube-system
备注:验证
kubectl config view --minify |grep namespace:
获取k8s元数据
- 查看etcd的启动命令
ps -ef |grep etcd
/usr/local/bin/etcd --name=master1.smx-dev-k8s.smx.com --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem --peer-cert-file=/etc/etcd/ssl/etcd.pem --peer-key-file=/etc/etcd/ssl/etcd-key.pem --trusted-ca-file=/etc/kubernetes/ssl/ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem --initial-advertise-peer-urls=https://10.0.133.211:2380 --listen-peer-urls=https://10.0.133.211:2380 --listen-client-urls=https://10.0.133.211:2379,http://127.0.0.1:2379 --advertise-client-urls=https://10.0.133.211:2379 --initial-cluster-token=etcd-cluster-0 --initial-cluster=master3.smx-dev-k8s.smx.com=https://10.0.133.213:2380,master2.smx-dev-k8s.smx.com=https://10.0.133.212:2380,master1.smx-dev-k8s.smx.com=https://10.0.133.211:2380 --initial-cluster-state=new --data-dir=/var/lib/etcd
-
截取其中的:--trusted-ca-file=/etc/kubernetes/ssl/ca.pem 修改为:--cacert=/etc/kubernetes/ssl/ca.pem
-
设置etcdctl版本
export ETCDCTL_API=3
- 执行如下命令获取etcd中的信息,只查询key,不反会数据
etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --endpoints https://10.0.133.211:2379 get / --prefix --keys-only
- 获取指定前缀的key及对应的数据
etcdctl --cacert=/etc/kubernetes/ssl/ca.pem --endpoints https://10.0.133.211:2379 get /registry/leases/ --prefix
istio设置
- 设置禁止istio自动注入
kubectl label namespace yunpingtai istio-injection=disabled
- 查看namespace设置自动注入状况
kubectl get namespace -L istio-injection