Kubernetes——YAML文件
yaml文件的结尾后缀名.yaml或者.yml都能够识别。
yaml文件就像脚本一样,可以放在任意的位置。
编写yaml文件需要用到的帮助手册的查看:
kubectl explain deploy #使用explain进行查看
kubectl explain deploy.spec.template #可以一级一级查下去中间用.连接即可。
需要提前知道的:
imagePullPolicy有三种模式
Nerver:不拉取镜像,如果本地没有镜像,那么容器起不来。
Always:默认选项,再使用yaml文件部署pod的时候,无论本地是否有镜像,都尝试拉取dockerhub上的镜像。
IfNotPresent:如果本地没有再去dockerhub上拉取。
#vim nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx1
spec:
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
kubectl apply -f nginx.yaml
kubectl delete -f nginx.yaml
#也可以通过kubectl delete deploy nginx1
#yaml文件一定要严格按照格式编写,该对齐的一定要严格对齐。
# vim nginx-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
kubectl apply -f nginx-pod.yml
#单独的pod没有deploy来管控它,这种不受管控的pod可以直接通过 kubectl delete pod nginx 来删除。
kubectl delete -f nginx-pod.yml
kubectl get po
kubectl api-resources #查看各资源的缩写
标签Labels
labels是service(svc)找到pod的途径
相当于是对pod打标签
kubectl get po --show-labels #可以查看到pod的标签
给资源打标签:
kubectl label no node3 disktype=ssd #node3打上disktype=ssd的标签
kubectl get no --show-labels
给node打上标签之后,使用yaml文件来进行标签选择:
kubectl explain deploy.spec.template.spec | grep -C 5 -i selector 可以查看选择器nodeSelector
kind: Deployment
metadata:
name: nginx2
spec:
replicas: 5
template:
labels:
run: nginx
spec:
nodeSelector:
disktype: ssd
container:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
kubectl get po -o wide -w #会发现5个都运行在了标签为disktype=ssd的node3上。
如果你在一个yaml文件中定义一个deploy运行5个pod,这5个pod在集群的node中均有分布。
如果其中的一个node节点因为某种原因宕机了,那么还会有5个pod在运行吗?
答案是会的,因为你的deploy的预期是5个,如果你的节点down掉了,他会在其他的节点上去启动相应的pod来满足5个pod的要求。
使用kubectl get po -o wide 查看,会发现running状态的pod还是5个,他会在好的节点上去启动副本来满足预期。
kubectl get deploy
kubectl get no -w #可以监控node的状态-w watch
当你的节点通过你的维护又跑起来了之后,通过kubectl get pod -o wide 查看发现:这个pod并不会再回到ken3,
因为pod一旦分布到node上部署,直到生命周期完结都不会离开相应的node
deploy job(相当于at,一次性) cj —— 相当于crond job
deploy daemon —— 持久运行
编写job的yaml文件:
kubectl explain job
#vim job.yaml
kind: Job
metadata:
name: my_job
spec:
template:
spec:
restartPolicy: Nerver #Always是默认选项,总是重启,Job不能使用Always
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- echo "test";sleep 3
kubectl get job
kubectl get po #状态是complete,完成job后退出了
kubectl logs my_job-s2grt #返回了test,说明echo "test"已经执行成功了。
Never:不重启
Always:总是重启,默认选项
OnFailure:只有pod异常退出时,返回码非0就会重启
然后将执行的echo “test” 命令改错,然后再启动
kubectl apply -f job.yaml
kubectl get job
kubectl get po -w #状态complete之后
kubectl logs my_job-s2grt #返回的是/bin/sh找不到这条命令
kubectl get po -w #会发现一直在生成pod,但是状态是Error
kubectl logs my_job-swe2sd #返回的是/bin/sh找不到这条命令
kubectl get po #一直在出现创建pod的情况
因为job的期望完成值是1,但是由于job的内部错误,导致永远无法完成该job任务,且由于重启的策略是Never,所以job会不断生成新的pod
去努力试图完成这个job任务。
当你的重启策略为OnFailure的时候,这个时候job会不断重启一个pod来满足自己的期望完成值。
如果你再查看的pod的状态:kubectl get po ,它的restarts会一直不断增加。
job不能使用Always,如果将重启策略设为always,kubectl apply -f job.yaml 会报出不支持的错误。
kind: Job
metadata:
name:my-job
spec:
parallelism: 2
template:
spec:
restartPolicy: Nerver
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- echo "test"
kubectl get po
kind: Job
metadata:
name: my-job
spec:
completions: 6
parallelism: 2
template:
spec:
restartPolicy: Nerver
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- echo "test"
kubectl apply -f job.yaml
kubectl get po #发现同一时间是运行2个pod,一共完成6个。
生成job的yaml文件:
kubectl create job job1 --image=busybox --dry-run -o yaml
kubectl create job job1 --image=busybox --dry-run -o yaml > job1.yaml
然后编辑这个文件做一些简单的修改即可。这是编写yaml文件的简单方法。
kubectl create deploy deploy1 --image=busybox --dry-run -o yaml > deploy1.yaml
然后修改即可
kubectl explain ds
vim ds.yaml
kind: DaemonSet
metadata:
name: myds
spec:
template:
metadata:
labels:
run: nginx
spec:
container:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
kubectl get po -o wide #daemonset 每个节点都运行了一个
kubectl explain cj
vim cj.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: mycj
spec:
schedule: '* * * * *'
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: busybox
image: busybox
iamgePullPolicy: IfNotPresent
args:
- /bin/sh
- -c
- echo "test"
kubectl apply -f cj.yaml
kubectl get po -o wide #相应的pod每分钟启动一次
kubectl logs mycj-215123546-wert12 #返回test
外网访问pod实际上是通过service,外网通过service的ip,service通过标签选择器来找到其对用的pod,报文的转发是通过kube-proxy
kind: Deployment
metadata:
name: deploy1
spec:
replicas: 2
selector:
matchLabels:
name: ken
template:
metadata:
labels:
name:ken
spec:
containers:
- image: nginx
name: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80 #加上这条信息相当于Expose
kubectl get po -o wide #这个时候能够看到pod的ip,但是只能集群内部访问
kubectl get ns #查看namespace
kind: Deployment
metadata:
name: deploy1
spec:
replicas: 2
selector:
matchLabels:
name: ken
template:
metadata:
labels:
name:ken
spec:
containers:
- image: nginx
name: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
selector:
name: ken
ports:
- port: 80 #svc的端口
targetPort: 80 #pod的端口
kubectl apply -f svc.yaml
kubectl get po -o wide
kubectl get svc #可以查看到svc的ip以及映射到的host主机的端口在30000以上
kubectl describe svc mysvc #可以查看到svc自己的ip,以及pod的endpoints(ip+port)
现在访问host的ip+映射的端口即可访问pod
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort
selector:
name: ken
ports:
- port: 80
targetPort: 80
nodePort: 30002
kubectl apply -f svc.yaml
kubectl get svc #发现host的端口映射已经被更改为30002
Kubernetes——YAML文件的更多相关文章
- Kubernetes YAML 文件全字段详解
Kubernetes YAML 文件全字段详解 Deployment yaml 其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样. apiVe ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
- 入门Kubernetes - YAML文件
前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...
- Docker Kubernetes YAML文件常用指令
YAML文件常用指令 配置文件说明: 定义配置时,指定最新稳定版API(当前为v1). 配置文件应该存储在集群之外的版本控制仓库中.如果需要,可以快速回滚配置.重新创建和恢复. 应该使用YAML格式编 ...
- Kubernetes (yaml 文件详解)
# yaml格式的pod定义文件完整内容:apiVersion: v1 #必选,版本号,例如v1kind: Pod #必选,Podmetadata: #必选,元数据 ...
- kubernetes yaml格式的Pod配置文件
kubernetes yaml文件解析 # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: #必 ...
- 验证Kubernetes YAML的最佳实践和策略
本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...
- Kubernetes YAML最佳实践和策略
Kubernetes工作负载最常用YAML格式的文件来定义. YAML的问题之一就是很难描述清单文件之间的约束或关系. 如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办? 如 ...
- [Kubernetes]如何使用yaml文件使得可以向外暴露服务
最近因为项目需要上线,所以这段时间都扑到了Kubernetes上面. 昨天老大交代了一个任务,大概就是这样的: 看起来挺简单的,因为相关文件都给我了,我以为直接把文件拖上去,然后在访问ip:port方 ...
随机推荐
- Django框架中的Cookie和Session
学习内容: (1)cookie (2)session Web是基于请求/响应模式,HTTP协议是无状态的,但是基于 Internet的各种服务系统应运而生,建立商业站点或者功能比较完善的个人站点,常常 ...
- iOS中的主要框架framework
在日常的iOS项目开发中,主要使用的就是Foundation和UIKit这两个框架. (一)Foundation框架 Foundation是对Core Foundation框架的一个封装,使用Foun ...
- HDU1285-确定比赛名次(拓扑+优先队列)
对于拓扑排序,每次能入队的只有入度为0的点,所以用优先队列即可. 以及,第一组数据日常卡OJ,这组数据跳了一个点,我的程序这个版本也过不了(其实写了另一个版的),稍微改改更正确. #include & ...
- Kubernetes的pod控制器及ReplicaSet控制器类型的pod的定义
为什么需要Pod Kubernetes项目之所以这么做的原因: 因为Kubernetes是谷歌公司基于Borg项目做出来的,谷歌工程师发现,他们部署的应用往往存在这进程与进程组的关系.具体说呢,就是这 ...
- 吴裕雄--天生自然Python Matplotlib库学习笔记:matplotlib绘图(1)
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式. from pylab import * size = 128, ...
- N-tier architecture N层架构 (转)
下面的内容既有我的理解,也有翻译的内容,翻译的书名为: <<Expert C# 2008 Business Objects >>http://www.douban.com/su ...
- Go语言学习笔记(三)
一.浮点数 1.概述 浮点类型用于存储带有小数点的数字 一个整数数值可以赋值给浮点类型但是一个整型变量不可以赋值给浮点类型 浮点数进行运算的结果是浮点数 Go语言中浮点类型有两个 float32 fl ...
- 操作系统OS,Python - 有了GIL为什么还要threading.Lock()?
参考: https://stackoverflow.com/questions/49859287/what-is-the-need-of-threading-lock-when-cpython-has ...
- 折腾前端条形码(Barcode)扫描识别, 笔记
barcode @zxing/library 方案 本地勉强把 Demo 在 React 里面跑通, 但是不好控制开始结束, API 不明确.实际识别率很低. 我是用手机屏幕放的条形码, 大概也有影响 ...
- ubuntu开启mysql远程连接,并开启3306端口
mysql -u root -p 修改mysql库的user表,将host项,从localhost改为%.%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip mysql& ...