kubectl常用命令:
1、 kubectl get po -o wide
kubectl get pods -o wide -n=appserver(带命名空间)
获取pods
2、 kubectl get svc
获取service
3、 kubectl get no
获取nodes
4、 kubectl get ep
获取service负载pod ip
5、 kubectl delete pods [pod]
kubectl delete service [service]
删除单个pod/service
6、 kubectl logs [pods]
查看pod日志
7、 kubectl exec -it [pod] bash
进入pod
8、kubectl describe pods [pod]
查看pod的详情
9、kubectl get cs
查看k8s各组件状态
10、kubectl label nodes kube-node node=ttscarweb kubectl get node -a -l "node=ttscarweb"
master重启命令
systemctl restart etcd kube-apiserver kube-scheduler kube-controller-manager
slave重启命令
systemctl restart flanneld kubelet kube-proxy docker
yaml文件
主要是用于定义pods、service等的配置文件
命令:
kubectl create -f *.yaml
kubectl delete -f *.yaml
kubectl apply -f *.yaml
创建/删除/更新 用yaml定义的各种资源
docker常用命令
1、docker run -itd -v /etc/localtime:/etc/localtime:ro -p 8080:8080 [dockerimages] bash
运行一个docker (开放端口8080)
2、docker exec -it [dockercontainer] bash
进入指定的docker
kubernetes中,如果docker镜像需要登录,则需创建secret,创建见
kubectl create secret docker-registry dockerlogin --namespace=appserver --docker-server=*** --docker-username=*** --docker-password=*** --docker-email=***
执行docker命令
docker exec -d export /bin/sh /start/start.sh
重要命令
- 删除版本为null的镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi - flanneld错误日志
flanneld -alsologtostderr
systemctl status flanneld
route -n
tcpdump -i flannel0 -nn host 172.17.62.0(docker0)
iptables -t nat -L KUBE-SERVICES -n - etcdctl get /atomic.io/network/subnets/172.17.23.0-24
- ifconfig flannel.1 down
- docker rm -f
docker ps -a -q
(删除所有docker);docker rmi -fdocker images -a -q
(删除所有镜像) - etcdctl get /atomic.io/network/config
- traceroute
注意
- node节点是可以拼通其他节点容器ip的!
- http://192.168.24.52:2379/v2/keys
- etcdctl -C http://10.253.44.231:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16","Backend":{"Type":"vxlan"} }'
etcdctl -C http://10.253.44.231:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16","SubnetLen":25,"Backend":{"Type":"vxlan"} }' --加上vxlan模式,
etcdctl -C http://10.250.250.7:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16","SubnetLen":25,"Backend":{"Type":"host-gw"} }'--加上host-gw模式,默认是udp模式,另还有hostgw模式,好像比vxlan还要好,另calico和weave可以替代flannel,比flannel稳定。 - 修改host-gw网络和vxlan的区别,就是把type改成相应值就行了,其他不用另外配
- vim /etc/sysconfig/flanneld
FLANNEL_OPTIONS="-iface=eth0 -public-ip=10.139.52.91 -ip-masq=true"
(非常重要,如果金融云不指定的话,挂载网卡就是公网网卡了。应该用内网。这个配置加上后,用vxlan就没什么问题了,这个问题花费了一个周末) - 如果flannel网络不通,重点检查service docker status和service flannel status,不能有错误。
- registry.access.redhat.com/rhel7/pod-infrastructure 这个镜像不能删除,是k8s需要的。如果不小心删除了,需要把这个镜像从其他node上push到阿里云上,然后pull下来,改/etc/kubernetes/kubelet 的KUBELET_POD_INFRA_CONTAINER值就行了 【这个问题其实是docker版本问题导致的,新版本会有问题,应该沿用老版本】
- 除了service的cluster-ip外,其他172.17网段的ip在node上都是能ping通的
- VxLan使用8472端口,8285端口作为UDP
- /run/flannel/subnet.env 是flannel写的环境变量; source /run/flannel/subnet.env
- 重启flannel或其他原因导致flannel和docker不在同一个网段的,需要reboot才能解决问题
- vim /etc/docker/daemon.json 设置"bip":"172.17.10.1/24"可以自定义docker网段
问题解决:
- 要初始化k8s,最好etcd储存文件也删掉
- docker保留客户端ip,service.spec.externalTrafficPolicy: Cluster(默认)和"Local",local值可能导致负载不平衡
参考:
- https://www.kubernetes.org.cn/3682.html(flannel介绍的最详细的文章)
- http://www.mamicode.com/info-detail-2121290.html、 http://dockone.io/question/1393(flannel网络不通定位排查)
- https://blog.csdn.net/ganpuzhong42/article/details/77853131(flannel和其他组件性能对比)
- https://segmentfault.com/a/1190000006594822、 http://www.dockone.io/article/1115(比较好的解决docker网络比较文章)