二、k8s中的yaml
kubernetes支持YAML和JSON格式管理资源对象
JSON格式:主要用于api接口之间消息的传递
YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读
#查看资源配置清单 [root@master01 opt]# kubectl get deployment nginx -o yaml apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-07-17T11:55:25Z" generation: 2 labels: app: nginx managedFields: ...... #解释资源配置清单 kubectl explain deployment.metadata kubectl get service nginx -o yaml kubectl explain service.metadata #删除资源配置清单 #陈述式删除: kubectl delete service nginx #声明式删除: kubectl delete -f nginx-svc.yaml
2.1 查看 api 资源版本标签
#查看每个资源的api版本号 三种方法 kubectl api-versions kubectl api-resources kubectl explain deployment
2.2 yaml案例1
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空间中必须是唯一的 labels: #定义Deployment资源标签 app: nginx namespace: test #可以定义命令空间,但必须是存在的,不写就是默认命令空间 spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性 replicas: 3 #定义副本数量 selector: #定义标签选择器 matchLabels: #定义匹配标签 app: nginx #需与 .spec.template.metadata.labels 定义的标签保持一致 #以上是Deployment自己的配置及属性,以下是Deployment创建的pod的属性 template: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配 metadata: #pod的元信息 labels: #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致 app: nginx spec: containers: #定义容器属性 - name: nginx #定义一个容器名,一个 - name: 定义一个容器 image: nginx:1.15.4 #定义容器使用的镜像以及版本 ports: #代表容器可以有两个端口 - name: https containerPort: 443 - name: http containerPort: 80 #定义容器的对外的端口
#创建service服务对外提供访问并测试 vim nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx spec: type: NodePort ports: - port: 80 targetPort: 80 selector: app: nginx
此时在浏览器输入 nodeIP:nodePort 即可访问
2.3 yaml案例2
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-stevelu namespace: default labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: soscscs/myapp:v1 ports: - name: http containerPort: 80
#定义service的yaml文件 vim demo1-svc.yaml apiVersion: v1 kind: Service metadata: name: myapp-svc namespace: default spec: type: NodePort ports: - port: 8080 targetPort: 80 nodePort: 31234 selector: app: myapp
[root@master01 demo]# curl 10.96.222.48:8080 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
2.4 yaml案例3
通过现有模板生成
#通过现有模板生成 kubectl get deployments.apps myapp-stevelu -o yaml > demo2.yaml vim demo2.yaml #通过模板生成的yaml文件有很长一段我们将没有用的删掉,只留下有用信息 apiVersion: apps/v1 kind: Deployment metadata: labels: app: myapp name: myapp-stevelu namespace: default spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - image: soscscs/myapp:v1 name: myapp ports: - containerPort: 80 name: http protocol: TCP
2.5 yaml案例4
根据陈述式命令导出一个yaml配置文件,俗称空跑,并不会正在生成deployment,再根据生成的yaml文件进行修改成自己想要的
[root@master01 demo]# kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o yaml>demo3.yaml [root@master01 demo]# ls demo1-svc.yaml demo1.yaml demo2.yaml demo3.yaml nginx-deployment.yaml nginx-service.yaml [root@master01 demo]# vim demo3.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: myapp name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - image: soscscs/myapp:v1 name: myapp
–dry-run=client的对象不是由apiserver验证的,只是由客户端验证
2.6 yaml案例5
资源类型:pod
资源名称:my-nginx
命名空间:test
容器镜像:nginx:1.14
容器端口:80
标签:app=nginx
创建Deployment资源,资源名称为nginx-deploy,命名空间为test,4个副本,nginx:1.14,镜像端口:80,标签:name=nginx-test1、service 关联上而创建的Pod,资源名称为nginx-deploy-sve
#根据陈述式命令导出一个配置文件 [root@master01 demo]# kubectl create -n test deployment nginx-deploy --image=nginx:1.14 --port=80 --replicas=4 --dry-run=client -oyaml >deploy.yaml #创建test命名空间 [root@master01 demo]# kubectl create ns test #根据需求修改 [root@master01 demo]# vim deploy.yaml apiVersion: apps/v1 #deployment版本号 kind: Deployment #类型 metadata: #资源的元信息 labels: #标签 name: nginx-test1 name: nginx-deploy #资源名称 namespace: test #命名空间(一个命名空间下,同种类型下的资源名称是唯一的) spec: #下面设置资源属性 replicas: 4 #副本数 selector: #标签选择器 matchLabels: name: nginx-test1 template: #该控制器创建的pod副本的模板 metadata: #pod的元信息 labels: #pod的标签 name: nginx-test1 spec: #pod的属性 containers: #容器的信息 - image: nginx:1.14 #容器的信息 name: nginx #容器的名称 ports: #容器的端口 - containerPort: 80 [root@master01 demo]# kubectl apply -f deploy.yaml deployment.apps/nginx-deploy created #查看创建的资源 [root@master01 demo]# kubectl get all -n test NAME READY STATUS RESTARTS AGE pod/nginx-deploy-5bbd7cdf77-69f7x 1/1 Running 0 4m39s pod/nginx-deploy-5bbd7cdf77-8t6r8 1/1 Running 0 4m39s pod/nginx-deploy-5bbd7cdf77-lx9vt 1/1 Running 0 4m39s pod/nginx-deploy-5bbd7cdf77-znz5h 1/1 Running 0 4m39s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deploy 4/4 4 4 4m39s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deploy-5bbd7cdf77 4 4 4 4m39s
#生成service资源的yaml文件,并修改 [root@master01 demo]# kubectl expose -n test deployment nginx-deploy --port=80 --target-port=80 --type=NodePort --dry-run=client -oyaml apiVersion: v1 #service的版本号 kind: Service metadata: labels: name: nginx-test1 name: nginx-deploy namespace: test spec: ports: #service端口号 - port: 80 #clusterIP protocol: TCP #端口协议 targetPort: 80 #跟容器端口的对应关系 nodePort: 31111 #nodeip的端口号 selector: #标签选择器 name: nginx-test1 type: NodePort #service的类型 #将上面修改后的service资源写入文件 [root@master01 demo]# vim deploy-svc.yaml [root@master01 demo]# kubectl apply -f deploy-svc.yaml service/nginx-deploy created #查看service详细信息 [root@master01 demo]# kubectl describe svc -n test Name: nginx-deploy Namespace: test Labels: name=nginx-test1 Annotations: <none> Selector: name=nginx-test1 Type: NodePort IP Families: <none> IP: 10.96.77.82 IPs: 10.96.77.82 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31111/TCP Endpoints: 10.244.1.26:80,10.244.1. Session Affinity: None External Traffic Policy: Cluster Events: <none>
总结
编写service配置清单方法
1.根据现有的文件输出一个yaml格式的配置文件,再修改
2.根据陈述式命令导出一个配置文件(空跑)
kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o json>demo4.yaml kukectl run my=nginx --image=nginx:1.14 --port=80 --dry-run=client -oyaml > pod -my-nginx.yaml
3.从头到尾自己编写
查看某个资源对应的版本号
#法一 kubectl api-versions #法二 kubectl api-resources #法三 kubectl explain [资源名称]