赞
踩
目录
1.适合于对资源的修改操作
2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
4.语法格式:kubectl create/apply/delete -f xxxx.yaml
可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作
应用yaml文件指定的资源
- kubectl create -f xxx.yaml
- kubectl apply -f xxx.yaml
- #区别:使用create创建资源是一次性的,如果使用apply创建,后期修改yaml文件再次执行apply可以实现更新资源
删除yaml文件指定的资源
kubectl delete -f xxx.yaml
查看资源的yaml格式信息
kubectl get 资源名称 -o yaml
查看yaml文件字段说明
kubectl explain yaml文件中的字段(多级字段用 . 隔开)
修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源
- 例:
- 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文件内容修改
●大小写敏感
●使用缩进表示层级关系
●不支持Tab键制表符缩进,只使用空格缩进
●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
●符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
●“---”表示YAML格式,一个文件的开始,用于分隔文件间
●“#”表示注释
编写yaml文件有三种方式
直接编写:即从零开始写一个yaml文件,可以借用kubectl explain 字段名查看。
生成模板:使用kubectl run 资源 --dry-run=client > xxx.yaml 生成yaml模板文件,然后进行编辑。
导出模板:将现有资源使用 yaml 格式输出并导入 xxx.yaml 文件,然后进行编辑。
- 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
- #创建资源对象
- kubectl create -f nginx-deployment.yaml
-
- #查看创建的pod资源
- kubectl get pods -n kube-public
- 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
- /创建资源对象
- 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。
- 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
- kubectl run pod名称 --image=指定镜像 --port=pod端口 --dry-run=client -o yaml > xxx.yaml
- # kubectl run 可以运行一个容器
- # --dry-run=client 可以实现空跑一个容器,不会实际创建(用于测试)
- # -o yaml 输出yaml格式
- # > xxx.yaml 将输出内容导入指定的yaml文件
kubectl expose deployment 服务名称 --port=服务端口 --target-port=pod端口 --type=端口类型 --dry-run=client -o yaml > xxx.yaml
kubectl create deployment 名称 --image=镜像 --port=容器端口 --replicas=n --dry-run=client -o yaml > xxx.yaml
- kubectl get 资源类型 资源名称 -o yaml > xxx.yaml #这种方式需要删除改动的地方较多
- #查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
- kubectl explain deployments.spec.template.spec.containers
- 或
- kubectl explain pods.spec.containers
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。