一: 查看信息
1.0 查看pod和node
kubectl get pod或node
bash
#1.0 kubectl get node 查看node
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 16d v1.20.2
k8s-node1 Ready <none> 16d v1.20.2
k8s-node2 Ready <none> 16d v1.20.2
[root@k8s-master ~]#
#2.0 kubectl get pod -A # 查看pod ,这个-A表示所有命名空间
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-577f77cb5c-4wjcg 1/1 Running 1 16d
kube-system calico-node-5nmgp 1/1 Running 1 16d
kube-system calico-node-pqtdr 1/1 Running 1 16d
kube-system calico-node-tjtzk 1/1 Running 1 16d
kube-system coredns-74ff55c5b-6lg2j 1/1 Running 1 16d
kube-system coredns-74ff55c5b-hm2kz 1/1 Running 1 16d
kube-system etcd-k8s-master 1/1 Running 1 16d
kube-system kube-apiserver-k8s-master 1/1 Running 1 16d
kube-system kube-controller-manager-k8s-master 1/1 Running 1 16d
kube-system kube-proxy-4t425 1/1 Running 1 16d
kube-system kube-proxy-hd5vt 1/1 Running 1 16d
kube-system kube-proxy-xqngw 1/1 Running 1 16d
kube-system kube-scheduler-k8s-master 1/1 Running 1 16d
[root@k8s-master ~]#
# 3.0 kubectl get pod -n kube-system名称空间(查看指定namespace内POD)
[root@k8s-master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-577f77cb5c-4wjcg 1/1 Running 1 16d
calico-node-5nmgp 1/1 Running 1 16d
calico-node-pqtdr 1/1 Running 1 16d
calico-node-tjtzk 1/1 Running 1 16d
coredns-74ff55c5b-6lg2j 1/1 Running 1 16d
coredns-74ff55c5b-hm2kz 1/1 Running 1 16d
etcd-k8s-master 1/1 Running 1 16d
kube-apiserver-k8s-master 1/1 Running 1 16d
kube-controller-manager-k8s-master 1/1 Running 1 16d
kube-proxy-4t425 1/1 Running 1 16d
kube-proxy-hd5vt 1/1 Running 1 16d
kube-proxy-xqngw 1/1 Running 1 16d
kube-scheduler-k8s-master 1/1 Running 1 16d
[root@k8s-master ~]#
# 4.0 kubectl get pod -A -o wide # -o参数表示详细观看
[root@k8s-master ~]# kubectl get pod -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system calico-kube-controllers-577f77cb5c-4wjcg 1/1 Running 1 16d 10.244.235.196 k8s-master <none> <none>
kube-system calico-node-5nmgp 1/1 Running 1 16d 192.168.255.166 k8s-master <none> <none>
kube-system calico-node-pqtdr 1/1 Running 1 16d 192.168.255.167 k8s-node1 <none> <none>
kube-system calico-node-tjtzk 1/1 Running 1 16d 192.168.255.168 k8s-node2 <none> <none>
kube-system coredns-74ff55c5b-6lg2j 1/1 Running 1 16d 10.244.235.197 k8s-master <none> <none>
kube-system coredns-74ff55c5b-hm2kz 1/1 Running 1 16d 10.244.235.198 k8s-master <none>
2.0 查看描述信息(重要)
kubectl describe pod名称
bash
kubectl describe pod kube-proxy-bdtpg -n kube-system # 上面是pod的状态,下面是容器的状态


3.0 查看pod运行日志
kubectl logs pod名称 -n 命名空间
bash
# kubectl logs -f kube-proxy-bdtpg -n kube-system
4.0 查看service服务
查看service服务(网络服务): kubectl get svc
bash
[root@k8s-master ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16d
[root@k8s-master ~]#
核心字段:TYPE(访问类型)、CLUSTER-IP(集群固定 IP)、PORT(S)(端口映射);
4 种类型:ClusterIP (集群内)、NodePort (节点访问)、LoadBalancer (云厂商公网)、ExternalName (访问外部);
核心逻辑:Pod 的 IP 是临时的,Service 的 IP 是永久的,所有访问走 Service;
5.0 查看集群信息

6.0 查看pod官方说明书
bash
# 查看帮助信息
$ kubectl explain deployment
$ kubectl explain deployment.spec
$ kubectl explain deployment.spec.replicas

二: 资源管理
创建资源: 根据资源清单
- kubectl apply or create -f <SOURCE_FILENAME>.yaml
删除资源: 根据资源清单
- kubectl delete -f <SOURCE_FILENAME>.yaml
修改资源:根据反射出的etcd中的配置内容, 生产中不允许该项操作, 且命令禁止(应使用资源清单的形式)
- kubectl edit <SOURCE_NAME> <SOURCE_NAME_RANDOM_ID> -n
bash
kubectl edit = 直接修改 etcd 的核心配置,无校验、无记录、无回滚,生产环境绝对禁止;
etcd 是 K8s 的大脑,直接修改 etcd 就像给运行中的心脏做手术,风险致命;
生产环境修改配置的唯一正确方式:改本地 yaml 文件 → kubectl apply -f xxx.yaml;
K8s 是声明式 API,我们只需要声明最终要什么状态,让 K8s 自己去实现,而不是手动修改当前状态。
三: Yaml语法解析
1.0 简介
YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。
2.0 语法要求
YAML的语法比较简单,主要有下面几个:
-
1、大小写敏感
-
2、使用缩进表示层级关系
-
3、缩进不允许使用 tab,只允许空格 (低版本限制)
-
4、缩进的空格数不重要,只要相同层级的元素左对齐即可
-
5、
#表示注释
yaml语法支持的几种数据类型:
-
1、纯量:单个的、不可再分的值
-
2、对象:键值对的集合,又称为映射(mapping)/ 哈希(hash)/ 字典(dictionary)
-
3、数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
补充:
- 1、书写yaml切记: 后面要加一个空格
- 2、如果需要将多段yaml配置放在一个文件中,中间要使用---分隔
3.0 创建namespace
通过声明式配置yaml 创建名称空间
- 1.0 制作yaml文件
bash
# vim namespace.yaml
apiVersion: v1 #api版本
kind: Namespace #定义资源对象类型(可以是Pod,Service,Deployment)
metadata: #元数据
name: webserver #命名空间的名字
- 2.0 应用配置清单
bash
# kubectl apply -f namespace.yaml
- 3.0 查看命名空间
bash
kubectl get namespace
- 4.0 删除命名空间
bash
# 删除名称空间[注意,这将删除名称空间下的所有资源]
$ kubectl delete namespace webserver
面试重点: kubectl apply和create的区别是什么?
create 是一次性创建命令,资源已存在时报错,仅适用于确认资源不存在的场景; apply 是声明式管理命令,支持创建 / 更新资源,重复执行无故障,是日常使用的首选; 核心区别:create 只有创建能力,apply 兼具创建和增量更新能力。
追问:
- 获取当前资源的配置(可选,用于对比) kubectl get deploy nginx -o yaml > nginx-current.yaml
- 编辑配置文件(修改需要更新的字段,比如副本数、镜像版本) vim nginx-deploy.yaml
- 执行 apply 更新(核心命令) kubectl apply -f nginx-deploy.yaml
- 验证更新结果 kubectl get deploy nginx # 查看副本数、状态 kubectl describe deploy nginx # 查看详细更新日志(比如镜像是否更新)
markdown
1. 更新镜像版本
修改 yaml 中 spec.template.spec.containers[0].image 字段
yaml
spec:
template:
spec:
containers:
- name: nginx
image: nginx:1.25 # 从 1.24 改成 1.25
2. 调整副本数
修改 spec.replicas 字段
yaml
spec:
replicas: 5 # 从 3 改成 5
3. 添加环境变量
在 containers[0].env 中新增字段
yaml
containers:
- name: nginx
env:
- name: ENV_NAME
value: "prod"
追问:除 create/apply 外,常用的 K8s 资源管理命令?
-
查看 :
kubectl get -
详情 :
kubectl describe -
获取 yaml 资源信息 :
kubectl get -o yaml -
在线修改资源 :
kubectl edit -
替换资源 :
kubectl replace -
删除资源 :
kubectl delete说明:删除老资源,建立新资源,服务会短暂不可用 -
批量应用配置 :
kubectl apply -f dir/ -
版本回滚 :
kubectl rollout
示例:kubectl rollout undo deploy nginx 回滚 Deployment 版本