k8s操作
Kubernetes集群搭建完成后会伴随着对其编排的困扰,现针对kubectl 的操作做一些总结(有待完善)
kubectl命令的使用方法:
kubectl --help
kubectl <command> --help
kubectl 配置位于 ~/.kube/config
常用命令:
创建:kubectl create --help
kubectl create -f filename.yaml (创建资源,资源类型取决于文件内容,文件内写的pod即创建pod,文件内写的deployment即创建deployment)
kubectl replace -f filename [--force] (重建资源,支持JSON和YAML格式。如果替换当前资源,则必须提供完整的资源规范,可以通过以下命令获取:kubectl get TYPE NAME -o yaml)
示例:kubectl replace -f ./pod.json
cat pod.json | kubectl replace -f -(根据传入的 JSON 替换 pod )
kubectl replace --force -f ./pod.json (强制替换。删除原有资源,然后重新创建资源)
kubectl get pod podname -o yaml | sed 's/\(image: myimage\) : .*$/\1:v4/' | kubectl replave -f -
删除:kubectl delete --help
kubectl delete -f filename (根据文件删除资源)
kubectl delete pod podname (根据资源名称产出资源)
kubectl delete rc rcname
kubectl delete service servicename
kubectl delete pod --all (产出全部类型的资源)
资源动态伸缩:kubectl scale --help
kubectl scale rz php --replicas=5 (根据资源类型指定资源进行动态伸缩)
kubectl scale deployment redis-slave --replicas=5
kubectl scale --replicas=2 -f redis-slave-deployment.yaml (根据文件对资源进行动态伸缩)
滚动升级:kubectl rolling-update --help
kubectl rolling-update php-master -f php-master-controller-v2.yaml (配置文件滚动升级)
kubectl rolling-update php-master --image=php-master:2.0 (命令升级)
kubectl rolling-update php-master --image=php=master:1.0 --rollback (pod版本回滚)
查看:kubectl get --help
kubectl cluster-info (查看 k8s 集群状态)
kubectl get nodes (查看集群内的 node 节点信息)
kubectl get pods (查看运行的 pods )
kubectl get pods -o wide (查看 pods 详情)
kubectl get deployment (查看运行的 deployment )
kubectl get deployment -o wide (查看 deployment 详情)
kubectl get svc (查看 service )
kubectl get svc -o wide (查看 service 详情)
kubectl get ns (获取所有命名空间)
kubectl get all -o wide --all-namespaces (查看所有命名空间下的所有信息)
kubectl get all -n default (查看指定命名空间下所有服务信息,其中 default 为命名空间的名称)
kubectl get pods -n default (指定命名空间下获取某种类型对象的所有信息,default 为命名空间名称)
kubectl get daemonset --all-namespaces (查看所有 namespace 下的 daemonset ,其中DaemonSet kube-flannel-ds和kube-proxy分别负责在每个节点上运
行flannel和kube-proxy组件,因为flannel和kube-proxy属于系统组件,需要在命令行中通过--
namespace=kube-system指定namespace kube-system。若不指定,则只
返回默认namespace default中的资源)
kubectl get ingress (查看集群中的 ingress )
kubectl get pods -A -o wide | grep nodeip (查看一台 node 主机上的所有 pod 资源)
标签:label (kubectl label --help)
kubectl label node nodename key=value (给 node 节点添加一个 label )
kubectl get node --show-labels (查看节点的 label )
kubectl label node nodename key- (将 node 节点的 label 删除 )
日志:logs
kubectl logs -f pod-name (查看容器中输出的日志)
kubectl logs -f podname -c containername (跟踪查看pod内某个容器的日志,相当于tail -f 或 docker logs -f )
kubectl exec pod-name cmd: ---在podname中执行cmd命令,该命令用 '' ;
kubectl exec pod-name -c containername 命令: ---在podname中的容器containername中执行命令;
kubectl exec -it common-1-controller-786c6c76dd-lqzc8 -c common-0 /bin/sh -n ns-2 进入pod common-1-controller-786c6c76dd-lqzc8内的容器common-0中,执行一些命令;
/ # date
Fri Sep 28 15:01:12 CST 2018
/ #
kubectl exec php-p-6c6965c645-bhz6b env (查看指定 pod 的环境变量)
kubectl exec -it redis-master-123456789-abcde /bin/bash (进入 pod 启动的容器 )
kubectl describe pods php-p-6c6965c645-bhz6b -n default (查看 pods 中的容器)
kubectl describe service/kubernetes-dashboard --namespace="kube-system"
kubectl describe pods/kubernetes-dashboard-123456789-abcde --namespace="kube-system" (指定类型查看)
kubectl describe pod nginx-12345 (查看 pod 详细信息)
查看资源使用情况: kubectl top --help/kubectl describe --help
kubectl top node (查看节点的资源使用情况)
kubectl top pod (查看pod 的资源使用情况)
kubectl api-resources (获取API的资源)
kubectl api-version (查看 API 版本信息)
kubectl describe nodes (查看所有 node 的资源)
etcdctl cluster-health (检查网络集群健康状态)
etcdctl --endpoints=https://172.26.60.221:2379 cluster-health (带有安全认证检查网络集群健康状态)
etcdctl member list
etcdctl set /k8s/network/config '{ "Network": "10.1.0.0/16"}'
etcdctl get /k8s/network/config
=======================================
负载均衡处理组件,例如ingress
外部通过ingress访问http请求url后面的服务;ingress controller是以pod的形式存在的;
逻辑:
1、监听apiserver,获取全部ingress的定义
2、基于ingress的定义,生成nginx需要的配置文件/etc/nginx/nginx.conf
3、nginx -s reload 命令,重新加载nginx.conf配置文件的内容
nginx-ingress-controller镜像来创建ingress controller,该ingress controller是以daemonset的形式进行创建,在每个node上都将启动一个nginx服务。
查看ingress的镜像文件:
docker images |grep ingress
docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.27.1
灰度升级时,新建deployment之后,会新建一个replicaset控制副本数。deployment实际是replica controller的升级版:
=========================================
灰度升级
查看升级过程中deployment的更新过程
kubectl rollout status deployment/deploy-tsing-canary -n ns-tsing
deployment "deploy-tsing-canary" successfully rolled out
可以编辑deployment的镜像版本,引起升级:
kubectl edit deployment/deploy-tsing-canary -n ns-tsing
检查整个deployment部署的历史记录:
kubectl rollout history deployment/deploy-tsing-canary -n ns-tsing
撤销本次发布回滚到上一个部署版本:
kubectl rollout undo deployment/deploy-tsing-canary -n ns-tsing
暂停deployment的更新:
kubectl rollout pause deployment/deploy-tsing-canary -n ns-tsing
在新建deployment后,最好加上—record,在查看history时能看到历史记录。
--version,能看到更新的每个版本。
查看命令的子命令方法:
kubectl rollout
Available Commands:
history View rollout history
pause Mark the provided resource as paused
restart Restart a resource
resume Resume a paused resource
status Show the status of the rollout
undo Undo a previous rollout
获取endpoints=popip+contaninerport
kubectl get endpoints -n ns-tsing
参考:
http://docs.kubernetes.org.cn/468.html