k8s命令
K8S节点重启
systemctl restart docker && systemctl restart kubelet && systemctl restart kube-proxy
服务状态
kubectl get pod -n 命名空间 -o wide| grep &
获取服务镜像号
方法一
kubectl describe pod `kubectl get pod -n 命名空间 -o wide| grep &` -n 命名空间 | grep &
方法二
kubectl describe deployments 服务名 -n 命名空间 | grep &
批量获取服务镜像号
kubectl get deployment -o wide -n bt-tsp-middle-platform | awk -F &
查看服务日志
kubectl logs `kubectl get pod -n 命名空间 -o wide| grep &` -n 命名空间 | grep error -i
查看异常的pod节点
kubectl get pods -n <名称空间> | grep -v Running
查看异常pod节点的日志
kubectl describe pod <pod名称> -n <名称空间>
创建资源
通过文件或者命令创建
kubectl create -f ./nginx.yaml
#创建+更新,可以重复使用(常用)
kubectl apply -f xxx.yaml
创建当前目录下的所有yaml资源
使用多个文件创建资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml
通过文件创建一个Deployment
kubectl create -f /path/to/deployment.yaml
cat /path/to/deployment.yaml | kubectl create -f -
使用目录下的所有清单文件来创建资源
使用 url 来创建资源
kubectl create -f https://git.io/vPieo
创建带有终端的pod
kubectl run -i --tty busybox --image=busybox
启动一个 redis/nginx实例
kubectl run nginx --image=nginx
kubectl run nginx --image=redis
启动多个pod
kubectl run mybusybox --image=busybox --replicas=5
通过kubectl命令直接创建
kubectl run nginx_app --image=nginx:1.9.1 --replicas=3
获取 pod 和 svc 的文档
删除
根据label删除:
kubectl delete pod -l app=flannel -n kube-system
删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete -f ./pod.json
删除名为"baz"的 pod 和名为"foo"的 service
kubectl delete pod,service baz foo
删除具有 name=myLabel 标签的 pod 和 serivce
kubectl delete pods,services -l name=myLabel
删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
kubectl delete pods,services -l name=myLabel --include-uninitialized
删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl -n my-ns delete po,svc --all
强制删除
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force
kubectl delete deployment kubernetes-dashboard --namespace=kube-system
kubectl delete svc kubernetes-dashboard --namespace=kube-system
kubectl delete -f kubernetes-dashboard.yaml
强制替换,删除后重新创建资源。会导致服务中断。
kubectl replace --force -f ./pod.json
更新资源
滚动更新 pod frontend-v1
kubectl rolling-update python-v1 -f python-v2.json
更新资源名称并更新镜像
kubectl rolling-update python-v1 python-v2 --image=image:v2
更新 frontend pod 中的镜像
kubectl rolling-update python --image=image:v2
退出已存在的进行中的滚动更新
kubectl rolling-update python-v1 python-v2 --rollback
基于 stdin 输入的 JSON 替换 pod
cat pod.json | kubectl replace -f -
kubectl replace:使用配置文件来替换资源
kubectl replace -f /path/to/new_nginx_app.yaml
为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000
更新单容器 pod 的镜像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed &
添加标签
kubectl label pods nginx-pod new-label=awesome
添加注解(更新资源的注解)
kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq
自动扩展 deployment “foo”
kubectl autoscale deployment foo --min=2 --max=10
更新资源kubectl patch
使用补丁修改、更新某个资源的字段,比如更新某个node
kubectl patch node/node-0 -p &
kubectl patch -f node-0.json -p &
编辑/更新资源
相当于先用get去获取资源,然后进行更新,最后对更新后的资源进行apply
编辑名为 docker-registry 的 service
kubectl edit svc/docker-registry
使用其它编辑器
KUBE_EDITOR="nano" kubectl edit svc/docker-registry
修改启动参数
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
动态伸缩pod
将foo副本集变成3个
kubectl scale --replicas=3 rs/foo
缩放“foo”中指定的资源。
kubectl scale --replicas=3 -f foo.yaml
将deployment/mysql从2个变成3个
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
变更多个控制器的数量
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
查看变更进度
kubectl rollout status deploy deployment/mysql
label 操作
增加节点lable值 spec.nodeSelector: zone: north 指定pod在哪个节点
kubectl label:添加label值 kubectl label nodes node1 zone=north
增加lable值 key=value
kubectl label pod redis-master-1033017107-q47hh role=master
删除lable值
kubectl label pod redis-master-1033017107-q47hh role-
修改lable值
kubectl label pod redis-master-1033017107-q47hh role=backend –overwrite
滚动升级
配置文件滚动升级
kubectl rolling-update:滚动升级 kubectl rolling-update redis-master -f redis- master-controller-v2.yaml
命令升级
kubectl rolling-update redis-master --image=redis-master:2.0
pod版本回滚
kubectl rolling-update redis-master --image=redis-master:1.0 –rollback
etcdctl 常用操作
检查网络集群健康状态
带有安全认证检查网络集群健康状态
etcdctl --endpoints=https://192.168.71.221:2379 cluster-health
etcdctl member list
etcdctl set /k8s/network/config ‘{ “Network”: “10.1.0.0/16” }’
etcdctl get /k8s/network/config
调度配置
标记 my-node 不可调度
清空 my-node 以待维护
标记 my-node 可调度
kubectl uncordon k8s-node
显示 my-node 的指标度量
kubectl top node k8s-node
将当前集群状态输出到 stdout
kubectl cluster-info dump
将当前集群状态输出到 /path/to/cluster-state
kubectl cluster-info dump --output-directory=/path/to/cluster-state
如果该键和影响的污点(taint)已存在,则使用指定的值替换
kubectl taint nodes foo dedicated=special-user:NoSchedule
查看kubelet进程启动参数
查看日志:
导出配置文件
导出proxy
kubectl get ds -n kube-system -l k8s-app=kube-proxy -o yaml>kube-proxy- ds.yaml
导出kube-dns
kubectl get deployment -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns- dp.yaml
kubectl get services -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns- services.yaml
导出所有 configmap
kubectl get configmap -n kube-system -o wide -o yaml > configmap.yaml
复杂操作命令
删除kube-system下Evicted状态[WU1] 的所有pod
kubectl get pods -n kube-system |grep Evicted| awk ‘{print $1}’|xargs kubectl delete pod -n kube-system
扩展阅读:
kube-system是Kubernetes系统默认的命名空间,其中包含了许多系统的控制器和核心服务,状态主要可以分为以下几种:
1. Running:运行状态,表示该Pod组件正在运行中;
2. Completed:完成状态,表示该组件已经完成了它的任务;
3. CrashLoopBackOff:崩溃循环状态,表示该组件在启动时遇到了错误,并尝试重启;
4. ImagePullBackOff:拉取镜像失败状态,表示该组件无法拉取所需的镜像;
5. ErrImagePull:拉取镜像错误状态,表示该组件无法拉取所需镜像并且已达到重试上限;
6. Pending:挂起状态,表示该组件正在等待资源分配(等待调度);
7. Unknown:未知状态,表示该Pod组件当前的状态无法被确认,如该组件在启动时出现了错误并被误报为成功。
8. Evicted:表示Kubernetes系统已经将一个Pod从其所在的节点上驱逐出去,通常发生在与节点资源不足有关的错误情况下,例如内存、CPU、存储等。Pod被驱逐后,将会停止运行并且不会自动重启,需要手动重启Pod以重新启动应用程序。
9. Succeeded:Pod的所有容器已经成功完成了它们的任务。
10. Failed:Pod的某个容器已经失败。
cordon & uncordon命令
设置是否能够将pod调度到该节点上。
不可调度
当某个节点需要维护时,可以驱逐该节点上的所有pods(会删除节点上的pod,并且自动通过上面命令设置该节点不可调度,然后在其他可用节点重新启动pods)
待其维护完成后,可再设置该节点为可调度
评论