Kubernetes 支持YAML和JSON格式管理资源
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式;用于配置和管理,YAML是一种轻便的非标志性语言,内容格式人性化容易读懂
一,yaml语法格式
1.1 根本语法规则
- 使用空格进行缩进(不使用制表符),通常使用两个或四个空格。缩进代表层级关系,同级左边对齐。
- 符号 : 符号 - 符号 , 后面要加上空格
- 对字母的巨细写敏感
- 字符串要用双引号 “” 大概单引号 ‘’
- 多行字符串使用 | 保存换行符,>代表折叠换行符
- 符号 # 注释
- 符号 — 表示yaml文件的开始,用来分割文件
1.2 api资源版本标签
- kubectl api-servions
- admissionregistration.k8s.io/v1 #v1业务场景下首选
- admissionregistration.k8s.io/v1beta1 #beta代表测试版本,现实生产环境不用
- apiextensions.k8s.io/v1
- apiextensions.k8s.io/v1beta1
- apiregistration.k8s.io/v1
- apiregistration.k8s.io/v1beta1
- apps/v1
- authentication.k8s.io/v1
- authentication.k8s.io/v1beta1
- authorization.k8s.io/v1
- authorization.k8s.io/v1beta1
- autoscaling/v1
- autoscaling/v2beta1
- autoscaling/v2beta2
- batch/v1
- batch/v1beta1
- certificates.k8s.io/v1
- certificates.k8s.io/v1beta1
- coordination.k8s.io/v1
- coordination.k8s.io/v1beta1
- discovery.k8s.io/v1beta1
- events.k8s.io/v1
- events.k8s.io/v1beta1
- extensions/v1beta1
- flowcontrol.apiserver.k8s.io/v1beta1
- networking.k8s.io/v1
- networking.k8s.io/v1beta1
- node.k8s.io/v1
- node.k8s.io/v1beta1
- policy/v1beta1
- rbac.authorization.k8s.io/v1
- rbac.authorization.k8s.io/v1beta1
- scheduling.k8s.io/v1
- scheduling.k8s.io/v1beta1
- storage.k8s.io/v1
- storage.k8s.io/v1beta1
- v1
复制代码
1.3nginx-deployment.yaml
(1)编写yaml
- mkdir /opt/demo
- cd demo/
- vim nginx-deployment.yaml
- apiVersion: apps/v1 #指定api版本标签大写写要注意 kubectl explain deployment
- kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
- metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
- name: nginx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
- labels: #定义Deployment资源标签
- app: nginx
- spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
- replicas: 3 #定义副本数量
- selector: #定义标签选择器
- matchLabels: #定义匹配标签
- app: nginx #需与 .spec.template.metadata.labels 定义的标签保持一致
- template: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
- metadata:
- labels: #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
- app: nginx
- spec:
- containers: #定义容器属性
- - name: nginx #定义一个容器名,一个 - name: 定义一个容器
- image: nginx:1.15.4 #定义容器使用的镜像以及版本
- ports:
- - containerPort: 80 #定义容器的对外的端口
- #查看资源配置清单
- kubectl get deployment nginx -o yaml
- #解释资源配置清单
- kubectl explain deployment.metadata
- kubectl get service nginx -o yaml
- kubectl explain service.metadata
- #修改资源配置清单并应用
- 离线修改:
- 修改yaml文件,并用 kubectl·apply -f·xxxx.yaml·文件使之生效
- 当apply不生效时,先使用delete清除资源,再apply创建资源
- kubectl get service nginx -o yaml >.nginx-svc.yaml #使用重定向的方式生成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文件内容修改
- 7 metadata:
- pod元数据:
- 名称:Pod的名称,必须在命名空间内唯一。
- 命名空间:Pod所属的命名空间,便于资源的组织和管理。
- 标签和注释:用于标识和选择Pod的元数据
复制代码 





(2)创建,检察资源
- kubectl create -f nginx-deployment.yaml #创建资源对象
-
- kubectl get pods -o wide 查看创建的pod资源
复制代码
1.4创建service服务对外提供访问并测试
(1)编写yaml
- vim nginx-service.yaml
- apiVersion: v1 # API 版本,指定使用的 Kubernetes API 版本
- kind: Service # 资源类型,表示创建一个 Service
- metadata: # 元数据部分,包含服务的基本信息
- name: nginx-service # 服务名称,用于识别该 Service
- labels: # 标签,用于标识和选择相关资源
- app: nginx # 标签键值对,便于选择器使用
- spec: # 规格部分,定义服务的行为
- type: NodePort # 服务类型NodePort,允许通过节点的IP和指定端口访问服务,不设置会自定义端口从30000~32767
- ports: # 服务暴露的端口配置
- - port: 80 # 服务端口,客户端通过此端口访问服务
- targetPort: 80 # 目标端口,实际后端 Pod 上的端口
- selector: # 选择器,用于将流量路由到特定的 Pods
- app: nginx # 选择具有相同标签的 Pods
-
- 注意标签要和nginx-deployment.yaml一致
- kubectl get service nginx-service -o yaml
-
复制代码
(2)创建资源对象,并检察
- kubectl create -f nginx-service.yaml #创建资源对象
- kubectl get svc #查看创建的service
复制代码 呆板svc中已经有nginx-service
(3)在欣赏器访问
- http://192.168.88.30:31642
- http://192.168.88.40:31642
复制代码
总结
二,k8s中的pod
port
- port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service
nodePort
- nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。
targetPort
- targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向署理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。
containerPort
- containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。
三,从例子中认识资源清单编写
1.创建nginx
1.1编写nginx-1.yaml
- cd /opt/demo
- vim nginx-1.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: nginx-1
- namespace: default
- labels:
- app: myapp
- spec:
- replicas: 3
- selector:
- matchLabels:
- app: myapp
- template:
- metadata:
- labels:
- app: myapp
- spec:
- containers:
- - name: myapp
- image: nginx:latest
- ports:
- - name: http
- containerPort: 80
- kubectl create -f nginx-1.yaml
- kubectl get pod
- kubectl get pod -o wide
- curl -I 10.244.2.157
- kubectl get pod --show-labels
- kubectl get pod -A
- kubectl describe deployment.apps nginx-1
复制代码
1.2创建svc
- cd /opt/demo
- vim nginx-svc1.yaml
- apiVersion: vl
- kind: Service
- metadata:
- name: nginx-1
- namespace: default
- spec:
- type: NodePort
- ports:
- - port: 8080
- targetPort: 80
- nodePort: 32222
- selector:
- app: myapp
-
- kubectl apply -f nginx-svc1.yaml
- kubectl get pod,svc
复制代码
2.创建redis
2.1编写redis-1.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: redis-1
- labels:
- app: redis
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: redis
- template:
- metadata:
- labels:
- app: redis
- spec:
- containers:
- - name: redis
- image: redis:latest
- ports:
- - containerPort: 6379
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: redis-service4
- labels:
- app: redis
- spec:
- type: NodePort
- ports:
- - port: 6379
- targetPort: 6370
- nodePort: 32223
- selector:
- app: redis
- kubectl apply -f redis-1.yaml
- kubectl get pod,svc
复制代码
四,快速创建yaml文件
1.kubectl run --dry-run=client 打印相应的 API 对象而不执行创建
- kubectl run nginx-test --image=nginx --port=80 --dry-run=client
- kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
复制代码
2.检察生成yaml格式
- kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
- kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
复制代码
3.检察生成json格式
- kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
- kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json
复制代码
4.使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
- kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
- kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml
复制代码
5.生成的yaml文件
- vim nginx-test.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- creationTimestamp: null #删除
- labels:
- run: nginx-test
- name: nginx-test
- spec:
- containers:
- - image: nginx
- name: nginx-test
- ports:
- - containerPort: 80
- resources: {} #删除
- dnsPolicy: ClusterFirst
- restartPolicy: Always
- status: {} #删除
复制代码 6.将现有的资源生成模板导出
- kubectl get svc nginx-service -o yaml
复制代码
7.生存到文件中
- kubectl get svc nginx-service -o yaml
- > my-svc.yaml
复制代码
8.检察字段资助信息,可一层层的检察相关资源对象的资助信息
- kubectl explain deployments.spec.template.spec.containers
- 或
- kubectl explain pods.spec.containers
复制代码 总结
1.快速创建yaml文件
(1)–dry-run 下令生成
- kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml
复制代码 (2)get下令导出
- kubectl get svc nginx-service -o yaml
- > my-svc.yaml或kubectl edit svc nginx-service #复制配置,再粘贴到新文件
复制代码 2.yaml文件的学习方法:
(1)多看官方写的,能读懂理解的
(2)能照着现场的文件改着用
(3)遇到不懂的,用kubectl explain 下令检察
3.yaml文件构成
(1)控制定义,主要用来形貌资源预设的状态,控制类型:deployment,statusfulset,service。需要控制副本数量,使用的容器镜像,预先设置的配置参数和环境变量
metadata,selector,template,spec
(2)被控制对象,被控制器(deployment,statusfulset)管理的资源实例(pod),对控制对象的定义,状态由yaml文件决定
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |