文章标题
Kubernetes07(kubectl的常用命令)
一、引子
千里之行,始于足下。了解了kuberbetes的相关概念之后,就像我们学习linux操作系统一样,也要开始从常用命令开始学习。其实kubernetes的常用命令和docker的常用命令很相似,无需慌张。
二.kubernetes的命令行管理工具kuberctl简介
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。
运行kubectl命令的语法如下所示:
$ kubectl [command] [TYPE] [NAME] [flags]
- comand:指定要对资源执行的操作,例如create、get、describe和delete
- TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的形式。
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源
- flags:指定可选的参数。例如,可以使用-s或者–server参数指定Kubernetes API server的地址和端口。
三.kubernetes的常用命令
笔者将kubernetes的常用命令分为三类:kubernetes的基础命令(增删改查),kubernetes的格式化输出命令(查看节点信息等),kubernetes的集群管理命令(对node节点的管理)
(一).kubernetes的基础命令
(1).创建资源对象
kubectl create -f xxx.yaml(文件)
kubectl create -f <directory>(目录下所有文件)
(2).删除资源对象
kubectl delete -f <filename>
kubectl delete pods,services -l name=<label-name>
kubectl delete pods --all(生产环境慎用)
(3.)查看资源对象
kubectl get nodes
kubectl get pods -n <namespace> -o wide
(4).描述资源对象
kubectl describe nodes <node-name>
kubectl describe pods -n <namespace> kubectl describe <pod-name>
kubectl describe pods <rc-name>
(5).对容器进行调用的命令
kubectl exec <pod-name> date(默认使用第一个容器执行Pod的date命令)
kubectl exec <pod-name> -c <container-name> date(指定Pod中的某个容器执行date命令)
kubectl exec -it <pod-name> -c <container-name> /bin/bash (相当与docker exec -it <container-name> /bin/bash)
(6).查看容器日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> -c <container-name> (相当于tail -f 命令)
(二).kubectl格式化输出
(1).显示pod的更多信息
kubectl get pods -n <namespace> -o wide
(2).以yaml格式显示pod的信息
kubectl get pods -n <namespace> -o yaml
(3).以自定义列名显示Pod信息
kubectl get pod <pod-name> -o =custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
(4).基于文件的自定义列名输出
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
(5).输出结果排序
kubectl get pods --sort-by=.metadata.name
(三).kubernetes对集群的管理命令
(1).创建添加节点
#node节点加入master:
kubeadm join 192.168.138.131:6443 --token zlk694.ev3odwj7rbyaggz6 --discovery-token-ca-cert-hash sha256:eefe51ccf1c54149f5ce89423c100b1e0de8f8081c7c2c0e07a7613ef2025146
#生成加入master的命令:
kubeadm token create --print-join-command
(2).查看节点
[root@k8s-master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 3h58m v1.15.1
k8s-node01 Ready <none> 53m v1.15.1
k8s-note02 Ready <none> 53m v1.15.1
[root@k8s-master01 ~]# kubectl get node -n default -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master01 Ready master 5h5m v1.15.1 10.10.40.11 <none> CentOS Linux 7 (Core) 4.4.241-1.el7.elrepo.x86_64 docker://19.3.13
k8s-node01 Ready <none> 121m v1.15.1 10.10.40.12 <none> CentOS Linux 7 (Core) 4.4.241-1.el7.elrepo.x86_64 docker://19.3.13
k8s-note02 Ready <none> 121m v1.15.1 10.10.40.13 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://19.3.13
(3).删除节点
kubectl drain swarm1 --delete-local-data --force --ignore-daemonsets
kubectl delete node swarm1
(4).对node/pod标签的增删改
#给node设置标签
添加:kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1=
删除:kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1-
修改: kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1= --overwrite
#给pod设置标签
把node改成pod即可
(5)查看集群状态查看
#查看集群健康状态
[root@k8s-master01 ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
scheduler Unhealthy Get http://127.0.0.1:10251/healthz: EOF
etcd-0 Healthy {"health":"true"}
kubectl cluster-info # 集群核心组件运行情况
kubectl get namespaces # 表空间名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
(6).查看deployment
#查看所有deployment
[root@k8s-master01 ~]# kubectl get deployment --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 2/2 2 2 5h11m
#查看单独的deployment
kubectl get deployment nginx-app
(7).查看rc和services
kubectl get rc,services
(8).更新资源
kubectl rolling-update python-v1 -f python-v2.json # 滚动更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新资源名称并更新镜像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的镜像
kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的进行中的滚动更新
(9). 编辑资源
kubectl edit svc/docker-registry # 编辑名为 docker-registry 的 service
(10).动态管理pod增减(三种方式)
kubectl scale --replicas=3 rs/foo # 将foo副本集变成3个
kubectl scale --replicas=3 -f foo.yaml # 缩放“foo”中指定的资源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 将deployment/mysql从2个变成3个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 变更多个控制器的数量
参考文档:http://docs.kubernetes.org.cn/683.html
说实话,很多docker能够调用的命令,kubectl也能够调用。这对于我们来理解kubectl的命令来说能够起到一个非常好的辅助作用。以上常用命令的整理送给大家。