1.1、 集群健康
#查看集群信息
kubectl cluster-info
kubectl cluster-info dump
1.2、 组件健康
systemctl status kube-apiserver
systemctl status kubelet
systemctl status kube-proxy
systemctl status kube-scheduler
systemctl status kube-controller-manager
systemctl status docker
2、 资源对象管理
2.1、命令式资源对象管理直接通过命令执行增删改查的操作 除了删除资源外,下面的命令能用apply代替,k8s建议尽量使用apply命令。
Kubectl create deployment my-dep --image=busybox
Kubectl expose rc nginx --port=80 --target-port=8000
Kubectl scale –replicas=3 -f foo.yaml
Kubectl annotate pods foo description=’my frontend’
Kubectl label –overwrite pods foo status=unhealthy
Kubectl delete -f xxx.yaml
Kubectl delete pod,service baz foo
Kubectl delete pods,services -l name=myLabel
Kubectl delete pod foo –-grace-period=0 –force
Kubectl create deployment dp1 –-image=harbor.od.com/nginx:curl
Kubectl expose deployment dp1 –-port=80
或
Kubectl run dp2 --image=nginx:curl –port=80
2.2、声明式资源对象管理
#kubectl apply命令是最能体现对集群资源的声明式管理的命令
#所有对集群的增改操作,都能用apply命令完成,一切取决于后面的配置文件:
#所有配置文件中的资源找集群中不存在,则创建这个资源。
#如果配置文件中的资源在集群中已存在,则根据配置对资源字段进行更新
Grep replicas deployment-goweb.yaml
Replicas:4
kubectl apply -f deployment-goweb.yaml
kubectl get po
#修改为2个
Sed -ri ‘s/4$/2/g’ deployment-goweb.yaml
Grep replicas deployment-goweb.yaml
Replicas:2
Kubectl apply -f deployment-goweb.yaml
Kubectl get po
可以看到,同一个kubectl apply -f deployment-goweb.yaml 命令,可以用来创建资源也可以更新资源。
简单来说,apply命令的作用就是一个:使集群的实际状态朝用户声明的期望状态变化,而用户不用关心具体要进行怎样的增删改操作才能达到这个期望状态,也即kubernetes的声明式资源管理。
Kubectl create -f dashboard-controller.yaml
Kubectl apply -f dashboard-dashboard.yaml
Kubectl delete -f dashboard-dashboard.yaml
2.3、使用dashboard
#token方式登录
#kubeconfig方式登录
3、显示配置
#显示当前kubectl的配置信息
Kubectl config view
Kubectl get po pod-redis -o yaml
Kubectl get po pod-redis -o json
#查看日志
#查看指定镜像的日志
Kubectl logs -f kube-dns-699984412-vzlq6 -n kube-system
Kubectl logs --tail=10 nginx
#指定其中一个查看日志
Kubectl logs kube-dns-699984412 -n5zkz -c kubedns -–namespace=kube-system
Kubectl logs kube-dns-699984412 -vzlq6 -c dnsmasq -–namespace=kube-system
Kubectl logs kube-dns-699984412 -mqb14 -c sidecar –-namespace=kube-system
Journalctl -f
#设置storageclass为默认 Kubectl patch storageclass -p ‘{“metadata”:
{“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’
7、帮助
##kubectl官方命令行工具
#与apiserver通信,将用户输入命令转化为apiserver能识别的信息
#管理k8s各种资源
Kubectl –-version
Kubectl -–help
##kubectl explain命令输出资源对应的属性字段及定义
Kubectl explain deployment.spec.selector
Kubectl explain pod.spec.containers.ports.containerport
1.1、 常规操作
Kubectl create ns app
Kubectl get ns
Kubectl get namespaces
Kubectl delete ns app
1.2、 使用ns
Kubectl get all -n default
Kubectl get all -n kube-system
Kubectl get all -n kube-public
2、 操作node
2.1、查看node
#查看nodes节点
Kubectl get nodes
2.2、隔离与恢复
Kubectl cordon [nodeid] 标记节点不接受调度
Kubectl uncordon [nodeid] 恢复节点可以接收调度
#Node的隔离
Kubectl cordon k8s-node1
#Node的恢复
Kubectl uncordon k8s-node1
2.3、驱逐pod
Kubectl drain [nodeid] 驱赶该节点上运行的所有容器到其他可用节点
2.4、打标签
Kubectl label nodes 10.126.72.31 points=test
3、 操作deployment
3.1、常规操作
Kubectl get deployment -n kube-public
Kubectl create deployment dp1 --image=harbor.od.com/public/nginx:1.7.9 -n kube-public
kubectl run dp2 --image=nginx:1.17.1 --port=80 --namespace dev
kubectl delete deployment dp1 -n kube-public
kubectl describe deployment dp1 -n kube-public
3.2、扩容dp
kubectl scale deployment dp1 --replicas=2 -n kube-public
3.3、暴露服务
kubectl expose deployment dp1 --port=80 -n kube-public
3.5、设置镜像
kubectl set image deploy [deployment-name] [old-image-name]=[new-image-name]为部署设置镜像
3.6、其他pod控制器
kubectl delete rs --all
kubectl delete rc --all
4.1、查询容器
kubectl get pod --all-namespaces
kubectl get pod -n kube-public
kubectl get pod -n kube-public -o wide
kubectl get pods -l app=nginx -o yaml |grep podIP
4.2、删除容器
kubectl delete pods --all
kubectl delete pods,service -l name=
kubectl delete deployment kafka -l --force --grace-period=0
#进入容器
kubectl exec -it nginx-dp-xxx bash -n kube-public
Docker exec -it 530e bash
#退出容器
kubectl exec kube-dns-699984412 -vz1q6 -n kube-system -c kubedns ifconfig
kubectl exec kube-dns-699984412 -vz1q6 -n kube-system -c kubedns ifconfig /bin/bash
kubectl exec kube-dns-4140740281-pfjhr -c etcd --namespace=kube-system etcdctl get /skydns/local/cluster/default/redis-master
#无线循环命令
while true; do sleep 1; done
kubectl exec xxx env
4.5、文件操作
kubectl cp 用于pod和外部的文件交换
kubectl exec mysql-xxx --echo “hello world” > /opt/aa.log
kubectl cp aa.log mysql-xxxx:/opt/aa.log
#定时监控
watch -n 1 “kubectl get pod |grep -C 8 nginx-ds”
当我们发现一个pod迟迟无法创建时,描述一个pods
kubectl describe pod xxx
#Docker主机开启ipv4/ipv6转发
#当无法curl时,检查宿主机的内核中是否开启了iPv4转发功能
cat /proc/sys/net/ipv4/ip_forward
0
echo “1” >!$
echo “1” >/proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
1
Ipvsadm -Ln
kubectl expose deployment nginx-dp --port=80 -n kube-public
kubectl get svc -n kube-public
#CLUSTER-IP=192.168.27.1
curl 192.168.27.1
#通过ipvs提供了一个稳定的接入点cluster-ip
#k8s集群里的运算节点上能够访问:ping cluster-ip
Ipvsadm -Ln
kubectl describe svc nginx-dp -n kube-public