kubectl 命令行管理K8S(下)

目录

声明式资源管理方式

介绍

命令

修改yaml文件指定的资源

离线修改

在线修改

[YAML 语法格式](#YAML 语法格式)

[查看 api 资源版本标签](#查看 api 资源版本标签)

编辑yaml配置清单生成资源

编写yaml文件

yaml创建Deployment

yaml创建service服务对外提供访问并测试

yaml创建Pod

生成模板

pod模板

serivce模板

deployment模板

导入模板


声明式资源管理方式

介绍

1.适合于对资源的修改操作

2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理

资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)

3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里

4.语法格式:kubectl create/apply/delete -f xxxx.yaml

可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作

命令

应用yaml文件指定的资源

bash 复制代码
kubectl create -f xxx.yaml
kubectl apply -f xxx.yaml 
#区别:使用create创建资源是一次性的,如果使用apply创建,后期修改yaml文件再次执行apply可以实现更新资源

删除yaml文件指定的资源

bash 复制代码
 kubectl delete -f xxx.yaml

查看资源的yaml格式信息

bash 复制代码
kubectl get 资源名称 -o yaml

查看yaml文件字段说明

bash 复制代码
kubectl explain yaml文件中的字段(多级字段用 . 隔开)

修改yaml文件指定的资源

离线修改

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效

注意:当apply不生效时,先使用delete清除资源,再apply创建资源

bash 复制代码
例:
kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)

PS:此修改方式不会对yaml文件内容修改

YAML 语法格式

●大小写敏感

●使用缩进表示层级关系

●不支持Tab键制表符缩进,只使用空格缩进

●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等

●"---"表示YAML格式,一个文件的开始,用于分隔文件间

●"#"表示注释

查看 api 资源版本标签

编辑yaml配置清单生成资源

编写yaml文件有三种方式

直接编写:即从零开始写一个yaml文件,可以借用kubectl explain 字段名查看。

生成模板:使用kubectl run 资源 --dry-run=client > xxx.yaml 生成yaml模板文件,然后进行编辑。

导出模板:将现有资源使用 yaml 格式输出并导入 xxx.yaml 文件,然后进行编辑。

编写yaml文件

yaml创建Deployment
bash 复制代码
mkdir /opt/demo
cd demo/

vim nginx-deployment.yaml
---
apiVersion: apps/v1    //指定api版本标签
kind: Deployment    //定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:    //定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment    //定义资源的名称,在同一个namespace空间中必须是唯一的
  namespace: kube-public    //定义资源所在命名空间
  labels:    //定义资源标签
    app: nginx
    name: test01
spec:    //定义资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3    //副本数
  selector:    //定义标签选择器
    matchLabels:    //定义匹配标签
      app: nginx    //需与.spec.template.metadata.labels 定义的标签保持一致
  template:    //定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:    //定义Pod副本将使用的标签,需与.spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:    //定义容器属性
      - name: nignx    //定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.21    //定义容器使用的镜像以及版本
        ports:
        - name: http
          containerPort: 80    定义容器的对外的端口
        - name: https
          containerPort: 443
bash 复制代码
#创建资源对象
kubectl create -f nginx-deployment.yaml

#查看创建的pod资源
kubectl get pods -n kube-public
yaml创建service服务对外提供访问并测试
bash 复制代码
vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 30007
  clusterIP: 10.0.0.239
  selector:
    app: nginx
bash 复制代码
/创建资源对象
kubectl create -f nginx-service.yaml 

//查看创建的service
kubectl get svc

在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.75.20:30007

http://192.168.75.30:30007

详解k8s中的port:

●port

port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

●nodePort

nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。(默认:30000-32767)

●targetPort

targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

●containerPort

containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

yaml创建Pod
bash 复制代码
vim demo2.yaml
---
apiVersion: v1
kind: Pod    //类型为pod
metadata:
  name: mynginx
  labels:
    name: mynginx
spec:
  containers:    //指定容器镜像和端口
  - name: nginx
    image: nginx:1.18
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginxpodsvc
  labels:
    name: mynginx
spec:
  type: NodePort    //nodeport类型可以对外服务
  ports:
  - port: 8008    //服务指定8008端口,因为没有指定node端口,会随机生成
    targetPort: 80
  selector:
    name: mynginx

生成模板

pod模板
bash 复制代码
kubectl run pod名称 --image=指定镜像 --port=pod端口 --dry-run=client -o yaml > xxx.yaml
# kubectl run 可以运行一个容器
# --dry-run=client 可以实现空跑一个容器,不会实际创建(用于测试)
# -o yaml 输出yaml格式
# > xxx.yaml 将输出内容导入指定的yaml文件
serivce模板
bash 复制代码
kubectl expose deployment 服务名称 --port=服务端口 --target-port=pod端口 --type=端口类型 --dry-run=client -o yaml > xxx.yaml
deployment模板
bash 复制代码
kubectl create deployment 名称 --image=镜像 --port=容器端口 --replicas=n --dry-run=client -o yaml > xxx.yaml

导入模板

bash 复制代码
kubectl get 资源类型 资源名称 -o yaml > xxx.yaml        #这种方式需要删除改动的地方较多
#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers
相关推荐
风曦Kisaki7 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳7 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei119 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操10 小时前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操10 小时前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
瞬间&永恒~11 小时前
【MySQL】练习5-1:配置慢查询日志
linux·运维·云原生
张忠琳11 小时前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia
冷莫溪11 小时前
Docker——3.Harbor 核心架构与原理详解
docker·容器·架构
snow@li12 小时前
命名规范:企业级微服务模块前缀命名规范全景梳理
微服务·云原生·架构
逻极12 小时前
C# 从入门到精通:现代云原生与AI应用开发实战
ai·云原生·c#·.net