开源项目kube-shell可以为kubectl提供自动的命令提示和补全
,使用起来特别方便。
Kube-shell有以下特性:
命令提示
,给出命令的使用说明
自动补全
,列出可选命令并可以通过tab键自动补全,支持模糊搜索
高亮
使用tab键可以列出可选的对象
vim
模式
安装方式
Mac下安装
apt-get update
apt-get install bash-completion
或
yum install bash-completion
#然后source一下
source <(kubectl completion bash)
或者加入
vim /etc/profile
source <(kubectl completion bash)
保存后重启终端即可生效。
Kubernetes中存在三种安全认证方式:
kubectl通过读取 kubeconfig 文件中的配置信息在向API server发送请求的时候同时传递认证信息,同时支持CA证书和bearer token的认证方式,请参考使用kubeconfig文件配置跨集群认证。
kubernetes 中所有支持的类型和缩写
的别名
用着条命令可以查看到
kubectl api-resources
# 获取节点和服务版本信息
kubectl get nodes
# 获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide
# 获取pod信息,默认是default名称空间
kubectl get pod
# 获取pod信息,默认是default名称空间,并查看附加信息【如:pod的IP及在哪个节点运行】
kubectl get pod -o wide
# 获取指定名称空间的pod
kubectl get pod -n kube-system
# 获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName
# 获取所有名称空间的pod
kubectl get pod -A
# 查看pod的详细信息,以yaml格式或json格式显示
kubectl get pods -o yaml
kubectl get pods -o json
# 查看pod的标签信息
kubectl get pod -A --show-labels
# 根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"
# 查看运行pod的环境变量
kubectl exec podName env
# 查看指定pod的日志
kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master
# 查看所有名称空间的service信息
kubectl get svc -A
# 查看指定名称空间的service信息
kubectl get svc -n kube-system
# 查看componentstatuses信息
kubectl get cs
# 查看所有configmaps信息
kubectl get cm -A
# 查看所有serviceaccounts信息
kubectl get sa -A
# 查看所有daemonsets信息
kubectl get ds -A
# 查看所有deployments信息
kubectl get deploy -A
# 查看所有replicasets信息
kubectl get rs -A
# 查看所有statefulsets信息
kubectl get sts -A
# 查看所有jobs信息
kubectl get jobs -A
# 查看所有ingresses信息
kubectl get ing -A
# 查看有哪些名称空间
kubectl get ns
# 查看pod的描述信息
kubectl describe pod podName
kubectl describe pod -n kube-system kube-apiserver-k8s-master
# 查看指定名称空间中指定deploy的描述信息
kubectl describe deploy -n kube-system coredns
# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod
# 查看集群信息
kubectl cluster-info 或 kubectl cluster-info dump
# 查看各组件信息【172.16.1.110为master机器】
kubectl -s https://172.16.1.110:6443 get componentstatuses
kubectl create namespace namespace-name
kubectl get namespace
kubectl delete pod |service | namespace 名称
kubectl delete pod -n namespace --all 删除该namespace所有的pod
批量删除
kubectl get pod -A |grep 0/1 |awk '{print "kubectl delete pod -n"$1,$2" --grace-period=0 --force"}'
强制删除
kubectl delete po -n --force --grace-period=0
一般用于查看
动态编辑资源配置,会直接生效
kubectl get service
kubectl edit service 名称
看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
kubectl get svc
kubectl get svc -n kube-system
kubectl edit pod -n 资源Namespace pod名称
删除pod
kubectl get pod -A |grep c87e2267-1001-4c70-bb2a-ab41f3b81aa3 |grep -v NAME |awk '{print "kubectl delete pod -n "$1,$2}'
kubectl get node | service |namespace |pod
kubectl get pod -o
-o json 格式
-o yaml 格式
-o wide 显示的更详细
-A 查看所有信息
kubectl get pod -o wide
kubectl get pod -A 查看一个namespace中所有pod信息
# 列出所有 namespace 中的所有 pod
kubectl get pods --all-namespaces
如果出错可以用describe
kubectl get pod -o wide
kubectl describe pod 名称 -n default
如果还查不到
到宿主机查看系统日志
在那个宿主机
kubectl get pod -o wide
查看日志
vim /var/log/syslog
kubectl get pod
kubectl logs
kubectl logs 名称 bash -n default
可以进入到所有k8s的pod
kubectl get pod
kubectl exec -it 名称
# 进入nginx容器,执行一些命令操作
kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash
kubectl explain pod
kubectl explain pod.apiVersion
kubectl explain pod.kind
#控制器
kubectl explain deployment.spec.templete
启动一个 nginx 实例
kubectl run nginx --image=nginx
给node标记label,实现pod与node亲和性
pod只创建在指定的node上
kubectl lable --help
对node打
kubectl get node
kubectl describe node 名称
kubectl lable node 名称 group-qcq
create,后期不支持对资源进行修改
后期如果修改了yaml文件相声小,那么只能删除之前的资源重新create
kubectl delete -f file.yaml
改yaml
kubectl create -f file.yaml
apply,支持对资源进行修改,支持回滚:历史版本记录
kubectl apply -f file.yaml
kubectl top node
kubectl cluster-info
警戒线,标记node不被调度
也就是让master,或者业务机不跑容器
master时负责pod调度的
kubectl cordon --help
kubectl cordon 节点
然后用,查看
kubectl get node
STATUS会出现SchedulingDisabled不参与调度2
取消警戒标记为cordon的node
kubectl uncordon 节点
驱逐node上的pod
,用户node下线等场景
node挂掉
kubectl get node
kubectl drain 节点
#强制性驱逐
kubectl drain 节点 --ignore-daemonsets --force
最后就没有pod
kubectl get node
通常用删除该节点上的所有Pod(DaemonSet除外),在其他node上重新启动它们
,直接使用该命令会自动调用 kubectl cordon 命令。当该节点维护完成,
启动了kubelet后,再使用 kubectl uncordon 即可将该节点添加到kubernetes集群中。
给node标记污点,实现反亲pod与node反亲和性
除了标记的,其他都使用
(去污点)设置可调度:
kubectl taint node k8s-master node-role.kubernetes.io/master-
设置不可调度
kubectl taint node k8s-master node-role.kubernetes.io/master="":NoSchedule
二、计算节点:
设置节点不可调度:kubectl cordon
设置节点可调度:kubectl uncordon
kubectl version 查看版本
kubectl api-resources 查看资源信息,, 简写,kind类型
kubectl api-versions 查看api版本
kubectl config
kubectl scale deployment -n linux tomcat-app1-deployment --replicas=3
将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3。
kubectl scale --replicas=3 -f foo.yaml
如果当前副本数为2,则将其扩展至3。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
设置多个RC中Pod副本数量。
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
水平自动伸缩
指定Deployment、ReplicaSet或ReplicationController
,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。
使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间。
kubectl autoscale deployment foo --min=2 --max=10
使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%。
--cpu-percent=-1 默认
kubectl autoscale rc foo --max=5 --cpu-percent=80
可以通过设置 .spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revision 历史记录。默认的会保留所有的 revision;如果将该项设置为 0,Deployment 就不允许回退了
# 查看(当前名字空间)所有 deployments 的历史版本
kubectl rollout history deploy
# 查看指定 deployment 的所有历史版本
kubectl rollout history deploy <deployment-name>
# 回退(当前名字空间)所有的 deployments
kubectl rollout undo deploy
# 回到上一个版本
kubectl rollout undo deployment/nginx-deployment
# 查看当前的更新状态
# 如果 rollout 成功完成, 该命令将返回一个 0 值的 Exit Code
kubectl rollout status deployments/nginx-deployment
# echo $? # 输出 0
# 查看当前版本(自定义 Pod 的输出)
kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image
# 通过该命令查看更新历史记录,Pod 模板被修改就会创建一个 revision
kubectl rollout history deployment/nginx-deploy
# 查询结果,创建 Deployment 时加上 --record 才会显示CHANGE-CAUSE
# REVISION CHANGE-CAUSE
# 1 kubectl apply --filename=deployment.yaml --record=true
# 2 kubectl apply --filename=deployment.yaml --record=true
# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=1
# 暂停 deployment 的更新
kubectl rollout pause deployment/nginx-deployment
# 临时运行一个 pod/deployment
1. 创建一个 nginx pod,并同时为其创建一个 service(ClusterIp)
暴露出 80 端口,targetPort 默认和 port 一致
kubectl run nginx --image=nginx --expose=true --port=80 --generator=run-pod/v1
效果等同上面 run 命令的 --expose=true --port=80,
只是这边的 targetPort 和 port 可以不一致
kubectl expose pod nginx --port=80 --target-port=80
显示合并后的 kubeconfig 配置
kubectl config view
获取 e2e 用户的密码
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
显示当前的上下文
kubectl config current-context
设置默认上下文为 my-cluster-name
kubectl config use-context my-cluster-name
向 kubeconf 中增加支持基本认证的新集群
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
使用指定的用户名和 namespace 设置上下文
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
创建文件
kubectl exec test-pd -c test2-container -it -- touch /test/index.html
查看文件
kubectl exec test-pd -c test-container -it -- ls /cache
kubectl exec test-pd -c test-container -it -- cat /cache/index.html
查看pod的标签信息
kubectl get pod -A --show-labels
根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"
查看运行pod的环境变量
kubectl exec podName env
查看各组件信息【172.16.1.110为master机器】
kubectl -s https://172.16.1.110:6443 get componentstatuses