Kubernetes的文件形式管理
●Kubernetes支持YAML和JSON格式创建资源对象
●JSON格式用于接口之间消息的传递(用于开发层面)
●YAML格式用于配置和管理(用于创建资源)
●YAML是一种简洁的非标记性语言
●语法格式:
- 缩进标识层级关系
- 不支持制表符(tab键)缩进,使用空格缩进
- 通常开头缩进两个空格
- 字符后缩进一个空格,如冒号,逗号,短横杆等
- “—”表示YAML格式,一个文件的开始
- “#”表示注释
[root@master ~]# kubectl api-versions ##查看版本号
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1 ##用于调某个接口使用
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1 ##用的较多
apps/v1beta1 ##带有beta代表测试版本
apps/v1beta2
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/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1 ##网络资源
policy/v1beta1
rbac.authorization.k8s.io/v1 ##rbac权限资源
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1 ##调度资源
storage.k8s.io/v1 ##存储资源
storage.k8s.io/v1beta1
v1
一.如何使用yaml文件创建某个资源
[root@master ~]# mkdir demo ##创建一个存放目录
[root@master ~]# cd demo/
[root@master demo]# vim nginx-deployment.yaml ##编写一个nginx的yaml文件资源
apiVersion: apps/v1 ##创建一个业务
kind: Deployment ##创建资源的类型(无状态化)
metadata: ##描述信息
name: nginx-deployment ##资源名称
labels: ##定义标签
app: nginx
spec: ##描述资源属性
replicas: 3 ##副本集数量为3
selector: ##选择器
matchLabels: ##匹配标签
app: nginx ##注意这边标签和上面定义的标签要一致
template: ##模板定义(可以不加)
metadata:
labels:
app: nginx ##定义标签
spec: ##模板定义的属性信息
containers: ##容器的属性
- name: nginx ##容器名称
image: nginx:1.15.4 ##下载的镜像(如果指明详细版本nginx后面要加“:”)
ports: ##端口号
- containerPort: 80 ##容器端口号(这边只是创建资源,没有发布)
1.查看字段帮助信息
[root@master demo]# kubectl explain pods.spec.containers ##查看pod底下的spec底下的containers的信息;“.”代表层级关系
[root@master demo]# kubectl create -f nginx-deployment.yaml ##基于ymal文件格式创建nginx的资源
deployment.apps/nginx-deployment created
[root@master demo]# kubectl get pods ##查看资源信息
NAME READY STATUS RESTARTS AGE
nginx-deployment-d55b94fd-68cw6 1/1 Running 0 46s
nginx-deployment-d55b94fd-k7w2c 1/1 Running 0 46s
nginx-deployment-d55b94fd-q7qwk 1/1 Running 0 46s
2.创建service资源
[root@master demo]# vim nginx-service.yaml
apiVersion: v1
kind: Service ##资源类型变为service
metadata:
name: nginx-service ##定义名字
labels:
app: nginx
spec:
name: nginx-service
labels:
app: nginx
spec:
type: NodePort ##端口类型为NodePort
ports:
- port: 80 ##pod端口
targetPort: 80 ##target端口
selector:
app: nginx
[root@master demo]# kubectl create -f nginx-service.yaml ##创建service资源
service/nginx-service created
[root@master demo]# kubectl get svc ##查看service资源信息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d5h
nginx-service NodePort 10.0.0.214 <none> 80:47776/TCP ##对外暴露的端口为47776
3.这时打开浏览器就可以访问输入http://192.168.148.140:47776/或者http://192.168.148.139:47776/就可以访问nginx的页面信息
二.测试命令的正确性
●–dry-run:不创建资源只验证命令的正确性
[root@master demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run ##验证创建nginx的pod资源命令是否正确,不正确会报错
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created (dry run)
三.查看生成yaml格式
[root@master demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml ##加-o yaml就可以将资源生成yaml格式显示出来
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx-deployment
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
run: nginx-deployment
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx-deployment
spec:
containers:
- image: nginx
name: nginx-deployment
ports:
- containerPort: 80
resources: {}
status: {}
查看生成的json格式
[root@master demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json ##也可以生成json格式
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
{
"kind": "Deployment",
"apiVersion": "apps/v1beta1",
"metadata": {
"name": "nginx-deployment",
"creationTimestamp": null,
"labels": {
"run": "nginx-deployment"
}
},
"spec": {
"replicas": 3,
"selector": {
"matchLabels": {
"run": "nginx-deployment"
}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"run": "nginx-deployment"
}
},
"spec": {
"containers": [
{
"name": "nginx-deployment",
"image": "nginx",
"ports": [
{
"containerPort": 80
}
],
"resources": {}
}
]
}
},
"strategy": {}
},
"status": {}
}
四.将格式生成到某个文件中
1.基于没有创建的资源
[root@master demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml ##将nginx资源格式生成到my-deployment.yaml文件中
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
[root@master demo]# ls
my-deployment.yaml nginx-deployment.yaml nginx-service.yaml
[root@master demo]# vim my-deployment.yaml ##查看生成的文件格式
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: nginx-deployment
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
run: nginx-deployment
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: nginx-deployment
spec:
containers:
- image: nginx
name: nginx-deployment
ports:
- containerPort: 80
resources: {}
status: {}
2.基于现有的资源生成模板导出(适用于做备份)
[root@master demo]# kubectl get pods ##查看资源信息
NAME READY STATUS RESTARTS AGE
nginx-deployment-d55b94fd-68cw6 1/1 Running 0 27m
nginx-deployment-d55b94fd-k7w2c 1/1 Running 0 27m
nginx-deployment-d55b94fd-q7qwk 1/1 Running 0 27m
[root@master demo]# kubectl get deploy/nginx-deployment --export -o yaml ##基于已有的nginx资源生成模板
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: null
generation: 1
labels:
app: nginx
name: nginx-deployment
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.15.4
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status: {}
[root@master demo]# kubectl get deploy/nginx-deployment --export -o yaml > nginx2.yaml ##将生成的模板保存生成nginx2.yaml文件