k8s基础命令
kubeadm
kubuadm是k8s官方推出的用于快速安装k8s的命令行工具。
- config:指定初始化集群时使用的配置文件
kubeadm config print init-defaults #打印初始化配置
-
init:初始化Master节点
-
join:初始化Node节点并加入集群
-
reset:重置当前节点,无论是Master节点还是Node节点都可以重置
-
token: kubeadm init或输出的命令中返回的kubeadm join
# 返回新的node节点token
kubeadm token create --print-join-command
kubectl
kubectl主要职责是对资源对象进行操作。
为了方便在命令行下对集群、节点、pod进行管理,kubernetes官方提供了一个管理命令:kubectl
kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。
# 查看API资源
kubectl api-resources
# 查看API版本
kubectl api-versions
资源对象表
资源 | 缩写 | 说明 |
---|---|---|
cluster | 集群 | |
componentstatu ses | cs | 组件对象状态 |
configmaps | cm | ConfigMap是k8s配置管理工具 |
daemonsets | ds | DaemonSet管理node节点运行Pod |
deployments | deploy | K8S控制器 |
endpoints | ep | Endpoints是实现服务的端点集合 |
events | ev | 记录集群运行时的各种事件 |
ingress | ing | API对象,边缘路由功能 |
nodes | no | 节点 |
namespaces | ns | 命名空间 |
pods | po | 获取Pod信息 |
replicasets | rs | 用户指定数量的Pod副本 |
cronjob | 周期性任务控制,不需要持续在后台运行 | |
services | svc | 各种服务 |
K8s的API对象(所有怪物角色列表)
-
Namespace – 命令空间实现同一集群上的资源隔离
-
Pod – K8s的最小运行单元
-
ReplicaSet – 实现pod平滑迭代更新及回滚用,这个不需要我们实际操作
-
Deployment – 用来发布无状态应用
-
Health Check – Readiness/Liveness/maxSurge/maxUnavailable 服务健康状态检测
-
Service, Endpoint , EndpointSlices – 实现同一lables下的多个pod流量负载均衡
-
Labels – 标签,服务间选择访问的重要依据
-
Ingress – K8s的流量入口
-
DaemonSet – 用来发布守护应用,例如我们部署的CNI插件
-
HPA – Horizontal Pod Autoscaling 自动水平伸缩
-
Volume – 存储卷
-
Pv, pvc, StorageClass – 持久化存储,持久化存储 声明,动态存储pv
-
StatefulSet – 用来发布有状态应用
-
Job, CronJob – 一次性任务及定时任务
-
Configmap, secret – 服务配置及服务加密配置
-
Kube-proxy – 提供service服务流量转发的功能支持,这个不需要我们实际操作
-
RBAC, serviceAccount, role, rolebindings, clusterrole, clusterrolebindings – 基于角色的访问控制
-
Events – K8s事件流,可以用来监控相关事件用,这个不需要我们实际操作
看了上面这一堆知识点,大家是不是有点头晕了? 别担心,上述这些小怪在后面的过关流程中均会一一遇到,并且我会也教会大家怎么去战胜它们,Let’ Go!
kubectl命令行的语法:
kubectl [command] [TYPE] [NAME] [flags]
command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等
TYPE:资源对象的类型,区分大小写,能以单数、复数或简写形式表示。例如以下3种TYPE是等价的
- kubectl get pod pod-name
- kubectl get pods pod-name
- kubectl get po pod-name
NAME:资源对象的名称,区分大小写,如果不指定名称,系统将返回所有Pod的列表
flags:kubectl子命令的可选参数,比如可以使用 “-o wide“ 来显示更多的信息
kubectl常用命令
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: web
spec:
hostNetwork: true
containers:
- name: nginx
image: docker.io/library/nginx:latest
ports:
- containerPort: 80
- 新建资源:kubectl create -f pod.yaml
- 查看node信息:kubectl get nodes
- 查看pod信息:kubectl get pod -o wide ,也可以 kubectl get pod -o yaml 或者kubectl get pod -o json
- 查看所有信息:kubectl get all
- 查看pod详细信息:kubectl describe pod nginx
- 查看kube-system空间内的pod:kubectl get pod -n kube-system
- 删除资源-根据YAML文件: kubectl delete -f pod.yaml
- 删除资源-根据pod名字: kubectl delete pod nginx
- 删除资源-删除所有pod: kubectl delete pod --all
帮助
如果在使用命令过程中出现问题,那么我们也可以通过使用 --help来获取 kubectl 命令的使用说明:
- 获取 kubectl 的使用说明: kubectl --help
- 获取 kubectl 子命令的使用说明:kubectl get --help / kubectl delete --help
- 获取资源控制器说明: kubectl explain pod / rs / deployment / ·····
kubectl get 查看资源信息
# 查看类命令
# 获取节点和服务版本信息
kubectl get nodes
# 获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide
# 获取pod信息,默认是default名称空间
kubectl get pod
# 获取pod信息,默认是default名称空间,并查看附加信息
kubectl get pod -o wide
# 获取指定名称空间的pod
kubectl get pod -n kube-system
# 获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName
# 获取所有名称空间的pod
kubectl get pod -A
# 查看pod的详细信息,以yaml格式或json格式显示
kubectl get pods -o yaml
kubectl get pods -o json
# 查看pod的标签信息
kubectl get pod -A --show-labels
# 根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"
# 查看运行pod的环境变量
kubectl exec podName env
# 查看指定pod的日志
kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master
# 查看所有名称空间的service信息
kubectl get svc -A
# 查看指定名称空间的service信息
kubectl get svc -n kube-system
# 查看componentstatuses信息
kubectl get cs
# 查看所有configmaps信息
kubectl get cm -A
# 查看所有serviceaccounts信息
kubectl get sa -A
# 查看所有daemonsets信息
kubectl get ds -A
# 查看所有deployments信息
kubectl get deploy -A
# 查看所有replicasets信息
kubectl get rs -A
# 查看所有statefulsets信息
kubectl get sts -A
# 查看所有jobs信息
kubectl get jobs -A
# 查看所有ingresses信息
kubectl get ing -A
# 查看有哪些名称空间
kubectl get ns
# 查看pod的描述信息
kubectl describe pod podName
kubectl describe pod -n kube-system kube-apiserver-k8s-master
# 查看指定名称空间中指定deploy的描述信息
kubectl describe deploy -n kube-system coredns
# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod
# 查看集群信息
kubectl cluster-info 或 kubectl cluster-info dump
# 查看各组件信息【例如:192.168.8.119为master的机器】
kubectl -s https://192.168.8.119:6443 get componentstatuses
kubectl create 创建资源信息
kubectl create -f xxx.yaml
# 创建test名称空间
kubectl create namespace test
kubectl apply 应用资源
# 应用某一个资源,资源不存在时创建资源,资源存在时不进行操作,也支持修改资源。
kubectl apply -f xxx.yaml
# 应用该目录下的所有资源, .yaml, .yml, 或 .json 文件都会被执行。
kubectl apply -f
kubectl delete 删除集群中的资源
# 删除资源
kubectl delete -f xxx.yaml
kubectl delete -f
# 删除指定的pod
kubectl delete pod podName
# 删除指定名称空间的指定pod
kubectl delete pod -n test podName
# 删除其他资源
kubectl delete svc svcName
kubectl delete deploy deployName
kubectl delete ns nsName
# 强制删除
kubectl delete pod podName -n nsName --grace-period=0 --force
kubectl delete pod podName -n nsName --grace-period=1
kubectl delete pod podName -n nsName --now
kubectl edit 编辑资源
# 编辑pod配置
kubectl edit pod podName
kubectl exec 在Pod中执行命令
# kubectl exec:进入pod启动的容器
kubectl exec -it podName -- bash #进入容器
# 如果有Pod中有多个容器使用 -c 参数指定容器
kubectl exec -it podName -c cName -- bash
# 指定命名空间
kubectl exec -it podName -n nsName bash #进入容器
kubectl describe 查看资源对象的详细信息
# 获取服务详情
kubectl describe svc
kubectl run 创建一个应用
# 与create命令不同点在于,所有选项通过命令行指定。
kubectl run --image=nginx nginx-app --port=8082
pod/nginx-app created
[root@k8s-master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-app 1/1 Running 0 5m36s 172.16.85.209 k8s-node01 <none> <none>
kubectl cp 双向拷贝
kubectl cp <source> <destination>
kubectl cp /root/file.txt mypod:/root/
kubectl cp mypod:/path/to/file.txt ./file.txt
kubectl logs 查看资源的日志
kubectl logs nginx-app
kubectl滚动升级与kubectl scale:动态伸缩
# kubectl滚动升级; 通过 kubectl apply -f myapp-deployment-v1.yaml 启动deploy
kubectl apply -f myapp-deployment-v2.yaml #通过配置文件滚动升级
kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3" #通过命令滚动升级
kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment #pod回滚到前一个版本
kubectl rollout undo deploy/myapp-deployment --to-revision=2 #回滚到指定历史版本
kubectl scale deploy myapp-deployment --replicas=5 # 动态伸缩
kubectl scale --replicas=8 -f myapp-deployment-v2.yaml #动态伸缩【根据资源类型和名称伸缩,其他配置「如:镜像版本不同」不生效】
上面滚动更新和动态伸缩涉及的deploy的yaml文件
kubectl label 添加label值
kubectl label nodes k8s-node01 zone=north #为指定节点添加标签
kubectl label nodes k8s-node01 zone- #为指定节点删除标签
kubectl label pod podName -n nsName role-name=test #为指定pod添加标签
kubectl label pod podName -n nsName role-name=dev --overwrite #修改lable标签值
kubectl label pod podName -n nsName role-name- #删除lable标签