一、yaml文件详解
1.yaml常见语法
1) apiVersion
kubectl api-versions
- v1:Kubernetes API的稳定版本,包含很多核心对象:pod、service等。
2) kind
kind指定这个资源对象的类型,如pod、deployment、statefulset、job、cronjob、Endpoints service
- Endpoints :可以把外部的链接到k8s系统中
- service:部署一个内部的IP,其他deployment可以链接
- deployment:部署一个pod,内部只能链接service,无法互相连接。
3) metadata
metadata常用的配置项有name:显示的名字,namespace:归属的命名空间。
4) spec
一个嵌套字典与列表的配置项,也是主要的配置项,支持的子项非常多,根据资源对象的不同,子项会有不同的配置。
如一个pod的spec配置:
apiVersion: v1 #必选 版本号
kind: Pod #必选
metadata: #必选 元数据
name: nginx #必选 Pod名称
labels: #自定义标签
app: nginx #自定义标签名称
spec: #必选 Pod中容器的详细定义
containers: #必选 Pod中容器列表,一个pod里会有多个容器
- name:nginx #必选 容器名称
image:nginx #必选 容器的镜像名称
imagePullPolicy:IfNotPresent # [Always | Never | IfNotPresent] 获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
ports: #需要暴露的端口库号列表
- containerPort:80 # 容器需要监听的端口号
restartPolicy: Always # [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
如一个service的spec配置:
apiVersion: v1 #必选 版本号
kind: Service #必选
metadata: #必选 元数据
name: service-hello #必选 Pod名称
labels: #自定义标签
name: service-hello #自定义标签名称
spec: #必选 Pod中容器的详细定义
type: NodePort #这里代表是NodePort类型的,另外还有ingress,LoadBalancer
ports:
- port:80 #这里的端口和clusterIP(kubectl describe service service-hello中的IP的port)对应,即在集群中所有机器上curl clusterIP:80可访问发布的应用服务
targetPort:8080 #端口一定要和contrainer暴露出来的端口对应,nodejs暴露出来的端口是8080
protocol: TCP
nodePort: 31111 #所有的节点都会开发此端口30000~32767,此端口供外部调用
selector:
run:hello #这里选择器一定要选择容器的标签
5) nodeName
nodeName用于将Pod调度到指定的Node名称上。
# SchedulePolicy-nodeName.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: busybox
name: busyboxnn
namespace: default
spec:
nodeName: k8s-node1
containers:
- image: busybox
name: bs
command:
- "ping"
- "baidu.com"
6) nodeSelector
nodeSelector用于将Pod调度到匹配Label的Node上,先给规划node用途,然后打标签,例如将两台node划分给不同的团队使用:
$ kubectl label nodes k8s-node1 team=a
$ kubectl label nodes k8s-node2 team=b
7) taint(污点)与tolerations(容忍)
- 污点:节点独占,例如具有特殊硬件设备的节点,如GPU
设置污点的命令:kubectl taint node [node name] key=value[effect]
去掉污点:kubectl taint node k8s-node1 abc=123:NoSchedule
其中[effect]值为:
NoSchedule :一定不能被调度。
PreferNoSchedule:尽量不要调度。
NoExecute:不仅不会调度,还会驱逐Node上已有的Pod。 - 再创建pod只有声明了容忍污点(tolerations),才允许被调度到abc=123污点节点上,如果不配置容忍污点,则永远不会调度到k8s-node1
- master节点默认是打了污点标记,不调度的,去掉污点标记
#添加 尽量不调度 PreferNoSchedule
kubectl taint nodes k8s-master node-role.kubernetes.io/master:PreferNoSchedule
#去除污点NoSchedule,最后一个"-"代表删除
kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
# SchedulePolicy-tolerations.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: busybox
name: busybox3
namespace: default
spec:
tolerations:
- key: "abc"
operator: "Equal"
value: "123"
effect: "NoSchedule"
containers:
- image: busybox
name: bs
command:
- "ping"
- "baidu.com"
2.port详解
- port:是k8s集群内部访问service的端口,即通过clusterIP:port可以访问到某个service
- nodePort:是外部访问k8s集群中service的端口,通过nodeIP:nodePort可以从外部访问到某个service。
- targetPort:是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器
- containerPort:是pod的内部端口,targetPort映射到containerPort。
3.Label与Selector
1)Label是k8s系列中另外一个核心概念。是一组绑定到k8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一,label可以附加到各种资源对象上,如Node,Pod,Service,RC等。通过给指定的资源对象捆绑一个或多个不同的label来实现对维度的资源分组管理功能,以便于灵活,方便地进行资源分配、调度、配置、部署等管理工作文章来源:https://www.toymoban.com/news/detail-419397.html
- 版本标签:“release” : “stable” , “release” : “canary”…
- 环境标签:“environment” : “dev” , “environment” : “production”
- 架构标签:“tier” : “frontend” , “tier” : “backend” , “tier” : “middleware”
- 分区标签:“partition” : “customerA” , “partition” : “customerB”…
- 质量管控标签:“track” : “daily” , “track” : “weekly”
2)Selector
label selector是k8s核心分组机制,通过label selector客户端/用户能够识别一组有共同特征或属性的资源对象。符合这个标签的pod会做为这个service的backend。文章来源地址https://www.toymoban.com/news/detail-419397.html
apiVersion: v1
kind: Service
metadata:
name: hello
labels:
app: hello
spec:
ports:
- port: 80
targetPort: 80
selector:
app: hello
4.kubectl create与apply区别
- kubectl create:可创建新资源,因此如果重复运行该命令,则会报错,因为资源名称在名称空间中是唯一的。
- kubectl apply:将配置应用于资源,如果资源不在,那么它将被创建。如果资源在,做更
到了这里,关于k8s:基础内容和部署简单nginx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!