最近学习k8s遇到很多问题,建了一个qq群:153144292,交流devops、k8s、docker等
k8s常用命令
查看帮助
[root@master ~]# kubectl --help
查看版本:
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"clean", BuildDate:"2019-02-01T20:08:12Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"clean", BuildDate:"2019-02-01T20:00:57Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
查看集群信息
[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://10.249.6.100:6443
Heapster is running at https://10.249.6.100:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://10.249.6.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
monitoring-grafana is running at https://10.249.6.100:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
monitoring-influxdb is running at https://10.249.6.100:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
1、查看资源对象
kubectl get nodes <-o wide>
kubectl get pods -n
kubectl get svc
kubectl get ingress
kubectl get pod --all-namespaces 查看所有namespace下的pod资源
kubectl get rs -o wide
kubectl get pods -l app=myapp -w
kubectl get ds -n kube-system
kubectl get pod -n ingress-nginx -w
2、描述资源对象
kubectl describe nodes
kubectl describe pods
kubectl describe pods
kubectl describe svc nginx
kubectl describe pods nginx-ingress-controller-797b884cbc-whphv -n ingress-nginx
3、查看log
kubectl logs
kubectl logs -f
4、格式化输出
显示Pod的更多信息
kubectl get pods -n
以yaml格式显示
kubectl get pods -n
以自定义列明显示Pod信息
kubectl get pod
基于文件的自定义列名输出
kubectl get pods
输出结果排序
kubectl get pods --sort-by=.metadata.name
5、创建资源对象
kubectl create -f xxx.yaml(文件)
kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete)
kubectl apply -f xxx.yaml (创建+更新,可以重复使用)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml 在线
命令直接创建
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
6、修改资源对象
kubectl replace -f xxx.yaml
kubectl patch pod httpd-5f955cf6d5-4htlh -p '{"metadata":{"labels":{"app":"nginx-3"}}}'
kubectl edit pod httpd-5f955cf6d5-4htlh
kubectl edit rs myapp
7、删除资源对象
kubectl delete -f
kubectl delete pods,services -l name=
kubectl delete svc nginx-deploy
kubectl delete deployment wolf
kubectl delete pods --all(生产环境慎用)
kubectl get pods -o yaml | kubectl delete -f - 删除全部
8、运行镜像(Run a particular image on the cluster)
kubectl run --help
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 --dry-run=true
kubectl run nginx --image=nginx:1.14-alpine --port=80 --replicas=2
kubectl run client --image=busybox --replicas=1 -it --restart=Never
kubectl run wolf --image=busybox --replicas=2
8、动态伸缩
动态伸缩
kubectl scale --replicas=5 deployment nginx
kubectl scale --replicas=3 deployment nginx
9、滚动升级(或降级)
滚动升级
kubectl set image deployment nginx nginx=nginx 这个环境没准备容器,感受一下过程
kubectl rollout status deployment nginx
默认回滚到上一个版本
kubectl rollout undo deployment nginx
kubectl rollout history deploy myapp-deploy
kubectl rollout history deployment/myapp-deploy --revision=2
带暂停
kubectl rollout resume deploy myapp-deploy
更新deployment的v3版本,并配置暂停deployment
kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout
打补丁
kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'
kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
10、查看资源定义(编写yaml文件常用)
下面的命令查看资源定义
kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.spec
kubectl explain pods.spec.containers
kubectl explain pods.spec.containers.livenessProbe
命令行查看ReplicaSet清单定义规则
kubectl explain rs
kubectl explain rs.spec
kubectl explain rs.spec.template
kubectl explain deployment
kubectl explain deployment.spec.
kubectl explain deployment.spec.strategy
kubectl explain deployment.spec.strategy.rollingUpdate
kubectl explain ds
kubectl explain ds.spec 必须字段
kubectl explain ds.spec.template.spec
清单创建service资源
kubectl explain svc
kubectl explain svc.spec
kubectl explain svc.spec.selector
kubectl explain pod.spec.volumes
kubectl explain pod.spec.volumes.emptyDir #查看emptyDir存储定义
kubectl explain pod.spec.containers
kubectl explain pod.spec.containers.volumeMounts #查看容器挂载方式
11、手动进入容器
kubectl exec -it liveness-httpget-pod -- /bin/sh
kubectl exec -it redis-5b5d6fbbbd-v82pw -- /bin/sh
12、打标签
kubectl get pods --show-labels 标签为app=myapp,release=canary的两个myapp
kubectl label pods readiness-httpget-pod release=canary
kubectl label pods readiness-httpget-pod app=myapp
kubectl get pods --show-labels 这里发现readiness-httpget-pod 他已经满足上面标签选择器的条件,上面myapp删除一个
生产中标签最好使用复杂条件,不然容易冲突了