当前位置:   article > 正文

kubectl 命令行管理K8S(下)

kubectl 命令行管理K8S(下)

目录

声明式资源管理方式

介绍

命令

修改yaml文件指定的资源

离线修改

在线修改

YAML 语法格式

查看 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文件指定的资源

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

删除yaml文件指定的资源

 kubectl delete -f xxx.yaml

 查看资源的yaml格式信息

kubectl get 资源名称 -o yaml

 查看yaml文件字段说明

kubectl explain yaml文件中的字段(多级字段用 . 隔开)

 

修改yaml文件指定的资源

离线修改

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

  1. 例:
  2. kubectl get service nginx -o yaml > nginx-svc.yaml
  3. vim nginx-svc.yaml #修改port: 8080
  4. kubectl delete -f nginx-svc.yaml
  5. kubectl apply -f nginx-svc.yaml
  6. 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
  1. mkdir /opt/demo
  2. cd demo/
  3. vim nginx-deployment.yaml
  4. ---
  5. apiVersion: apps/v1 //指定api版本标签
  6. kind: Deployment //定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
  7. metadata: //定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  8. name: nginx-deployment //定义资源的名称,在同一个namespace空间中必须是唯一的
  9. namespace: kube-public //定义资源所在命名空间
  10. labels: //定义资源标签
  11. app: nginx
  12. name: test01
  13. spec: //定义资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  14. replicas: 3 //副本数
  15. selector: //定义标签选择器
  16. matchLabels: //定义匹配标签
  17. app: nginx //需与.spec.template.metadata.labels 定义的标签保持一致
  18. template: //定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
  19. metadata:
  20. labels: //定义Pod副本将使用的标签,需与.spec.selector.matchLabels 定义的标签保持一致
  21. app: nginx
  22. spec:
  23. containers: //定义容器属性
  24. - name: nignx //定义一个容器名,一个 - name: 定义一个容器
  25. image: nginx:1.21 //定义容器使用的镜像以及版本
  26. ports:
  27. - name: http
  28. containerPort: 80 定义容器的对外的端口
  29. - name: https
  30. containerPort: 443

 

  1. #创建资源对象
  2. kubectl create -f nginx-deployment.yaml
  3. #查看创建的pod资源
  4. kubectl get pods -n kube-public

 

 yaml创建service服务对外提供访问并测试
  1. vim nginx-service.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service
  6. labels:
  7. app: nginx
  8. spec:
  9. type: NodePort
  10. ports:
  11. - port: 8080
  12. targetPort: 80
  13. nodePort: 30007
  14. clusterIP: 10.0.0.239
  15. selector:
  16. app: nginx

 

  1. /创建资源对象
  2. kubectl create -f nginx-service.yaml
  3. //查看创建的service
  4. 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 
  1. vim demo2.yaml
  2. ---
  3. apiVersion: v1
  4. kind: Pod //类型为pod
  5. metadata:
  6. name: mynginx
  7. labels:
  8. name: mynginx
  9. spec:
  10. containers: //指定容器镜像和端口
  11. - name: nginx
  12. image: nginx:1.18
  13. ports:
  14. - containerPort: 80
  15. ---
  16. apiVersion: v1
  17. kind: Service
  18. metadata:
  19. name: nginxpodsvc
  20. labels:
  21. name: mynginx
  22. spec:
  23. type: NodePort //nodeport类型可以对外服务
  24. ports:
  25. - port: 8008 //服务指定8008端口,因为没有指定node端口,会随机生成
  26. targetPort: 80
  27. selector:
  28. name: mynginx

 

 

 

 

 

生成模板

pod模板
  1. kubectl run pod名称 --image=指定镜像 --port=pod端口 --dry-run=client -o yaml > xxx.yaml
  2. # kubectl run 可以运行一个容器
  3. # --dry-run=client 可以实现空跑一个容器,不会实际创建(用于测试)
  4. # -o yaml 输出yaml格式
  5. # > xxx.yaml 将输出内容导入指定的yaml文件

 

serivce模板

kubectl expose deployment 服务名称 --port=服务端口 --target-port=pod端口 --type=端口类型 --dry-run=client -o yaml > xxx.yaml

 

deployment模板
kubectl create deployment 名称 --image=镜像 --port=容器端口 --replicas=n --dry-run=client -o yaml > xxx.yaml

 

导入模板

  1. kubectl get 资源类型 资源名称 -o yaml > xxx.yaml #这种方式需要删除改动的地方较多
  2. #查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
  3. kubectl explain deployments.spec.template.spec.containers
  4. kubectl explain pods.spec.containers

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/158417?site
推荐阅读
相关标签
  

闽ICP备14008679号