k8s常用的指令
Kubernetes资源管理与操作
1. 查看K8S集群的资源类型
通过kubectl api-resources命令可以查看Kubernetes集群中可用的资源类型:
[root@master231 pods]# kubectl api-resources
该命令返回一列资源信息,包括资源名称、缩写、API版本、是否命名空间、资源类型等。例如:
- ConfigMap(cm)
- Pod(po)
- Service(svc)
- Node(no)
- 等等
2. 创建资源清单的目录
[root@master231 ~]# mkdir -pv /oldboyedu/manifests/pods
[root@master231 ~]# cd /oldboyedu/manifests/pods
3. 编写资源清单规范
apiVersion:声明API的版本号,每个资源都有其对应的版本。kind:指定资源的类型。metadata:指定资源的元数据信息,包括名称、标签、名称空间等。spec:资源的期望运行状态。status:资源的实际运行状态,由Kubernetes组件维护。
4. 编写Pod资源清单
例如,创建一个名为xiuxian-v1的Pod:
[root@master231 pods]# cat 01-pods-xiuxian-single.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v1
spec:
nodeName: worker232
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
5. 创建资源
[root@master231 pods]# kubectl create -f 01-pods-xiuxian-single.yaml
如果Pod已经存在,create命令会报错。要避免这种情况,可以使用apply命令:
[root@master231 pods]# kubectl apply -f 01-pods-xiuxian-single.yaml
apply命令在资源存在时不会报错,会显示unchanged。
create与apply命令的区别:
- create:资源不存在时创建,若资源已存在则报错。
- apply:资源不存在时创建,资源已存在时更新。
6. 查看资源列表
[root@master231 pods]# kubectl get pods -o wide
返回资源的详细信息,如Pod的名称、状态、重启次数、IP地址等。
7. 删除资源
[root@master231 pods]# kubectl delete -f 01-pods-xiuxian-single.yaml
8. Pod内运行多个容器
环境准备:
通过docker load命令加载并推送两个镜像到Harbor仓库。
[root@worker233 ~]# docker load -i alpine-v3.20.2.tar.gz
[root@worker233 ~]# docker tag alpine:3.20.2 harbor.oldboyedu.com/oldboyedu-linux/alpine:3.20.2
[root@worker233 ~]# docker push harbor.oldboyedu.com/oldboyedu-linux/alpine:3.20.2
创建包含两个容器的Pod:
[root@master231 pods]# cat 02-pods-xiuxian-alpine-multiple.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v2
spec:
nodeName: worker232
containers:
- image: harbor.oldboyedu.com/oldboyedu-web/xiuxian:v2
name: xiuxian
- image: harbor.oldboyedu.com/oldboyedu-linux/alpine:3.20.2
name: alpine
stdin: true
应用资源:
[root@master231 pods]# kubectl apply -f 02-pods-xiuxian-alpine-multiple.yaml
9. 使用kubectl exec在容器中执行命令
查看Pod的IP地址:
[root@master231 pods]# kubectl exec xiuxian-v1 -- ifconfig
可以查看每个容器的IP地址。
在特定容器内执行命令:
[root@master231 pods]# kubectl exec xiuxian-v2 -c xiuxian -- sh
在xiuxian容器中执行sh命令。
查看容器内的进程:
/ # ps -ef
10. K8S声明式API与响应式API的对比
- 声明式API:需要编写资源清单文件(YAML文件),通过命令行
kubectl apply来管理资源。修改后,需要重新应用资源清单文件才能生效。 - 响应式API:通过命令行直接操作资源,修改后立即生效。
11. 标签管理
查看资源的标签:
[root@master231 pods]# kubectl get pods -o wide --show-labels
添加标签:
[root@master231 pods]# kubectl label -f 01-pods-xiuxian-single.yaml school=oldboyedu class=linux92
删除标签:
[root@master231 pods]# kubectl label pods xiuxian-v1 address-
修改标签:
[root@master231 pods]# kubectl label -f 01-pods-xiuxian-single.yaml class=Linux92 --overwrite
12. 基于标签过滤资源
过滤Pod:
[root@master231 pods]# kubectl get pods -o wide --show-labels -l class=Linux92
删除基于标签过滤的Pod:
[root@master231 pods]# kubectl delete pods -l class=Linux92
13. 查看Pod的详细信息
使用kubectl describe命令查看Pod或节点的详细信息:
[root@master231 pods]# kubectl describe pods xixi
14. 修改Pod的网络名称空间为宿主机模式
修改Pod配置以使用宿主机的网络:
[root@master231 pods]# cat 04-pods-hostNetwork.yaml
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-hostnetwork
labels:
apps: xiuxian
school: oldboyedu
class: linux92
spec:
hostNetwork: true
nodeName: worker232
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
创建Pod:
[root@master231 pods]# kubectl apply -f 04-pods-hostNetwork.yaml
使用宿主机IP访问Pod:
[root@master231 pods]# curl 10.0.0.232
总结
- 声明式管理:需要资源清单和
kubectl apply。 - 响应式管理:通过命令行直接操作。
- 标签管理:可以通过标签来过滤和管理资源。
浙公网安备 33010602011771号