校园门户网站设计论文,wordpress获取所有文章列表,无人售货机,谷歌在线浏览器入口目录 一、Yaml概述
二、Yaml基本语法
三、Yaml数据结构
四、K8S资源清单描述方法
五、api资源版本标签
六、Yaml文件示例详解
1.deployment.yaml文件详解
2.Pod yaml文件详解
3.Service yaml文件详解
七、Yaml文件相关操作
1.试运行
2.生成yaml格式
3.生成json格式…
目录 一、Yaml概述
二、Yaml基本语法
三、Yaml数据结构
四、K8S资源清单描述方法
五、api资源版本标签
六、Yaml文件示例详解
1.deployment.yaml文件详解
2.Pod yaml文件详解
3.Service yaml文件详解
七、Yaml文件相关操作
1.试运行
2.生成yaml格式
3.生成json格式
4.使用yaml格式导出生成模板
5. 先查看已经部署的资源
6.导出资源配置
7.导出资源并保存在指定文件中
8.查看字段帮助信息
9.部署和卸载yaml文件 一、Yaml概述
K8S集群中对资源管理和资源对象编排部署都可以通过声明YAML文件来解决也就是可以把需要对资源对象操作编辑到 YAML 格式文件中我们把这种文件叫做资源清单文件通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。
YAML 文件 : 就是资源清单文件用于资源编排。
二、Yaml基本语法
通过缩进表示层级关系使用空格做为缩进缩进的空格数目不重要只要相同层级的元素左侧对齐即可一般缩进两个空格低版本缩进时不允许使用 Tab 键只允许使用空格使用#代表注释从这个字符一直到行尾都会被解释器忽略使用 --- 表示新的 yaml 文件开始
三、Yaml数据结构
对象键值对的集合又称为映射 (mapping) / 哈希hashes / 字典dictionary
# 对象类型对象的一组键值对使用冒号结构表示
name: Tom
age: 18# yaml 也允许另一种写法将所有键值对写成一个行内对象
hash: {name: Tom, age: 18}
数组 一组按次序排列的值又称为序列sequence / 列表 list
# 数组类型一组连词线开头的行构成一个数组
People
- Tom
- Jack# 数组也可以采用行内表示法
People: [Tom, Jack]
纯量scalars 单个的、不可再分的值
number: 10.01flag: true# 字符串默认不使用引号表示
str: hello world# 如果字符串中间包含空格或者特殊字符需要放到引号中
str1: hello: world# 双引号不会对特殊字符进行转义
s1: 张\n三
s2: 张\n三# 单引号中还有单引号需要连续用两个单引号进行转义
s3: helloworld
四、K8S资源清单描述方法
在 k8s 中一般使用 YAML 格式的文件来创建符合我们预期期望的pod这样的YAML 文件称为资源清单。主要分为两大部分一个是控制器的定义、另一个是被控制的对象。
资源清单中常用的属性名称 参数名 字段类型 说明 是否必须 version String 这里指定是K8S API的版本目前基本上是v1可以通过kubectl api-versions命令查询 是 kind String yaml文件定义的资源类型和角色比如Pod、Deployment、ReplicaSet、Service 是 metadata Object 元数据对象固定值就写metadata 是 metadata.name String 元数据对象的名字由我们自定义比如命名Pod的名字Service的名字 是 metadata.namespace String 元数据对象的命名空间由我们自定义。非必填默认为default 否 spec Object 详细定义对象固定值就写spec 是 spec.containers[] list spec对象的容器列表定义 是 spec.containers[].name String 容器名字 是 spec.containers[].image String 容器所使用的镜像 是 spec.containers[].imagePullPolicyString 定义镜像拉取策略有Always、Never、IfNotPresent三个值。 Always意思是每次都尝试重新拉取镜像。默认值是Always Never表示仅使用本地镜像。 IfNotPresent如果本地有镜像就使用本地镜像本地没有就拉取在线镜像。 否 spec.containers[].args[] List 指定容器启动命令参数因为是数组可以指定多个 否
五、api资源版本标签
[rootmaster01 ~]# kubectl api-versions admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1 #如果是业务场景一般首选使用 apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1 #带有beta字样的代表的是测试版本不用在生产环境中
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
六、Yaml文件示例详解
1.deployment.yaml文件详解
apiVersion: extensions/v1beta1 #接口版本
kind: Deployment #接口类型
metadata:name: cango-demo #Deployment名称namespace: cango-prd #命名空间labels:app: cango-demo #标签
spec:replicas: 3strategy:rollingUpdate: ##由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1 #滚动升级时会先启动1个podmaxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数template: metadata:labels:app: cango-demo #模板名称必填sepc: #定义容器模板该模板可以包含多个容器containers: - name: cango-demo #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址command: [ /bin/sh,-c,cat /etc/config/path/to/special-key ] #启动命令args: #启动参数- -storage.local.retention$(STORAGE_RETENTION)- -storage.local.memory-chunks$(STORAGE_MEMORY_CHUNKS)- -config.file/etc/prometheus/prometheus.yml- -alertmanager.urlhttp://alertmanager:9093/alertmanager- -web.external-url$(EXTERNAL_URL)#如果command和args均没有写那么用Docker默认的配置。#如果command写了但args没有写那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command不带任何参数的。#如果command没写但args写了那么Docker默认配置的ENTRYPOINT的命令行会被执行但是调用的参数是.yaml中的args。#如果如果command和args都写了那么Docker默认的配置被忽略使用.yaml的配置。imagePullPolicy: IfNotPresent #如果不存在则拉取livenessProbe: #表示container是否处于live状态。如果LivenessProbe失败LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success如果container没有提供LivenessProbe则也认为是SuccesshttpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources: ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv: ##通过环境变量的方式直接传递pod自定义Linux OS环境变量- name: LOCAL_KEY #本地Keyvalue: value- name: CONFIG_MAP_KEY #局策略可使用configMap的配置KeyvalueFrom:configMapKeyRef:name: special-config #configmap中找到name为special-configkey: special.type #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080 #对service暴露端口volumeMounts: #挂载volumes中定义的磁盘- name: log-cachemount: /tmp/log- name: sdb #普通用法该卷跟随容器销毁挂载一个目录mountPath: /data/media - name: nfs-client-root #直接挂载硬盘方法如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config #高级用法第1种将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下如果存在同名文件直接覆盖。mountPath: /etc/config - name: rbd-pvc #高级用法第2中挂载PVC(PresistentVolumeClaim)#使用volume将ConfigMap作为文件或目录直接挂载其中每一个key-value键值对都会生成一个文件key为文件名value为内容volumes: # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config #ConfigMap中名称items:- key: log-script #ConfigMap中的Keypath: path/to/log-script #指定目录下的一个相对路径path/to/log-script- key: backup-script #ConfigMap中的Keypath: path/to/backup-script #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root #供挂载NFS存储类型nfs:server: 10.42.0.55 #NFS服务器地址path: /opt/public #showmount -e 看一下路径- name: rbd-pvc #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1 #挂载已经申请的pvc磁盘2.Pod yaml文件详解
apiVersion: v1 #必选版本号例如v1
kind: Pod #必选Pod
metadata: #必选元数据name: string #必选Pod名称namespace: string #必选Pod所属的命名空间labels: #自定义标签- name: string #自定义标签名字annotations: #自定义注释列表- name: string
spec: #必选Pod中容器的详细定义containers: #必选Pod中容器列表- name: string #必选容器名称image: string #必选容器的镜像名称imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略Alawys表示总是下载镜像IfnotPresent表示优先使用本地镜像否则下载镜像Nerver表示仅使用本地镜像command: [string] #容器的启动命令列表如不指定使用打包时使用的启动命令args: [string] #容器的启动命令参数列表workingDir: string #容器的工作目录volumeMounts: #挂载到容器内部的存储卷配置- name: string #引用pod定义的共享存储卷的名称需用volumes[]部分定义的的卷名mountPath: string #存储卷在容器内mount的绝对路径应少于512字符readOnly: boolean #是否为只读模式ports: #需要暴露的端口库号列表- name: string #端口号名称containerPort: int #容器需要监听的端口号hostPort: int #容器所在主机需要监听的端口号默认与Container相同protocol: string #端口协议支持TCP和UDP默认TCPenv: #容器运行前需设置的环境变量列表- name: string #环境变量名称value: string #环境变量的值resources: #资源限制和请求的设置limits: #资源限制的设置cpu: string #Cpu的限制单位为core数将用于docker run --cpu-shares参数memory: string #内存限制单位可以为Mib/Gib将用于docker run --memory参数requests: #资源请求的设置cpu: string #Cpu请求容器启动的初始可用数量memory: string #内存清楚容器启动的初始可用数量livenessProbe: #对Pod内个容器健康检查的设置当探测无响应几次后将自动重启该容器检查方法有exec、httpGet和tcpSocket对一个容器只需设置其中一种方法即可exec: #对Pod容器内检查方式设置为exec方式command: [string] #exec方式需要制定的命令或脚本httpGet: #对Pod内个容器健康检查方法设置为HttpGet需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0 #容器启动完成后首次探测的时间单位为秒timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间单位秒默认1秒periodSeconds: 0 #对容器监控检查的定期探测时间设置单位秒默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure] #Pod的重启策略Always表示一旦不管以何种方式终止运行kubelet都将重启OnFailure表示只有Pod以非0退出码退出才重启Nerver表示不再重启该PodnodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上以keyvalue的格式指定imagePullSecrets: #Pull镜像时使用的secret名称以keysecretkey格式指定- name: stringhostNetwork:false #是否使用主机网络模式默认为false如果设置为true表示使用宿主机网络volumes: #在该pod上定义共享存储卷列表- name: string #共享存储卷名称 volumes类型有很多种emptyDir: {} #类型为emtyDir的存储卷与Pod同生命周期的一个临时目录。为空值hostPath: string #类型为hostPath的存储卷表示挂载Pod所在宿主机的目录path: string #Pod所在宿主机的目录将被用于同期中mount的目录secret: #类型为secret的存储卷挂载集群与定义的secre对象到容器内部scretname: string items: - key: stringpath: stringconfigMap: #类型为configMap的存储卷挂载预定义的configMap对象到容器内部name: stringitems:- key: string3.Service yaml文件详解
apiVersion: v1
kind: Service
matadata: #元数据name: string #service的名称namespace: string #命名空间 labels: #自定义标签属性列表- name: stringannotations: #自定义注解属性列表 - name: string
spec: #详细描述selector: [] #label selector配置将选择具有label标签的Pod作为管理 #范围type: string #service的类型指定service的访问方式默认为 #clusterIpclusterIP: string #虚拟服务地址 sessionAffinity: string #是否支持sessionports: #service需要暴露的端口列表- name: string #端口名称protocol: string #端口协议支持TCP和UDP默认TCPport: int #服务监听的端口号targetPort: int #需要转发到后端Pod的端口号nodePort: int #当type NodePort时指定映射到物理机的端口号status: #当spce.typeLoadBalancer时设置外部负载均衡器的地址loadBalancer: #外部负载均衡器 ingress: #外部负载均衡器 ip: string #外部负载均衡器的Ip地址值hostname: string #外部负载均衡器的主机名七、Yaml文件相关操作
1.试运行
//kubectl run --dry-runclient 打印相应的 API 对象而不执行创建
kubectl run nginx-test --imagenginx --port80 --dry-runclient2.生成yaml格式
#查看生成yaml格式
kubectl run nginx-test --imagenginx --port80 --replicas3 --dry-runclient -o yamlkubectl create deployment nginx-deploy --imagenginx --port80 --replicas3 --dry-runclient -o yaml3.生成json格式
#查看生成json格式
kubectl run nginx-test --imagenginx --port80 --dry-runclient -o json
kubectl create deployment nginx-deploy --imagenginx --port80 --replicas3 --dry-runclient -o json 4.使用yaml格式导出生成模板
#使用yaml格式导出生成模板并进行修改以及删除一些不必要的参数
kubectl run nginx-test --imagenginx --port80 --dry-runclient -o yaml nginx-test.yaml
kubectl create deployment nginx-deploy --imagenginx --port80 --replicas3 --dry-runclient -o yaml nginx-deploy.yaml 5. 先查看已经部署的资源
kubectl get deploy 6.导出资源配置
kubectl get deploy nginx -o yaml 7.导出资源并保存在指定文件中 kubectl get deploy nginx -o yaml deploy.yaml 8.查看字段帮助信息
#查看字段帮助信息可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers
9.部署和卸载yaml文件
kubectl apply -f xxx.yaml #部署
kubectl delete -f xxx.yaml #卸载